Commit d8f127c8 authored by Daniel STAN's avatar Daniel STAN

[wiki] lien à la base ldap

On utilise le nouveau binding ldap (lc_ldap) pour lier un compte
Cr@ns à un compte wiki existant.
Ce code permet de commencer à réfléchir à un gest_crans en ligne :
on aura probablement besoin de primitives pour récupérer l'user
en cours.
Le système de lock n'est pas encore géré (mais bon, pour un seul argument,
ce n'est pas très utile).
parent d8ef08d8
......@@ -3,11 +3,16 @@
from django.forms import Form, PasswordInput, CharField, ValidationError
import urllib2
from django.utils.translation import ugettext as _
class LinkAccount(Form):
""" Formulaire pour linker un compte Wiki """
wiki_name = CharField(max_length=255)
password = CharField(max_length=255, widget=PasswordInput)
wiki_name = CharField(max_length=255,
label=_(u"Nom d'utilisateur Wiki"),
)
password = CharField(max_length=255, widget=PasswordInput,
label=_(u"Mot de passe associé"),
)
check_url = 'https://wiki.crans.org/?action=checkpassword'
......@@ -29,7 +34,7 @@ class LinkAccount(Form):
if answer == 'ok':
return data
elif answer == 'wrong':
raise ValidationError(u'Mauvais couple login/mdp')
raise ValidationError(_(u'Mauvais couple login/mdp'))
else:
raise ValidationError(u'Erreur côté serveur : résultat inattendu (contacter les nounou).')
raise ValidationError(_(u'Erreur côté serveur : résultat inattendu (contacter les nounou).'))
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Ce fichier donne les primitives de modification du compte WiKi
associé à un utilisateur, via Binding. """
from django.contrib.auth.models import User
from django.utils.importlib import import_module
conn_pool = import_module('conn_pool', 'intranet')
class WikiName(object):
@classmethod
def _get_ldap_from_user(self, user, mode='ro'):
""" Get fresh ldap user object """
# TODO faire un truc générique, dans conn_pool, car ça sera probablement
# utilisé à plusieurs endroits
[luser] = conn_pool.CONNS[user.username].search('mail=%s' % user.username, mode=mode)
return luser
@classmethod
def get_value_from_user(self, user):
luser = self._get_ldap_from_user(user)
try:
return luser['compteWiki'][0].value
except KeyError:
return None
@classmethod
def set_value_from_user(self, user, value):
luser = self._get_ldap_from_user(user, mode='rw')
if value:
luser['compteWiki'] = unicode(value)
else:
luser['compteWiki'] = []
luser.save()
@classmethod
def set_canonical_from_user(self, user):
self.set_value_from_user(user.first_name.capitalize() + user.last_name.capitalize())
......@@ -2,8 +2,10 @@
# -*- coding: utf-8 -*-
"""Ce fichier donne les primitives de modification du compte WiKi
associé à un utilisateur. À terme, il faudra utiliser la base ldap via
le binding. """
associé à un utilisateur. Ce fichier fait appel à une base de donnée sql
et n'est utilisé qu'en environnement de test (cf views.py) local.
En pratique, on utilise plutôt la version ldap de ce fichier, qui
fait appel au binding. """
from django.db import models
from django.contrib.auth.models import User
......
......@@ -9,7 +9,11 @@ from django.core.urlresolvers import reverse
from django.template import RequestContext
from forms import LinkAccount
from models import WikiName
import settings
if settings.LOCATION != 'perso':
from models_ldap import WikiName
else:
from models_test import WikiName
@login_required
@sensitive_post_parameters('username', 'password')
......
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