1.0 master
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Tue, 13 Nov 2012 21:48:13 +0000 (16:48 -0500)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Tue, 13 Nov 2012 21:48:13 +0000 (16:48 -0500)
CHANGES
auf/django/auth/backends.py
auf/django/employe/management/commands/employes.py
setup.py

diff --git a/CHANGES b/CHANGES
index 908212f..9cba41e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,16 @@
 auf.django.auth
 ===============
 
+1.0
+---
+
+* Retrait de la dépedance à datamaster_modeles au profit de auf.django.references
+
+* CREATE_USER_WITH_STAFF (défaut : False), pour créer les utilisateurs avec le
+  flag 'is_staff'
+
+* Par défaut, AUTH_PASSWORD_REQUIRED est à True, même s'il n'est pas spécifié
+
 0.5.6
 -----
 
index c2c75d8..acbea4f 100644 (file)
@@ -1,79 +1,51 @@
 # -*- encoding: utf-8 -*-
 
-import hashlib, sys
+import hashlib
 
 from django.conf import settings
 from django.contrib.auth.backends import ModelBackend
-from django.contrib.auth.models import User as DjangoUser, check_password
+from django.contrib.auth.models import User
 
-from datamaster_modeles.models import Authentification as RemoteUser
+from auf.django.references.models import Authentification as RemoteUser
 
-class CascadeBackend(ModelBackend):
-    def authenticate(self, username=None, password=None):
-        user = None
 
-        # Prep des données
-        if username.endswith ("@auf.org"):
-            username = username.replace ("@auf.org", "")
+class RefAuthBackend(ModelBackend):
+    """
+    Authentification selon la table ref_authentification uniquement.
+    (Il n'y a plus de fallback sur les users locaux comme dans les versions
+    précédentes)
+    """
+
+    def authenticate(self, username=None, password=None):
+        if username.endswith("@auf.org"):
+            username = username.replace("@auf.org", "")
 
         email = "%s@auf.org" % username
         md5pass = hashlib.md5(password.encode('utf-8')).hexdigest()
-
-        # Cherche les comptes roa+locaux
-        remoteUser = localUser = None
+        
         try:
-            if settings.AUTH_PASSWORD_REQUIRED:
-                remoteUser = RemoteUser.objects.get (courriel=email, motdepasse=md5pass)
+            if getattr(settings, 'AUTH_PASSWORD_REQUIRED', True):
+                remoteUser = RemoteUser.objects.get(courriel=email,
+                        motdepasse=md5pass)
             else:
-                remoteUser = RemoteUser.objects.get (courriel=email)
+                remoteUser = RemoteUser.objects.get(courriel=email)
         except:
-            pass
-        try:
-            localUser = DjangoUser.objects.get (username=username)
-        except: pass
-        
-        # remoteUser : prenom et nom à partir de courriel
-        if remoteUser:
-            prenom_nom = email.replace('@auf.org','')
-            prenom, sep, nom = prenom_nom.partition('.')
-            remoteUser.prenom = prenom.title()
-            remoteUser.nom = nom.title()
-        
-        # Si on a pas besoin du mdp, on doit copier qd meme,
-        # il ne faut jamais retourner un "RemoteUser" ici
-        if not settings.AUTH_PASSWORD_REQUIRED:
-            if remoteUser and not localUser:
-                localUser = DjangoUser (username = username,
-                        email = email, 
-                        first_name = remoteUser.prenom,
-                        last_name = remoteUser.nom,
-                        is_staff = True,
-                        is_active = True,
-                        is_superuser = False)
-                localUser.set_password (password)
-                localUser.save ()
-            user = localUser
-        # Gestion des comptes roa vs. local
-        else:
-            # Local existe pas, on doit de tte facon le creer
-            if not localUser:
-                localUser = DjangoUser (username = username,
-                        email = email, 
-                        is_staff = True,
-                        is_active = True,
-                        is_superuser = False)
-            # Cas du compte local seul, on verifie le mot de passe
-            elif not remoteUser:
-                if localUser.check_password (password):
-                    user = localUser
-            # Compte roa, on valide le mot de passe distant et on
-            # met a jour la copie locale
-            if remoteUser:
-                localUser.first_name = remoteUser.prenom
-                localUser.last_name = remoteUser.nom
-                # pass distant en md5
-                localUser.set_password (password)
-                localUser.save ()
-                user = localUser
+            return None
+
+        prenom_nom = email.replace('@auf.org', '')
+        prenom, sep, nom = prenom_nom.partition('.')
+        remoteUser.prenom = prenom.title()
+        remoteUser.nom = nom.title()
+
+        user, created = User.objects.get_or_create(email=email)
+        if created:
+            user.username = username
+            user.email = email
+            user.first_name = remoteUser.prenom
+            user.last_name = remoteUser.nom
+            user.is_staff = getattr(settings, 'CREATE_USER_WITH_STAFF', False)
+            user.is_active = True
+            user.is_superuser = False
+            user.save()
 
         return user
index 59f9704..85cf60f 100755 (executable)
@@ -1,8 +1,10 @@
 # -*- encoding: utf-8 -*-
 
-from django.core.management.base import BaseCommand, CommandError
+from django.conf import settings
+
+from django.core.management.base import BaseCommand
 from django.contrib.auth.models import User 
-from datamaster_modeles.models import Authentification as RemoteUser
+from auf.django.references.models import Authentification as RemoteUser
 
 class Command(BaseCommand):
     help = u"""
@@ -35,7 +37,7 @@ class Command(BaseCommand):
             user.first_name = prenom.title()
             user.last_name = nom.title()
             user.email = employe.courriel
-            user.is_staff = True
+            user.is_staff = getattr(settings, 'CREATE_USER_WITH_STAFF', False)
             user.is_active = True
             user.is_superuser = False
             user.save()
index 6072928..29ad1f7 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -1,8 +1,7 @@
 from setuptools import setup, find_packages
-import sys, os
 
 name = 'auf.django.auth'
-version = '0.5.6'
+version = '1.0'
 
 setup(name=name,
       version=version,
@@ -20,11 +19,9 @@ setup(name=name,
       include_package_data=True,
       zip_safe=False,
       dependency_links = [
-        'http://pypi.auf.org/datamaster_modeles',
       ],
       install_requires=[
           # -*- Extra requirements: -*-
-          'datamaster_modeles',
       ],
       entry_points="""
       # -*- Entry points: -*-