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 @@ ...@@ -18,6 +18,9 @@
""" """
Formulaire de l'application password_reset Formulaire de l'application password_reset
""" """
from __future__ import unicode_literals
#: Import des formulaires #: Import des formulaires
from django import forms from django import forms
...@@ -26,27 +29,12 @@ from django.utils.translation import ugettext_lazy as _ ...@@ -26,27 +29,12 @@ from django.utils.translation import ugettext_lazy as _
#: Fonctions de communication avec la base LDAP #: Fonctions de communication avec la base LDAP
from ldap import FILTER_ERROR 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): class EmailForm(forms.Form):
""" """
Formulaire de demande d'une adresse e-mail. Formulaire de demande d'une adresse e-mail.
""" """
email = forms.EmailField( email = forms.EmailField(
label=_(u'Adresse e-mail'), label=_(u'Adresse e-mail'),
...@@ -59,7 +47,7 @@ class EmailForm(forms.Form): ...@@ -59,7 +47,7 @@ class EmailForm(forms.Form):
Renvoie l'objet LDAP à partir de l'e-mail Renvoie l'objet LDAP à partir de l'e-mail
""" """
try: try:
email = escape_ldap(self.cleaned_data['email']) email = crans_utils.escape(self.cleaned_data['email'])
conn = shortcuts.lc_ldap_readonly() conn = shortcuts.lc_ldap_readonly()
# On cherches les objets LDAP tels que : # On cherches les objets LDAP tels que :
# * le mail est dans le champ `mail` ou `mailExt` # * le mail est dans le champ `mail` ou `mailExt`
...@@ -68,7 +56,7 @@ class EmailForm(forms.Form): ...@@ -68,7 +56,7 @@ class EmailForm(forms.Form):
# * et il a un compte crans # * et il a un compte crans
# * et il n'a pas de droits # * et il n'a pas de droits
res = conn.search( res = conn.search(
u"(&(|(mail=%s)(mailExt=%s))\ "(&(|(mail=%s)(mailExt=%s))\
(!(shadowExpire=0))(aid=*)(uid=*)(!(droits=*)))" (!(shadowExpire=0))(aid=*)(uid=*)(!(droits=*)))"
% (email, email) % (email, email)
) )
...@@ -84,7 +72,7 @@ class UsernameForm(forms.Form): ...@@ -84,7 +72,7 @@ class UsernameForm(forms.Form):
Formulaire de demande d'un login Cr@ns. Formulaire de demande d'un login Cr@ns.
""" """
username = forms.CharField( username = forms.CharField(
label=_(u"Nom d'utilisateur Cr@ns"), label=_("Nom d'utilisateur Cr@ns"),
max_length=254, max_length=254,
required=True required=True
) )
...@@ -94,7 +82,7 @@ class UsernameForm(forms.Form): ...@@ -94,7 +82,7 @@ class UsernameForm(forms.Form):
Renvoie l'objet LDAP à partir du login Renvoie l'objet LDAP à partir du login
""" """
try: try:
login = escape_ldap(self.cleaned_data['username']) login = crans_utils.escape(self.cleaned_data['username'])
conn = shortcuts.lc_ldap_readonly() conn = shortcuts.lc_ldap_readonly()
# On cherches les objets LDAP tels que : # On cherches les objets LDAP tels que :
# * le login est dans le champ `uid` # * le login est dans le champ `uid`
...@@ -102,11 +90,10 @@ class UsernameForm(forms.Form): ...@@ -102,11 +90,10 @@ class UsernameForm(forms.Form):
# * et c'est un adhérent # * et c'est un adhérent
# * et il n'a pas de droits # * et il n'a pas de droits
res = conn.search( res = conn.search(
u"(&(uid=%s)(!(shadowExpire=0))(aid=*)(!(droits=*)))" % login "(&(uid=%s)(!(shadowExpire=0))(aid=*)(!(droits=*)))" % login
) )
return res[0] return res[0]
except FILTER_ERROR: except FILTER_ERROR:
return [] return []
except IndexError: except IndexError:
return [] 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