Découpler un peu les chercheurs et l'authentification Django
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / authentification.py
index 82ebd09..4e20735 100644 (file)
@@ -1,35 +1,12 @@
 # -*- encoding: utf-8 -*-
 import re
 # -*- encoding: utf-8 -*-
 import re
+from chercheurs.models import Personne
+from chercheurs.utils import get_django_user_for_email
 from datamaster_modeles.models import Authentification as AUFUser, Employe
 from django.conf import settings
 from django.contrib.auth.backends import ModelBackend
 from datamaster_modeles.models import Authentification as AUFUser, Employe
 from django.conf import settings
 from django.contrib.auth.backends import ModelBackend
-from django.contrib.auth.models import User
 from hashlib import md5
 
 from hashlib import md5
 
-def get_django_user_for_email(email):
-    """Retourne un utilisateur Django avec le courriel donné.
-
-       S'il y a déjà un utilisateur avec ce courriel, on s'assure qu'il est activé.
-
-       Sinon, on crée un nouvel utilisateur."""
-    try:
-        user = User.objects.get(email=email)
-        if not user.is_active:
-            user.is_active = True
-        user.save()
-    except User.DoesNotExist:
-        username = email.split('@')[0]
-        username = re.sub('\W', '_', username)[:30]
-        i = 1
-        while User.objects.filter(username=username).count() > 0:
-            suffix = '_' + str(i)
-            username = username[:30-len(suffix)] + suffix
-            i += 1
-        # XXX: possible race condition here...
-        user = User.objects.create_user(username, email)
-        user.save()
-    return user
-
 class AUFBackend(ModelBackend):
     """Authentifie un employé de l'AUF."""
 
 class AUFBackend(ModelBackend):
     """Authentifie un employé de l'AUF."""
 
@@ -41,13 +18,14 @@ class AUFBackend(ModelBackend):
         if not settings.AUTH_PASSWORD_REQUIRED or md5(password).hexdigest() == auf_user.motdepasse:
             return get_django_user_for_email(username)
 
         if not settings.AUTH_PASSWORD_REQUIRED or md5(password).hexdigest() == auf_user.motdepasse:
             return get_django_user_for_email(username)
 
-class EmailBackend(ModelBackend):
-    """Authentifie un utilisateur par son courriel."""
+class PersonneBackend(ModelBackend):
+    """Authentifie un chercheur de Savoirs en partage."""
 
     def authenticate(self, username=None, password=None):
         try:
 
     def authenticate(self, username=None, password=None):
         try:
-            user = User.objects.get(email=username, is_active=True)
-        except User.DoesNotExist:
+            personne = Personne.objects.get(courriel=username, actif=True)
+        except Personne.DoesNotExist:
             return None
             return None
+        user = get_django_user_for_email(username)
         if not settings.AUTH_PASSWORD_REQUIRED or user.check_password(password):
             return user
         if not settings.AUTH_PASSWORD_REQUIRED or user.check_password(password):
             return user