[jabber] Finalisation de la migration à ejabberd
Ignore-this: e5b71a7f580e1db950bb30d9d7745fbe * une vcard est automatiquement créée avec FN et EMAIL * lostPassword.py envoie un mail aux nounous * images et css plus accessibles darcs-hash:20090809213427-bd074-19f0565242fb93d2051347eb47289e096bce00d9.gz
This commit is contained in:
parent
d65ba27a7f
commit
29e2ecae71
9 changed files with 84 additions and 124 deletions
|
@ -6,7 +6,7 @@ print
|
||||||
|
|
||||||
file=open('/var/www/jabber/template')
|
file=open('/var/www/jabber/template')
|
||||||
html=file.read()
|
html=file.read()
|
||||||
print html % "<p><img src='/erreurs/403.jpg' width='215' height='54' border='0' usemap='#Map'>\
|
print html % "<p><img src='/images/403.jpg' width='215' height='54' border='0' usemap='#Map'>\
|
||||||
<map name='Map'> \
|
<map name='Map'> \
|
||||||
</map>\
|
</map>\
|
||||||
</p>\
|
</p>\
|
||||||
|
|
|
@ -6,7 +6,7 @@ print
|
||||||
|
|
||||||
file=open('/var/www/jabber/template')
|
file=open('/var/www/jabber/template')
|
||||||
html=file.read()
|
html=file.read()
|
||||||
print html % "<p><img src='/erreurs/404.jpg' width='215' height='54' border='0' usemap='#Map'>\
|
print html % "<p><img src='/images/404.jpg' width='215' height='54' border='0' usemap='#Map'>\
|
||||||
<map name='Map'> \
|
<map name='Map'> \
|
||||||
</map>\
|
</map>\
|
||||||
</p>\
|
</p>\
|
||||||
|
|
|
@ -1,70 +1,12 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# -*- coding: utf-8 -*-
|
# -*- 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())
|
|
||||||
|
|
||||||
|
import string, re, sys, os
|
||||||
|
|
||||||
# # # # # # # # # # # # # # #
|
# # # # # # # # # # # # # # #
|
||||||
# Envoyer des e-mails #
|
# Envoyer des e-mails #
|
||||||
# # # # # # # # # # # # # # #
|
# # # # # # # # # # # # # # #
|
||||||
SENDMAIL = "/usr/sbin/sendmail" # sendmail location
|
SENDMAIL = "/usr/sbin/sendmail" # sendmail location
|
||||||
import os
|
|
||||||
|
|
||||||
def sendmail(text):
|
def sendmail(text):
|
||||||
p = os.popen("%s -t" % SENDMAIL, "w")
|
p = os.popen("%s -t" % SENDMAIL, "w")
|
||||||
|
@ -72,16 +14,4 @@ def sendmail(text):
|
||||||
sts = p.close()
|
sts = p.close()
|
||||||
if sts != None:
|
if sts != None:
|
||||||
print "Sendmail exit status :", sts
|
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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -6,32 +6,30 @@
|
||||||
# Qu'est-ce que ça fait : génère automatiquement un nouveau mot de passe
|
# Qu'est-ce que ça fait : génère automatiquement un nouveau mot de passe
|
||||||
# et l'envoie à l'utilisateur
|
# et l'envoie à l'utilisateur
|
||||||
#
|
#
|
||||||
# Configuration :
|
# Récupèrera l'adresse mail dans la vcard du compte
|
||||||
#
|
|
||||||
# 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
|
# Le fichier de log
|
||||||
logfile='/var/log/jabber/inscriptions.log'
|
logfile='/var/log/jabber/inscriptions.log'
|
||||||
########################################################################
|
########################################################################
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Si on a reçu de champs du formulaire
|
# Si on a reçu les champs du formulaire
|
||||||
# -> l'utilisateur a envoyer son login et son mail
|
# -> l'utilisateur a envoyé son login et son mail
|
||||||
# -> s'ils correspondent bien à un fichier xml
|
# -> s'ils correspondent bien à un fichier xml
|
||||||
# on envoie le mail avec le nouveau mot de passe
|
# on envoie le mail avec le nouveau mot de passe
|
||||||
# -> s'il y a une erreur, on réaffiche le formulaire
|
# -> s'il y a une erreur, on réaffiche le formulaire
|
||||||
# Sinon on affiche juste la template du 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()
|
form = cgi.FieldStorage()
|
||||||
print "content-type: text/html"
|
print "content-type: text/html"
|
||||||
print
|
print
|
||||||
|
|
||||||
erreur = ''
|
erreur = ''
|
||||||
|
host = os.environ['REMOTE_HOST']
|
||||||
file=open('/var/www/jabber/template')
|
html = open('/var/www/jabber/template').read()
|
||||||
html=file.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 :
|
try :
|
||||||
form['traitement'] # Si ne passe pas c'est que la page est donnée sans arguments
|
form['traitement'] # Si ne passe pas c'est que la page est donnée sans arguments
|
||||||
|
@ -47,20 +45,10 @@ try :
|
||||||
col_user='FF0000'
|
col_user='FF0000'
|
||||||
user=''
|
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 :
|
try :
|
||||||
mail = form['mail'].value
|
mail = form['mail'].value
|
||||||
mail = string.lower(mail)
|
mail = string.lower(mail)
|
||||||
col_mail = 'FFFFFF'
|
col_mail = 'FFFFFF'
|
||||||
if user:
|
|
||||||
if not mail == fonctions.XMLMailForUser(user): raise
|
|
||||||
except :
|
except :
|
||||||
erreur+= "<b>Erreur : </b>adresse mail incorecte.<br><br>"
|
erreur+= "<b>Erreur : </b>adresse mail incorecte.<br><br>"
|
||||||
mail=''
|
mail=''
|
||||||
|
@ -72,26 +60,31 @@ except : # si ce n'est pas passé : on a pas reçu le formulaire
|
||||||
mail = '' ; col_mail='FFFFFF'
|
mail = '' ; col_mail='FFFFFF'
|
||||||
|
|
||||||
if user and mail:
|
if user and mail:
|
||||||
t=time.localtime()
|
r, msg = commands.getstatusoutput('/usr/sbin/ejabberdctl %s%s%s' %
|
||||||
timestamp=''
|
('vcard-get', commands.mkarg(user),
|
||||||
for i in [0,1,2,3,4,5] :
|
' jabber.crans.org EMAIL USERID'))
|
||||||
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()
|
try:
|
||||||
# enregistrer le nouveau mot de passe
|
# Paranoia : on loggue
|
||||||
fonctions.chgePasswordForUser(user,newPassword)
|
file=open(logfile,'a')
|
||||||
# envoyer un mail
|
file.write("%s %s %s %s <%s>\n" % (datetime.now(), host, user, mail))
|
||||||
fonctions.sendmail(fonctions.parse_file('./templates/mail.tpl', {'mail':mail, 'password':newPassword}))
|
file.close()
|
||||||
# ecrire la confirmation
|
except:
|
||||||
print html % (fonctions.parse_file('./templates/new_password_confirm.tpl',{'mail':mail}))
|
pass
|
||||||
|
|
||||||
# Paranoia : on loggue
|
if r == 0 and msg == mail:
|
||||||
#file=open(logfile,'a')
|
fn = commands.getoutput('/usr/sbin/ejabberdctl %s%s%s' %
|
||||||
#file.write("%s %s %s %s.%s\n" % (timestamp, os.environ['REMOTE_HOST'], user, prenom, nom) )
|
('vcard-get', commands.mkarg(user),
|
||||||
#file.close()
|
' jabber.crans.org FN'))
|
||||||
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}))
|
|
||||||
|
|
||||||
|
fonctions.sendmail(mail_template % locals())
|
||||||
|
# ecrire la confirmation
|
||||||
|
print html % (await_new_password % locals())
|
||||||
|
sys.exit(0)
|
||||||
|
else:
|
||||||
|
erreur = '<p><b>Erreur :</b> Utilisateur inconnu ou adresse mail erronée</p>'
|
||||||
|
mail = ''
|
||||||
|
user = ''
|
||||||
|
|
||||||
|
# on affiche le formulaire
|
||||||
|
print html % (new_password_form % locals())
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
# Migration à ejabberd le 9 août 2009 -- adg #
|
# 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()
|
form = cgi.FieldStorage()
|
||||||
print "content-type: text/html"
|
print "content-type: text/html"
|
||||||
print
|
print
|
||||||
|
@ -103,6 +103,27 @@ if user and password and nom and prenom and mail:
|
||||||
page += '<p><b>ejabberdctl :</b> %s</p>' % msg
|
page += '<p><b>ejabberdctl :</b> %s</p>' % msg
|
||||||
|
|
||||||
if r == 0:
|
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 += '<p><b>ejabberdctl :</b> %s</p>' % 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 += '<p><b>ejabberdctl :</b> %s</p>' % 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 += "<b>Enregistrement réussi :</b><br><ul>"
|
page += "<b>Enregistrement réussi :</b><br><ul>"
|
||||||
page += "<li>vous pouvez immédiatement vous connecter au serveur jabber du crans<br>"
|
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>Votre nom d'utilisateur est : %s<br>" % user
|
||||||
|
|
4
jabber/templates/await_new_password.tpl
Normal file
4
jabber/templates/await_new_password.tpl
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<H2>J'ai perdu mon mot de passe.</H2>
|
||||||
|
|
||||||
|
Un mail a été envoyé aux nounous qui t'assigneront dès que possible un
|
||||||
|
nouveau mot de passe, et te l'enverront à %(mail)s.
|
|
@ -1,4 +1,18 @@
|
||||||
To: {mail}
|
To: roots@crans.org
|
||||||
Subject: Ton mouveau mot de passe Jabber
|
From: %(fn)s <%(mail)s>
|
||||||
|
Subject: Oubli de mon mot de passe jabber
|
||||||
|
|
||||||
Ton nouveau mot de passe est : {password}
|
Bonjour,
|
||||||
|
|
||||||
|
Je me suis rendu sur https://jabber.crans.org/lostPassword.py
|
||||||
|
depuis %(host)s, car j'ai oublié le mot de passe de mon compte
|
||||||
|
jabber (%(user)s@jabber.crans.org).
|
||||||
|
Pourriez-vous m'en générer un nouveau et me l'envoyer par mail
|
||||||
|
à %(mail)s.
|
||||||
|
|
||||||
|
Merci bien,
|
||||||
|
|
||||||
|
--
|
||||||
|
généré par lostPassword.py
|
||||||
|
|
||||||
|
ps: ejabberd@xmpp$ ejabberdctl set-password %(user)s jabber.crans.org ${PASSWD}
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
<H2>J'ai perdu mon mot de passe.</H2>
|
|
||||||
Ton mouveau mot de passe Jabber à été envoyé à l'adresse : {mail}
|
|
|
@ -1,6 +1,6 @@
|
||||||
<h1 id="title">Jabber / Perte de mot de passe</h1>
|
<h1 id="title">Jabber / Perte de mot de passe</h1>
|
||||||
<div id="content">
|
<div id="content">
|
||||||
{erreur}
|
%(erreur)s
|
||||||
<div id="explications">
|
<div id="explications">
|
||||||
Tu as perdu ton mot de passe <em>jabber</em> et tu
|
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
|
souhaites en obtenir un nouveau. Il te suffit alors de completer et de valider
|
||||||
|
@ -11,10 +11,10 @@ le formualire ci-dessous.
|
||||||
<table border="1px" cellpadding="5px" cellspacing="0" style="form">
|
<table border="1px" cellpadding="5px" cellspacing="0" style="form">
|
||||||
<tr>
|
<tr>
|
||||||
<td align=right>Login (JID):
|
<td align=right>Login (JID):
|
||||||
<td bgcolor={col_user}><input type=text name=user size=10 value="{user}">@jabber.crans.org
|
<td bgcolor=%(col_user)s><input type=text name=user size=10 value="%(user)s">@jabber.crans.org
|
||||||
<tr>
|
<tr>
|
||||||
<td align=right>Adresse mail :
|
<td align=right>Adresse mail :
|
||||||
<td bgcolor={col_mail}><input type=text name=mail size=30 value='{mail}'>
|
<td bgcolor=%(col_mail)s><input type=text name=mail size=30 value='%(mail)s'>
|
||||||
<tr>
|
<tr>
|
||||||
<td align=right>
|
<td align=right>
|
||||||
<td><input type=submit name=traitement value="OK">
|
<td><input type=submit name=traitement value="OK">
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue