Authentification des employés AUF
authorEric Mc Sween <eric.mcsween@gmail.com>
Mon, 13 Dec 2010 19:27:15 +0000 (14:27 -0500)
committerEric Mc Sween <eric.mcsween@gmail.com>
Mon, 13 Dec 2010 19:27:15 +0000 (14:27 -0500)
auf_savoirs_en_partage/authentification.py
auf_savoirs_en_partage/chercheurs/models.py
auf_savoirs_en_partage/chercheurs/utils.py [deleted file]
auf_savoirs_en_partage/settings.py

index ff21d84..325d2a6 100644 (file)
@@ -1,15 +1,53 @@
 # -*- encoding: utf-8 -*-
-from chercheurs.models import Personne
+import re
+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 check_password
+from django.contrib.auth.models import User
+from hashlib import md5
 
-class PersonneBackend(ModelBackend):
-    """Authentifie un chercheur qui a le courriel donné."""
+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."""
+
+    def authenticate(self, username=None, password=None):
+        try:
+            auf_user = AUFUser.objects.get(courriel=username, actif=True)
+        except AUFUser.DoesNotExist:
+            return None
+        if not settings.AUTH_PASSWORD_REQUIRED or md5(password).hexdigest() == auf_user.password:
+            return get_django_user_for_email(username)
+
+class EmailBackend(ModelBackend):
+    """Authentifie un utilisateur par son courriel."""
 
     def authenticate(self, username=None, password=None):
         try:
-            personne = Personne.objects.get(courriel=username)
-        except Personne.DoesNotExist:
+            user = User.objects.get(email=username, is_active=True)
+        except User.DoesNotExist:
             return None
-        if personne.user.check_password(password):
-            return personne.user
+        if not settings.AUTH_PASSWORD_REQUIRED or user.check_password(password):
+            return user
index 7887ecb..847b8f8 100644 (file)
@@ -1,6 +1,6 @@
 # -*- encoding: utf-8 -*-
 import hashlib
-from chercheurs.utils import get_django_user_for_email
+from authentification import get_django_user_for_email
 from datamaster_modeles.models import *
 from django.contrib.auth.models import User
 from django.db import models
diff --git a/auf_savoirs_en_partage/chercheurs/utils.py b/auf_savoirs_en_partage/chercheurs/utils.py
deleted file mode 100644 (file)
index df5eed9..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# coding: utf-8
-import re
-from django.contrib.auth.models import User
-
-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
-
index a99abf1..d04da75 100644 (file)
@@ -87,7 +87,7 @@ TEMPLATE_DIRS = (
     os.path.join(os.path.dirname(__file__), "templates"),
 )
 
-AUTHENTICATION_BACKENDS = ('authentification.PersonneBackend',)
+AUTHENTICATION_BACKENDS = ('authentification.AUFBackend', 'authentification.EmailBackend')
 LOGIN_REDIRECT_URL = '/chercheurs/perso/'
 
 CACHE_BACKEND = 'memcached://localhost:11211'