forms.py 2.08 KB
Newer Older
1 2
# -*- coding: utf-8 -*-

3

4 5
from django.forms import Form, PasswordInput, CharField, ValidationError
import urllib2
6
from django.utils.translation import ugettext_lazy as _
7

8
from lc_ldap.crans_utils import validate_name
9
from intranet import conn_pool
10

11

12 13
class LinkAccount(Form):
    """ Formulaire pour linker un compte Wiki """
14
    # encodage du wiki. A priori de l'utf-8
15 16 17 18
    ENC = 'utf-8'

    wiki_name = CharField(label=_(u"Nom d'utilisateur Wiki"))
    password = CharField(label=_(u"Mot de passe associé"), widget=PasswordInput)
19

20
    check_url = 'https://wiki.crans.org/API?action=checkpassword'
21 22 23 24 25 26 27 28

    def clean(self):
        """ Teste la validité du couple login/mdp """
        data = super(LinkAccount, self).clean()
        query = {
            'username': data.get('wiki_name', ''),
            'password': data.get('password', ''),
        }
29 30 31 32 33 34

        query = '&'.join(
            urllib2.quote(k.encode(self.ENC)) +
            '=' + urllib2.quote(v.encode(self.ENC))
            for (k, v) in query.iteritems()
        )
35 36 37 38 39

        page = urllib2.urlopen(self.check_url, query)
        answer = page.read().lower()
        page.close()

40
        if answer == 'wrong':
41
            raise ValidationError(_(u'Mauvais couple login/mdp'))
42
        elif answer != 'ok':
43
            raise ValidationError(_(u'Erreur côté serveur : résultat inattendu (contacter les nounou).'))
44

45 46 47

class CreateAccount(Form):
    """Formulaire pour créer un compte wiki"""
48 49 50
    wiki_name = CharField(label=_(u"Nom d'utilisateur Wiki"))
    password1 = CharField(label=_(u"Mot de passe"), widget=PasswordInput)
    password2 = CharField(label=_(u"Répétez le mot de passe"), widget=PasswordInput)
51 52 53 54

    def clean(self):
        """ Teste la validité du couple login/mdp """
        data = super(CreateAccount, self).clean()
55
        try:
56
            validate_name(data.get('wiki_name', u''))
57 58
        except ValueError:
            raise ValidationError(_(u'Nom wiki invalide'))
59 60 61
        if data.get('password1', '') != data.get('password2', ''):
            raise ValidationError(_(u'Les mots de passe ne correspondent pas !'))
        return data