Commit 28f4aeed authored by Hamza Dely's avatar Hamza Dely

[password_reset] Gère les noms d'utilisateurs encodés en UTF-8

parent 43a0eb23
......@@ -18,6 +18,9 @@
"""
Formulaire de l'application password_reset
"""
from __future__ import unicode_literals
#: Import des formulaires
from django import forms
......@@ -26,27 +29,12 @@ from django.utils.translation import ugettext_lazy as _
#: Fonctions de communication avec la base LDAP
from ldap import FILTER_ERROR
from lc_ldap import shortcuts
from lc_ldap import shortcuts, crans_utils
#http://docs.oracle.com/javase/jndi/tutorial/beyond/names/syntax.html
_ldap_escape = {
'(' : r'\(',
')' : r'\)',
'"' : r'\\\"',
"'" : r"\'",
',' : r'\\\,',
'+' : r'\\\+',
'<' : r'\\\<',
'>' : r'\\\>',
'\\' : r'\\\\',
}
def escape_ldap(s):
return "".join(_ldap_escape.get(c, c) for c in str(s))
class EmailForm(forms.Form):
"""
Formulaire de demande d'une adresse e-mail.
Formulaire de demande d'une adresse e-mail.
"""
email = forms.EmailField(
label=_(u'Adresse e-mail'),
......@@ -59,7 +47,7 @@ class EmailForm(forms.Form):
Renvoie l'objet LDAP à partir de l'e-mail
"""
try:
email = escape_ldap(self.cleaned_data['email'])
email = crans_utils.escape(self.cleaned_data['email'])
conn = shortcuts.lc_ldap_readonly()
# On cherches les objets LDAP tels que :
# * le mail est dans le champ `mail` ou `mailExt`
......@@ -68,7 +56,7 @@ class EmailForm(forms.Form):
# * et il a un compte crans
# * et il n'a pas de droits
res = conn.search(
u"(&(|(mail=%s)(mailExt=%s))\
"(&(|(mail=%s)(mailExt=%s))\
(!(shadowExpire=0))(aid=*)(uid=*)(!(droits=*)))"
% (email, email)
)
......@@ -84,7 +72,7 @@ class UsernameForm(forms.Form):
Formulaire de demande d'un login Cr@ns.
"""
username = forms.CharField(
label=_(u"Nom d'utilisateur Cr@ns"),
label=_("Nom d'utilisateur Cr@ns"),
max_length=254,
required=True
)
......@@ -94,7 +82,7 @@ class UsernameForm(forms.Form):
Renvoie l'objet LDAP à partir du login
"""
try:
login = escape_ldap(self.cleaned_data['username'])
login = crans_utils.escape(self.cleaned_data['username'])
conn = shortcuts.lc_ldap_readonly()
# On cherches les objets LDAP tels que :
# * le login est dans le champ `uid`
......@@ -102,11 +90,10 @@ class UsernameForm(forms.Form):
# * et c'est un adhérent
# * et il n'a pas de droits
res = conn.search(
u"(&(uid=%s)(!(shadowExpire=0))(aid=*)(!(droits=*)))" % login
"(&(uid=%s)(!(shadowExpire=0))(aid=*)(!(droits=*)))" % login
)
return res[0]
except FILTER_ERROR:
return []
except IndexError:
return []
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment