[jabber] ajout du cgi pour créer un compte jabber
darcs-hash:20090728100655-bd074-9a4cf910f821f6b2dc69d8e9c74fe496ea6a37d7.gz
This commit is contained in:
parent
e5d6982a1e
commit
aaf52989f6
9 changed files with 521 additions and 0 deletions
16
jabber/403.py
Executable file
16
jabber/403.py
Executable file
|
@ -0,0 +1,16 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
print "content-type: text/html"
|
||||||
|
print
|
||||||
|
|
||||||
|
file=open('/var/www/jabber/template')
|
||||||
|
html=file.read()
|
||||||
|
print html % "<p><img src='/erreurs/403.jpg' width='215' height='54' border='0' usemap='#Map'>\
|
||||||
|
<map name='Map'> \
|
||||||
|
</map>\
|
||||||
|
</p>\
|
||||||
|
<p><b><font size='4'>Page interdite</font></b></p>\
|
||||||
|
<p>Vous n'avez pas l'autorisation d'afficher ce répertoire ou cette page.</p>\
|
||||||
|
<p><b>Note :</b> l'inscritpion à jabber n'est possible que depuis les ordinateurs de la zone crans.</p>\
|
||||||
|
<p></p>"
|
25
jabber/404.py
Executable file
25
jabber/404.py
Executable file
|
@ -0,0 +1,25 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
print "content-type: text/html"
|
||||||
|
print
|
||||||
|
|
||||||
|
file=open('/var/www/jabber/template')
|
||||||
|
html=file.read()
|
||||||
|
print html % "<p><img src='/erreurs/404.jpg' width='215' height='54' border='0' usemap='#Map'>\
|
||||||
|
<map name='Map'> \
|
||||||
|
</map>\
|
||||||
|
</p>\
|
||||||
|
<p><b><font size='4'> Page introuvable</font></b></p>\
|
||||||
|
<p> La page que vous voulez consulter est introuvable.</p>\
|
||||||
|
<p>Bon.</p>\
|
||||||
|
<p>On va pas en faire un drame non plus, hein ? <br>\
|
||||||
|
C'est p'têt de notre faute si elle n'est pas là, mais vous êtes \
|
||||||
|
venu ici tout seul. On ne vous a pas forcé. Donc c'est votre problème.\
|
||||||
|
Pas le nôtre.</p>\
|
||||||
|
<p>... et puis, en y réfléchissant un peu, est-ce que vous vouliez \
|
||||||
|
<i>vraiment</i> consulter cette page ? Est-ce que vous n'avez pas cliqué \
|
||||||
|
sur un lien, comme ça, au hasard ? Est-ce que vous n'avez pas tapé \
|
||||||
|
votre URL avec des moufles ? Est-ce que vous savez seulement taper sur un \
|
||||||
|
clavier ?</p> \
|
||||||
|
<p></p>"
|
87
jabber/fonctions.py
Executable file
87
jabber/fonctions.py
Executable file
|
@ -0,0 +1,87 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# # # # # # # # # # # # # #
|
||||||
|
# Génération de password #
|
||||||
|
# # # # # # # # # # # # # #
|
||||||
|
from whrandom import choice
|
||||||
|
import string
|
||||||
|
jabberuserdir='/var/lib/jabber/jabber.crans.org/'
|
||||||
|
def GenPasswd(length=8, chars=string.letters + string.digits):
|
||||||
|
return ''.join([choice(chars) for i in range(length)])
|
||||||
|
|
||||||
|
# # # # # # # # # # # # # #
|
||||||
|
# Parseur de templates #
|
||||||
|
# # # # # # # # # # # # # #
|
||||||
|
import re, sys
|
||||||
|
|
||||||
|
def parse(text, var_dictiary):
|
||||||
|
def replace(matchobj):
|
||||||
|
token = matchobj.group(1)
|
||||||
|
if var_dictiary.has_key(token):
|
||||||
|
return var_dictiary.get(token)
|
||||||
|
else:
|
||||||
|
return matchobj.group()
|
||||||
|
#raise NameError, 'parseur : variable inconnue : '+token
|
||||||
|
return re.sub('\{([^\}]+)\}',replace, text)
|
||||||
|
|
||||||
|
def parse_file(file_name, var_dictionary):
|
||||||
|
file = open(file_name, 'r')
|
||||||
|
text = file.read();
|
||||||
|
return parse(text, var_dictionary);
|
||||||
|
|
||||||
|
# # # # # # # # # # # # # #
|
||||||
|
# Modifier le fichier XML #
|
||||||
|
# # # # # # # # # # # # # #
|
||||||
|
def XMLChgePassword(XMLString, newPassword):
|
||||||
|
pattern = "<password xmlns='jabber:iq:auth'>(.*)</password>"
|
||||||
|
replace = "<password xmlns='jabber:iq:auth'>" + newPassword + "</password>"
|
||||||
|
XMLString = re.sub(pattern, replace, XMLString)
|
||||||
|
pattern = "<password xmlns='jabber:iq:auth' xdbns='jabber:iq:auth'>(.*)</password>"
|
||||||
|
replace = "<password xmlns='jabber:iq:auth' xdbns='jabber:iq:auth'>" + newPassword + "</password>"
|
||||||
|
return re.sub(pattern, replace, XMLString)
|
||||||
|
|
||||||
|
def chgePasswordForUser(user, newPassword):
|
||||||
|
fileName = jabberuserdir+user+".xml"
|
||||||
|
file=open(fileName)
|
||||||
|
xmlString=file.read()
|
||||||
|
xmlString = XMLChgePassword(xmlString, newPassword)
|
||||||
|
file=open(fileName,'w')
|
||||||
|
file.write(xmlString)
|
||||||
|
file.close()
|
||||||
|
os.chmod(fileName,0600)
|
||||||
|
|
||||||
|
# # # # # # # # # # # # # # #
|
||||||
|
# Lire le fichier XML #
|
||||||
|
# # # # # # # # # # # # # # #
|
||||||
|
def XMLMailForUser(user):
|
||||||
|
fileName = jabberuserdir+user+".xml"
|
||||||
|
file=open(fileName)
|
||||||
|
xmlString=file.read()
|
||||||
|
return re.sub("<email>([^<>]*)</email>",lambda m:m.group(1),re.search('<email>([^<>]*)</email>',xmlString).group())
|
||||||
|
|
||||||
|
|
||||||
|
# # # # # # # # # # # # # # #
|
||||||
|
# Envoyer des e-mails #
|
||||||
|
# # # # # # # # # # # # # # #
|
||||||
|
SENDMAIL = "/usr/sbin/sendmail" # sendmail location
|
||||||
|
import os
|
||||||
|
|
||||||
|
def sendmail(text):
|
||||||
|
p = os.popen("%s -t" % SENDMAIL, "w")
|
||||||
|
p.write(text)
|
||||||
|
sts = p.close()
|
||||||
|
if sts != None:
|
||||||
|
print "Sendmail exit status :", sts
|
||||||
|
|
||||||
|
# # # # # # # # # # # # # # #
|
||||||
|
# ok, maintenant on vas #
|
||||||
|
# faire des trucs #
|
||||||
|
# # # # # # # # # # # # # # #
|
||||||
|
# on regarde la variable des champs renvoys par l'utilisateur
|
||||||
|
# si elle est dfinit (donc on a reu les rponses un forulaire)
|
||||||
|
# on execute l'action correspondante ; sinon on affiche la page par defaut
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
97
jabber/lostPassword.py
Executable file
97
jabber/lostPassword.py
Executable file
|
@ -0,0 +1,97 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
# Fichier : lostPassword.py
|
||||||
|
# Qu'est-ce que ça fait : génère automatiquement un nouveau mot de passe
|
||||||
|
# et l'envoie à l'utilisateur
|
||||||
|
#
|
||||||
|
# Configuration :
|
||||||
|
#
|
||||||
|
# le répertoire où sont stoqués les fichiers xml des comptes jabber
|
||||||
|
#jabberuserdir='/var/lib/jabber/jabber.crans.org/' # Avec un / à la fin
|
||||||
|
from fonctions import jabberuserdir
|
||||||
|
# Le fichier de log
|
||||||
|
logfile='/var/log/jabber/inscriptions.log'
|
||||||
|
########################################################################
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
# Si on a reçu de champs du formulaire
|
||||||
|
# -> l'utilisateur a envoyer son login et son mail
|
||||||
|
# -> s'ils correspondent bien à un fichier xml
|
||||||
|
# on envoie le mail avec le nouveau mot de passe
|
||||||
|
# -> s'il y a une erreur, on réaffiche le formulaire
|
||||||
|
# Sinon on affiche juste la template du formulaire
|
||||||
|
|
||||||
|
import os, cgi, string, time, sys, fonctions
|
||||||
|
form = cgi.FieldStorage()
|
||||||
|
print "content-type: text/html"
|
||||||
|
print
|
||||||
|
|
||||||
|
erreur = ''
|
||||||
|
|
||||||
|
file=open('/var/www/jabber/template')
|
||||||
|
html=file.read()
|
||||||
|
|
||||||
|
try :
|
||||||
|
form['traitement'] # Si ne passe pas c'est que la page est donnée sans arguments
|
||||||
|
# Récupération des arguments et test
|
||||||
|
try :
|
||||||
|
user=form['user'].value
|
||||||
|
user=string.lower(user)
|
||||||
|
for i in user[:] :
|
||||||
|
if not i in string.lowercase+string.digits : raise
|
||||||
|
if not user[0] in string.lowercase : raise
|
||||||
|
col_user='FFFFFF'
|
||||||
|
except :
|
||||||
|
col_user='FF0000'
|
||||||
|
user=''
|
||||||
|
|
||||||
|
filename=jabberuserdir+user+".xml"
|
||||||
|
|
||||||
|
if user:
|
||||||
|
if not os.path.exists(filename) :
|
||||||
|
erreur+= "<b>Erreur : </b>login inconnu : "+user+"<br><br>"
|
||||||
|
col_user='FFFF00'
|
||||||
|
user=''
|
||||||
|
|
||||||
|
try :
|
||||||
|
mail = form['mail'].value
|
||||||
|
mail = string.lower(mail)
|
||||||
|
col_mail = 'FFFFFF'
|
||||||
|
if user:
|
||||||
|
if not mail == fonctions.XMLMailForUser(user): raise
|
||||||
|
except :
|
||||||
|
erreur+= "<b>Erreur : </b>adresse mail incorecte.<br><br>"
|
||||||
|
mail=''
|
||||||
|
col_mail='FF0000'
|
||||||
|
|
||||||
|
# Fin des tests
|
||||||
|
except : # si ce n'est pas passé : on a pas reçu le formulaire
|
||||||
|
user = '' ; col_user='FFFFFF'
|
||||||
|
mail = '' ; col_mail='FFFFFF'
|
||||||
|
|
||||||
|
if user and mail:
|
||||||
|
t=time.localtime()
|
||||||
|
timestamp=''
|
||||||
|
for i in [0,1,2,3,4,5] :
|
||||||
|
if t[i]<10 : timestamp += "0%s" % t[i]
|
||||||
|
else : timestamp += "%s" % t[i]
|
||||||
|
timestamp=timestamp[0:8]+"T"+timestamp[8:10]+':'+timestamp[10:12]+':'+timestamp[12:14]
|
||||||
|
|
||||||
|
newPassword = fonctions.GenPasswd()
|
||||||
|
# enregistrer le nouveau mot de passe
|
||||||
|
fonctions.chgePasswordForUser(user,newPassword)
|
||||||
|
# envoyer un mail
|
||||||
|
fonctions.sendmail(fonctions.parse_file('./templates/mail.tpl', {'mail':mail, 'password':newPassword}))
|
||||||
|
# ecrire la confirmation
|
||||||
|
print html % (fonctions.parse_file('./templates/new_password_confirm.tpl',{'mail':mail}))
|
||||||
|
|
||||||
|
# Paranoia : on loggue
|
||||||
|
#file=open(logfile,'a')
|
||||||
|
#file.write("%s %s %s %s.%s\n" % (timestamp, os.environ['REMOTE_HOST'], user, prenom, nom) )
|
||||||
|
#file.close()
|
||||||
|
else:
|
||||||
|
# on affiche le formulaire
|
||||||
|
print html % (fonctions.parse_file('./templates/new_password_form.tpl',{'mail':mail, 'user':user, 'col_user':col_user, 'col_mail':col_mail, 'erreur':erreur}))
|
||||||
|
|
149
jabber/register.py
Executable file
149
jabber/register.py
Executable file
|
@ -0,0 +1,149 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
###########################################
|
||||||
|
# Système d'inscription en ligne à jabber #
|
||||||
|
# 14/02/2004 -- Frédéric Pauget #
|
||||||
|
###########################################
|
||||||
|
|
||||||
|
import os, cgi, string, time, sys
|
||||||
|
form = cgi.FieldStorage()
|
||||||
|
print "content-type: text/html"
|
||||||
|
print
|
||||||
|
|
||||||
|
file=open('/var/www/jabber/template')
|
||||||
|
html=file.read()
|
||||||
|
|
||||||
|
jabberuserdir='/var/lib/jabber/jabber.crans.org/' # Avec un / à la fin
|
||||||
|
logfile='/var/log/jabber/inscriptions.log'
|
||||||
|
|
||||||
|
page ="<H2>Création d'un compte Jabber.</H2>"
|
||||||
|
|
||||||
|
try :
|
||||||
|
form['traitement'] # Si ne passe pas c'est que la page est donnés sans arguements
|
||||||
|
# Récupération des arguments et test
|
||||||
|
try :
|
||||||
|
user=form['user'].value
|
||||||
|
user=string.lower(user)
|
||||||
|
for i in user[:] :
|
||||||
|
if not i in string.lowercase+string.digits : raise
|
||||||
|
if not user[0] in string.lowercase : raise
|
||||||
|
col_user='FFFFFF'
|
||||||
|
except :
|
||||||
|
col_user='FF0000'
|
||||||
|
user=''
|
||||||
|
|
||||||
|
filename=jabberuserdir+user+".xml"
|
||||||
|
|
||||||
|
if user :
|
||||||
|
if os.path.exists(filename) :
|
||||||
|
page += "<b>Erreur : </b>login déja pris.<br><br>"
|
||||||
|
col_user='FFFF00'
|
||||||
|
user=''
|
||||||
|
|
||||||
|
try :
|
||||||
|
pass1=form['pass1'].value
|
||||||
|
pass2=form['pass2'].value
|
||||||
|
if pass1!=pass2 : raise
|
||||||
|
password=pass1
|
||||||
|
col_pass='FFFFFF'
|
||||||
|
except :
|
||||||
|
password=''
|
||||||
|
col_pass='FF0000'
|
||||||
|
|
||||||
|
try :
|
||||||
|
nom=form['nom'].value
|
||||||
|
nom=string.capitalize(nom)
|
||||||
|
for i in nom[:] :
|
||||||
|
if not i in string.letters+' -' : raise
|
||||||
|
if not nom[0] in string.uppercase : raise
|
||||||
|
col_nom='FFFFFF'
|
||||||
|
except :
|
||||||
|
nom=''
|
||||||
|
col_nom='FF0000'
|
||||||
|
|
||||||
|
try :
|
||||||
|
prenom=form['prenom'].value
|
||||||
|
prenom=string.capitalize(prenom)
|
||||||
|
for i in prenom[:] :
|
||||||
|
if not i in string.letters+' -' : raise
|
||||||
|
if not prenom[0] in string.uppercase : raise
|
||||||
|
col_prenom='FFFFFF'
|
||||||
|
except :
|
||||||
|
prenom=''
|
||||||
|
col_prenom='FF0000'
|
||||||
|
|
||||||
|
try :
|
||||||
|
mail=form['mail'].value
|
||||||
|
mail = string.lower(mail)
|
||||||
|
if not mail[0] in string.lowercase : raise
|
||||||
|
if string.find(mail,'@')<1 : raise
|
||||||
|
if not (mail[-3] in '.' or mail[-4] in ('.')) : raise
|
||||||
|
for l in mail[:]:
|
||||||
|
if not l in (string.lowercase + string.digits + '-_.@') : raise
|
||||||
|
col_mail='FFFFFF'
|
||||||
|
except :
|
||||||
|
mail=''
|
||||||
|
col_mail='FF0000'
|
||||||
|
|
||||||
|
# Fin des tests
|
||||||
|
except :
|
||||||
|
user ='' ; col_user='FFFFFF'
|
||||||
|
nom='' ; col_nom='FFFFFF'
|
||||||
|
prenom='' ; col_prenom='FFFFFF'
|
||||||
|
mail='' ; col_mail='FFFFFF'
|
||||||
|
col_pass='FFFFFF'
|
||||||
|
|
||||||
|
if col_user!='FFFFFF' or col_pass!='FFFFFF' or col_mail!='FFFFFF' or col_nom!='FFFFFF' or col_prenom!='FFFFFF' :
|
||||||
|
page+="Certaines donnes sont incorrectes :<br><br>"
|
||||||
|
|
||||||
|
if user and password and nom and prenom and mail:
|
||||||
|
t=time.localtime()
|
||||||
|
timestamp=''
|
||||||
|
for i in [0,1,2,3,4,5] :
|
||||||
|
if t[i]<10 : timestamp += "0%s" % t[i]
|
||||||
|
else : timestamp += "%s" % t[i]
|
||||||
|
timestamp=timestamp[0:8]+"T"+timestamp[8:10]+':'+timestamp[10:12]+':'+timestamp[12:14]
|
||||||
|
file=open(filename,'w')
|
||||||
|
file.write("<xdb><password xmlns='jabber:iq:auth' xdbns='jabber:iq:auth'>%s</password>" % password)
|
||||||
|
file.write("<query xmlns='jabber:iq:register' xdbns='jabber:iq:register'>")
|
||||||
|
file.write("<username>%s</username>" % user)
|
||||||
|
file.write("<password xmlns='jabber:iq:auth'>%s</password>" % password)
|
||||||
|
file.write("<name>%s.%s</name>" % (prenom,nom) )
|
||||||
|
file.write("<email>%s</email>" % mail)
|
||||||
|
file.write("<x xmlns='jabber:x:delay' stamp='%s'>registered</x></query><foo xdbns='jabber:x:offline' xmlns='jabber:x:offline'>" % timestamp)
|
||||||
|
# file.write("<message from='jabber.crans.org' to='%s@jabber.crans.org'>\n" % user)
|
||||||
|
# file.write(" <subject>Bienvenue !</subject>\n")
|
||||||
|
# file.write(" <body>Bienvenue sur le seveur Jabber du Cr@ns -- Nous espérons que vous aprécierez ce service !</body>\n")
|
||||||
|
# file.write(" <x xmlns='jabber:x:delay' from='%s@jabber.crans.org' stamp='%s'>Offline Storage</x></message>" % (user, timestamp) )
|
||||||
|
file.write("</foo></xdb>")
|
||||||
|
file.close()
|
||||||
|
os.chmod(filename,0600)
|
||||||
|
|
||||||
|
# Paranoia : on loggue
|
||||||
|
file=open(logfile,'a')
|
||||||
|
file.write("%s %s %s %s.%s\n" % (timestamp, os.environ['REMOTE_HOST'], user, prenom, nom) )
|
||||||
|
file.close()
|
||||||
|
|
||||||
|
page += "<b>Enregistrement réussi :</b><br><ul>"
|
||||||
|
page += "<li>vous pouvez immédiatement vous connecter au serveur jabber du crans<br>"
|
||||||
|
page += "<li>Votre nom d'utilisateur est : %s<br>" % user
|
||||||
|
page += "<li>Le serveur est : jabber.crans.org<br>"
|
||||||
|
page += "<li>Votre JID est %s@jabber.crans.org<br>" %user
|
||||||
|
page += "<li>Le port standard est le 5222<br>"
|
||||||
|
page += "<li>Notre serveur accepte le SSL sur le port 5223 ('ancien SSL')<br>"
|
||||||
|
page += "</ul><p><b>Bonne utilisation de Jabber :)</b></p>"
|
||||||
|
page += "<p>Plus d'informations pour configurer son client sur le <a href=http://wiki.crans.org/VieCrans/UtiliserJabber>wiki</a>."
|
||||||
|
else :
|
||||||
|
page += "<table align=center border=1 cellpadding=5>"
|
||||||
|
page += "<form method=post>"
|
||||||
|
page += "<tr><td align=right>Identifiant souhaité (JID):<td bgcolor=#%s><input type=text name=user size=10 value='%s'>@jabber.crans.org" % (col_user,user)
|
||||||
|
page += "<tr><td align=right>Mot de passe :<td bgcolor=#%s><input type=password name=pass1 size=15>" % col_pass
|
||||||
|
page += "<tr><td align=right>Retaper mot de passe :<td bgcolor=#%s><input type=password name=pass2 size=15>" % col_pass
|
||||||
|
page += "<tr><td align=right>Nom :<td bgcolor=#%s><input type=text name=nom size=15 value='%s'>" % (col_nom,nom)
|
||||||
|
page += "<tr><td align=right>Prénom :<td bgcolor=#%s><input type=text name=prenom size=15 value='%s'>" % (col_prenom,prenom)
|
||||||
|
page += "<tr><td align=right>Adresse mail :<td bgcolor=#%s><input type=text name=mail size=30 value='%s'>" % (col_mail,mail)
|
||||||
|
page += "<tr><td align=right><td><input type=submit name=traitement value=\"S'inscrire\">"
|
||||||
|
page += "</table></form>"
|
||||||
|
|
||||||
|
print html % page
|
117
jabber/template
Normal file
117
jabber/template
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
<HTML>
|
||||||
|
<HEAD>
|
||||||
|
<TITLE>.:: Jabber @ C r a n s ::.</TITLE>
|
||||||
|
<META NAME="keywords" CONTENT="crans, informatique, réseau, réseaux, cachan, ENS, école, normale, supérieure, ecole, superieure, jabber, xmpp">
|
||||||
|
<META NAME="description" CONTENT="Site web du CRANS, l'association qui gère le réseau des élèves de l'Ecole Normale Supérieure de Cachan">
|
||||||
|
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
|
||||||
|
<script language="JavaScript">
|
||||||
|
<!--
|
||||||
|
<!--
|
||||||
|
function MM_preloadImages() { //v3.0
|
||||||
|
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
|
||||||
|
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
|
||||||
|
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
|
||||||
|
}
|
||||||
|
|
||||||
|
function MM_swapImgRestore() { //v3.0
|
||||||
|
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
|
||||||
|
}
|
||||||
|
|
||||||
|
function MM_findObj(n, d) { //v4.0
|
||||||
|
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
|
||||||
|
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
|
||||||
|
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
|
||||||
|
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
|
||||||
|
if(!x && document.getElementById) x=document.getElementById(n); return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
function MM_swapImage() { //v3.0
|
||||||
|
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
|
||||||
|
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
|
||||||
|
}
|
||||||
|
|
||||||
|
function MM_reloadPage(init) { //reloads the window if Nav4 resized
|
||||||
|
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
|
||||||
|
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
|
||||||
|
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
|
||||||
|
}
|
||||||
|
MM_reloadPage(true);
|
||||||
|
// -->
|
||||||
|
|
||||||
|
function MM_displayStatusMsg(msgStr) { //v1.0
|
||||||
|
status=msgStr;
|
||||||
|
document.MM_returnValue = true;
|
||||||
|
}
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<link rel="SHORTCUT ICON" HREF="/favicon.ico">
|
||||||
|
<link rel="stylesheet" href="/styles/crans.css" type="text/css">
|
||||||
|
</HEAD>
|
||||||
|
<BODY BGCOLOR=#FFFFFF leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onLoad="MM_preloadImages('/images/presentation-hi.jpg','/images/presentation-down.jpg','/images/liens-hi.jpg','/images/liens-down.jpg','/images/informations-hi.jpg','/images/informations-down.jpg','/images/vie-hi.jpg','/images/vie-down.jpg','/images/annuaire-hi.jpg','/images/annuaire-down.jpg','/images/pages-perso-hi.jpg','/images/pages-perso-down.jpg','/images/webmail-hi.jpg','/images/webmail-down.jpg','/images/ssh-hi.jpg','/images/ssh-down.jpg')">
|
||||||
|
<div id="Texte" style="position:absolute; left:200px; top:152px; width:667px; z-index:1; overflow: visible; visibility: visible; background-color: #FFFFFF; layer-background-color: #FFFFFF">
|
||||||
|
%s
|
||||||
|
<br>
|
||||||
|
<hr>
|
||||||
|
<table width="650" cellpadding="0" cellspacing="0" border="0"><tr>
|
||||||
|
<td align=right><a href="/">Informations sur le serveur jabber du crans</a>
|
||||||
|
</table>
|
||||||
|
<p></p></div>
|
||||||
|
<div id="Titre" style="position:absolute; left:462px; top:42px; width:261px;
|
||||||
|
height:34px; z-index:2"><font size="5" color="#FFFFFF"><b>Jabber</b></font></div>
|
||||||
|
<TABLE WIDTH=1004 BORDER=0 CELLPADDING=0 CELLSPACING=0>
|
||||||
|
<TR>
|
||||||
|
<TD HEIGHT=138 COLSPAN=4> <a name="top"></a><IMG SRC="/images/ntop.jpg" WIDTH=1004 HEIGHT=138 name="top"></TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
|
<TD WIDTH=145 rowspan="2"> <a href="https://www.crans.org/AssociationCrans/CransPresentation" onMouseOut="MM_swapImgRestore();MM_displayStatusMsg('Bienvenue sur le site du cr@ns');return document.MM_returnValue" onMouseOver="MM_swapImage('presentation','','/images/presentation-hi.jpg',1);MM_displayStatusMsg('Présentation du cr@ns');return document.MM_returnValue" onMouseDown="MM_swapImage('presentation','','/images/presentation-down.jpg',1)" onMouseUp="MM_swapImage('presentation','','/images/presentation-hi.jpg',1)"><IMG SRC="/images/presentation.jpg" WIDTH=145 HEIGHT=36 name="presentation" border="0" ALT="presentation"></a></TD>
|
||||||
|
<TD WIDTH=21 ROWSPAN=9> <IMG SRC="/images/nborder.jpg" WIDTH=21 HEIGHT=242 name="border"></TD>
|
||||||
|
<TD WIDTH=47 HEIGHT=16 valign="top"> <IMG SRC="/images/nback.jpg" name="back" align="top"></TD>
|
||||||
|
<TD WIDTH=791></TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
|
<TD HEIGHT=20></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
|
<TD WIDTH=145 HEIGHT=29> <a href="http://www.crans.org/" onMouseOut="MM_swapImgRestore();MM_displayStatusMsg('Bienvenue sur le site du cr@ns');return document.MM_returnValue" onMouseOver="MM_swapImage('liens','','/images/liens-hi.jpg',1);MM_displayStatusMsg('Liens & Contacts');return document.MM_returnValue" onMouseDown="MM_swapImage('liens','','/images/liens-down.jpg',1)" onMouseUp="MM_swapImage('liens','','/images/liens-hi.jpg',1)"><IMG SRC="/images/liens.jpg" WIDTH=145 HEIGHT=29 ALT="liens" name="liens" border="0"></a></TD>
|
||||||
|
<TD></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
|
<TD WIDTH=145 HEIGHT=30> <a href="http://jabber.crans.org/" onMouseOut="MM_swapImgRestore();MM_displayStatusMsg('Bienvenue sur le site du cr@ns');return document.MM_returnValue" onMouseOver="MM_swapImage('informations','','/images/informations-hi.jpg',1);MM_displayStatusMsg('Informations techniques et administratives');return document.MM_returnValue" onMouseUp="MM_swapImage('informations','','/images/informations-hi.jpg',1)" onMouseDown="MM_swapImage('informations','','/images/informations-down.jpg',1)"><IMG SRC="/images/informations.jpg" WIDTH=145 HEIGHT=30 ALT="informations" name="informations" border="0"></a></TD>
|
||||||
|
<TD></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
|
<TD WIDTH=145 HEIGHT=30> <a href="http://www.crans.org/VieCrans" onMouseOut="MM_swapImgRestore();MM_displayStatusMsg('Bienvenue sur le site du cr@ns');return document.MM_returnValue" onMouseOver="MM_swapImage('vie','','/images/vie-hi.jpg',1);MM_displayStatusMsg('La vie du cr@ns');return document.MM_returnValue" onMouseDown="MM_swapImage('vie','','/images/vie-down.jpg',1)" onMouseUp="MM_swapImage('vie','','/images/vie-hi.jpg',1)"><IMG SRC="/images/vie.jpg" WIDTH=145 HEIGHT=30 ALT="vie" name="vie" border="0"></a></TD>
|
||||||
|
<TD></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
|
<TD WIDTH=145 HEIGHT=29> <a href="/cransonly/boxesprenom.html" onMouseOut="MM_swapImgRestore();MM_displayStatusMsg('Bienvenue sur le site du cr@ns');return document.MM_returnValue" onMouseOver="MM_swapImage('annuaire','','/images/annuaire-hi.jpg',1);MM_displayStatusMsg('Annuaire des adhérents');return document.MM_returnValue" onMouseDown="MM_swapImage('annuaire','','/images/annuaire-down.jpg',1)" onMouseUp="MM_swapImage('annuaire','','/images/annuaire-hi.jpg',1)"><IMG SRC="/images/annuaire.jpg" WIDTH=145 HEIGHT=29 ALT="annuaire" name="annuaire" border="0"></a></TD>
|
||||||
|
<TD></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
|
<TD WIDTH=145 HEIGHT=28> <a href="https://perso.crans.org" onMouseOut="MM_swapImgRestore();MM_displayStatusMsg('Bienvenue sur le site du cr@ns');return document.MM_returnValue" onMouseOver="MM_swapImage('pagesperso','','/images/pages-perso-hi.jpg',1);MM_displayStatusMsg('Pages perso des adhérents');return document.MM_returnValue" onMouseDown="MM_swapImage('pagesperso','','/images/pages-perso-down.jpg',1)" onMouseUp="MM_swapImage('pagesperso','','/images/pages-perso-hi.jpg',1)"><IMG SRC="/images/pages-perso.jpg" WIDTH=145 HEIGHT=28 ALT="pages perso" name="pagesperso" border="0"></a></TD>
|
||||||
|
<TD></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
|
<TD WIDTH=145 HEIGHT=29> <a href="https://webmail.crans.org/" onMouseOut="MM_swapImgRestore();MM_displayStatusMsg('Bienvenue sur le site du cr@ns');return document.MM_returnValue" onMouseOver="MM_swapImage('webmail','','/images/webmail-hi.jpg',1);MM_displayStatusMsg('Accès mail sécurisé (imp)');return document.MM_returnValue" onMouseDown="MM_swapImage('webmail','','/images/webmail-down.jpg',1)" onMouseUp="MM_swapImage('webmail','','/images/webmail-hi.jpg',1)"><IMG SRC="/images/webmail.jpg" WIDTH=145 HEIGHT=29 ALT="webmail" name="webmail" border="0"></a></TD>
|
||||||
|
<TD></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
|
<TD WIDTH=145 HEIGHT=31> <a href="https://ssh.crans.org/" onMouseOut="MM_swapImgRestore();MM_displayStatusMsg('Bienvenue sur le site du cr@ns');return document.MM_returnValue" onMouseOver="MM_swapImage('ssh','','/images/ssh-hi.jpg',1);MM_displayStatusMsg('Connexion SSH');return document.MM_returnValue" onMouseDown="MM_swapImage('ssh','','/images/ssh-down.jpg',1)" onMouseUp="MM_swapImage('ssh','','/images/ssh-hi.jpg',1)"><IMG SRC="/images/ssh.jpg" WIDTH=145 HEIGHT=31 ALT="ssh" name="ssh" border="0"></a></TD>
|
||||||
|
<TD></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
<TR>
|
||||||
|
<TD WIDTH=166 HEIGHT=234 COLSPAN=2> <IMG SRC="https://jabber.crans.org/images/nleft.jpg" WIDTH=166 HEIGHT=234 name="left"></TD>
|
||||||
|
<TD></TD>
|
||||||
|
<TD></TD>
|
||||||
|
</TR>
|
||||||
|
</TABLE>
|
||||||
|
</BODY>
|
||||||
|
</HTML>
|
4
jabber/templates/mail.tpl
Normal file
4
jabber/templates/mail.tpl
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
To: {mail}
|
||||||
|
Subject: Ton mouveau mot de passe Jabber
|
||||||
|
|
||||||
|
Ton nouveau mot de passe est : {password}
|
2
jabber/templates/new_password_confirm.tpl
Normal file
2
jabber/templates/new_password_confirm.tpl
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
<H2>J'ai perdu mon mot de passe.</H2>
|
||||||
|
Ton mouveau mot de passe Jabber à été envoyé à l'adresse : {mail}
|
24
jabber/templates/new_password_form.tpl
Normal file
24
jabber/templates/new_password_form.tpl
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<h1 id="title">Jabber / Perte de mot de passe</h1>
|
||||||
|
<div id="content">
|
||||||
|
{erreur}
|
||||||
|
<div id="explications">
|
||||||
|
Tu as perdu ton mot de passe <em>jabber</em> et tu
|
||||||
|
souhaites en obtenir un nouveau. Il te suffit alors de completer et de valider
|
||||||
|
le formualire ci-dessous.
|
||||||
|
</div>
|
||||||
|
<div id="formulaire">
|
||||||
|
<form method="post">
|
||||||
|
<table border="1px" cellpadding="5px" cellspacing="0" style="form">
|
||||||
|
<tr>
|
||||||
|
<td align=right>Login (JID):
|
||||||
|
<td bgcolor={col_user}><input type=text name=user size=10 value="{user}">@jabber.crans.org
|
||||||
|
<tr>
|
||||||
|
<td align=right>Adresse mail :
|
||||||
|
<td bgcolor={col_mail}><input type=text name=mail size=30 value='{mail}'>
|
||||||
|
<tr>
|
||||||
|
<td align=right>
|
||||||
|
<td><input type=submit name=traitement value="OK">
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
Loading…
Add table
Add a link
Reference in a new issue