diff --git a/jabber/403.py b/jabber/403.py index e5e8bfc5..b4786ae0 100755 --- a/jabber/403.py +++ b/jabber/403.py @@ -6,7 +6,7 @@ print file=open('/var/www/jabber/template') html=file.read() -print html % "

\ +print html % "

\ \ \

\ diff --git a/jabber/404.py b/jabber/404.py index 145c9a4c..5658503e 100755 --- a/jabber/404.py +++ b/jabber/404.py @@ -6,7 +6,7 @@ print file=open('/var/www/jabber/template') html=file.read() -print html % "

\ +print html % "

\ \ \

\ diff --git a/jabber/fonctions.py b/jabber/fonctions.py index b8163065..7ec1b156 100755 --- a/jabber/fonctions.py +++ b/jabber/fonctions.py @@ -1,70 +1,12 @@ #!/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()) +import string, re, sys, os # # # # # # # # # # # # # # # # Envoyer des e-mails # # # # # # # # # # # # # # # # SENDMAIL = "/usr/sbin/sendmail" # sendmail location -import os def sendmail(text): p = os.popen("%s -t" % SENDMAIL, "w") @@ -72,16 +14,4 @@ def sendmail(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 renvoyŽs par l'utilisateur -# si elle est dŽfinit (donc on a reu les rŽponses ˆ un forulaire) -# on execute l'action correspondante ; sinon on affiche la page par defaut - - - - diff --git a/jabber/lostPassword.py b/jabber/lostPassword.py index 682448d8..a13e34f2 100755 --- a/jabber/lostPassword.py +++ b/jabber/lostPassword.py @@ -6,32 +6,30 @@ # 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 +# Récupèrera l'adresse mail dans la vcard du compte # 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 +# Si on a reçu les champs du formulaire +# -> l'utilisateur a envoyé 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 +import os, cgi, string, sys, fonctions, commands +from datetime import datetime form = cgi.FieldStorage() print "content-type: text/html" print - erreur = '' - -file=open('/var/www/jabber/template') -html=file.read() +host = os.environ['REMOTE_HOST'] +html = open('/var/www/jabber/template').read() +new_password_form = open('./templates/new_password_form.tpl').read() +await_new_password = open('./templates/await_new_password.tpl').read() +mail_template = open('./templates/mail.tpl').read() try : form['traitement'] # Si ne passe pas c'est que la page est donnée sans arguments @@ -47,20 +45,10 @@ try : 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='' @@ -72,26 +60,31 @@ except : # si ce n'est pas passé : on a pas reçu le formulaire 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] + r, msg = commands.getstatusoutput('/usr/sbin/ejabberdctl %s%s%s' % + ('vcard-get', commands.mkarg(user), + ' jabber.crans.org EMAIL USERID')) - 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})) + try: + # Paranoia : on loggue + file=open(logfile,'a') + file.write("%s %s %s %s <%s>\n" % (datetime.now(), host, user, mail)) + file.close() + except: + pass - # 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})) + if r == 0 and msg == mail: + fn = commands.getoutput('/usr/sbin/ejabberdctl %s%s%s' % + ('vcard-get', commands.mkarg(user), + ' jabber.crans.org FN')) + fonctions.sendmail(mail_template % locals()) + # ecrire la confirmation + print html % (await_new_password % locals()) + sys.exit(0) + else: + erreur = '

Erreur : Utilisateur inconnu ou adresse mail erronée

' + mail = '' + user = '' + +# on affiche le formulaire +print html % (new_password_form % locals()) diff --git a/jabber/register.py b/jabber/register.py index 9de13a28..ff9a91cc 100755 --- a/jabber/register.py +++ b/jabber/register.py @@ -7,7 +7,7 @@ # Migration à ejabberd le 9 août 2009 -- adg # ############################################## -import os, cgi, string, time, sys, commands +import os, cgi, string, time, sys, commands, datetime form = cgi.FieldStorage() print "content-type: text/html" print @@ -103,6 +103,27 @@ if user and password and nom and prenom and mail: page += '

ejabberdctl : %s

' % msg if r == 0: + r, msg = commands.getstatusoutput('/usr/sbin/ejabberdctl %s%s%s%s' % + ('vcard-set', commands.mkarg(user), + ' jabber.crans.org EMAIL USERID', + commands.mkarg(mail))) + if r and msg: + page += '

ejabberdctl : %s

' % msg + + r, msg = commands.getstatusoutput('/usr/sbin/ejabberdctl %s%s%s%s' % + ('vcard-set', commands.mkarg(user), + ' jabber.crans.org FN', + commands.mkarg('%s %s' % (prenom,nom)))) + if r and msg: + page += '

ejabberdctl : %s

' % msg + + try: + log = open(logfile, 'a') + now = datetime.datetime.now() + log.write('%(now)s Creation de %(user)s@jabber.crans.org par %(prenom)s %(nom)s <%(mail)s>\n' % locals()) + log.close() + except Exception, e: + page+= str(e) page += "Enregistrement réussi :