La page que vous voulez consulter est introuvable.
\
+
Bon.
\
+
On va pas en faire un drame non plus, hein ? \
+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.
\
+
... et puis, en y réfléchissant un peu, est-ce que vous vouliez \
+vraiment 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 ?
\
+"
diff --git a/jabber/fonctions.py b/jabber/fonctions.py
new file mode 100755
index 00000000..b8163065
--- /dev/null
+++ b/jabber/fonctions.py
@@ -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 = "(.*)"
+ replace = "" + newPassword + ""
+ XMLString = re.sub(pattern, replace, XMLString)
+ pattern = "(.*)"
+ replace = "" + newPassword + ""
+ 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("([^<>]*)",lambda m:m.group(1),re.search('([^<>]*)',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
+
+
+
+
+
diff --git a/jabber/lostPassword.py b/jabber/lostPassword.py
new file mode 100755
index 00000000..682448d8
--- /dev/null
+++ b/jabber/lostPassword.py
@@ -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+= "Erreur : login inconnu : "+user+"
"
+ 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+= "Erreur : adresse mail incorecte.
"
+ 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}))
+
diff --git a/jabber/register.py b/jabber/register.py
new file mode 100755
index 00000000..606096b6
--- /dev/null
+++ b/jabber/register.py
@@ -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 ="
Création d'un compte Jabber.
"
+
+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 += "Erreur : login déja pris.
"
+ 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 :
"
+
+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("%s" % password)
+ file.write("")
+ file.write("%s" % user)
+ file.write("%s" % password)
+ file.write("%s.%s" % (prenom,nom) )
+ file.write("%s" % mail)
+ file.write("registered" % timestamp)
+# file.write("\n" % user)
+# file.write(" Bienvenue !\n")
+# file.write(" Bienvenue sur le seveur Jabber du Cr@ns -- Nous espérons que vous aprécierez ce service !\n")
+# file.write(" Offline Storage" % (user, timestamp) )
+ file.write("")
+ 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 += "Enregistrement réussi :
"
+ page += "
vous pouvez immédiatement vous connecter au serveur jabber du crans "
+ page += "
Votre nom d'utilisateur est : %s " % user
+ page += "
Le serveur est : jabber.crans.org "
+ page += "
Votre JID est %s@jabber.crans.org " %user
+ page += "
Le port standard est le 5222 "
+ page += "
Notre serveur accepte le SSL sur le port 5223 ('ancien SSL') "
+ page += "
Bonne utilisation de Jabber :)
"
+ page += "
Plus d'informations pour configurer son client sur le wiki."
+else :
+ page += "
"
+ page += "
"
+
+print html % page
diff --git a/jabber/template b/jabber/template
new file mode 100644
index 00000000..cf99f926
--- /dev/null
+++ b/jabber/template
@@ -0,0 +1,117 @@
+
+
+ .:: Jabber @ C r a n s ::.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jabber/templates/mail.tpl b/jabber/templates/mail.tpl
new file mode 100644
index 00000000..049e6187
--- /dev/null
+++ b/jabber/templates/mail.tpl
@@ -0,0 +1,4 @@
+To: {mail}
+Subject: Ton mouveau mot de passe Jabber
+
+Ton nouveau mot de passe est : {password}
diff --git a/jabber/templates/new_password_confirm.tpl b/jabber/templates/new_password_confirm.tpl
new file mode 100644
index 00000000..860f2731
--- /dev/null
+++ b/jabber/templates/new_password_confirm.tpl
@@ -0,0 +1,2 @@
+
J'ai perdu mon mot de passe.
+Ton mouveau mot de passe Jabber à été envoyé à l'adresse : {mail}
diff --git a/jabber/templates/new_password_form.tpl b/jabber/templates/new_password_form.tpl
new file mode 100644
index 00000000..8af45f2b
--- /dev/null
+++ b/jabber/templates/new_password_form.tpl
@@ -0,0 +1,24 @@
+
Jabber / Perte de mot de passe
+
+{erreur}
+
+Tu as perdu ton mot de passe jabber et tu
+souhaites en obtenir un nouveau. Il te suffit alors de completer et de valider
+le formualire ci-dessous.
+