diff --git a/jabber/403.py b/jabber/403.py new file mode 100755 index 00000000..e5e8bfc5 --- /dev/null +++ b/jabber/403.py @@ -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 % "

\ + \ +\ +

\ +

Page interdite

\ +

Vous n'avez pas l'autorisation d'afficher ce répertoire ou cette page.

\ +

Note : l'inscritpion à jabber n'est possible que depuis les ordinateurs de la zone crans.

\ +

" diff --git a/jabber/404.py b/jabber/404.py new file mode 100755 index 00000000..145c9a4c --- /dev/null +++ b/jabber/404.py @@ -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 % "

\ + \ +\ +

\ +

Page introuvable

\ +

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 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 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 :

Bonne utilisation de Jabber :)

" + page += "

Plus d'informations pour configurer son client sur le wiki." +else : + page += "" + page += "" + page += "
Identifiant souhaité (JID):@jabber.crans.org" % (col_user,user) + page += "
Mot de passe :" % col_pass + page += "
Retaper mot de passe :" % col_pass + page += "
Nom :" % (col_nom,nom) + page += "
Prénom :" % (col_prenom,prenom) + page += "
Adresse mail :" % (col_mail,mail) + 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   ::. + + + + + + + + +

+ %s +
+
+ +
Informations sur le serveur jabber du crans +
+

+
Jabber
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
presentation
liens
informations
vie
annuaire
pages perso
webmail
ssh
+ + 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. +
+
+
+ + + + +
Login (JID): + @jabber.crans.org +
Adresse mail : + +
+ +
+
+
+