ebauche espace chercheur
authorAli Jetha <ali@U-AJ.(none)>
Tue, 21 Sep 2010 20:30:29 +0000 (16:30 -0400)
committerAli Jetha <ali@U-AJ.(none)>
Tue, 21 Sep 2010 20:30:29 +0000 (16:30 -0400)
auf_savoirs_en_partage/authentification.py [new file with mode: 0644]
auf_savoirs_en_partage/chercheurs/models.py
auf_savoirs_en_partage/chercheurs/views.py
auf_savoirs_en_partage/context_processors.py [new file with mode: 0644]
auf_savoirs_en_partage/settings.py
auf_savoirs_en_partage/templates/savoirs/index.html
auf_savoirs_en_partage/urls.py

diff --git a/auf_savoirs_en_partage/authentification.py b/auf_savoirs_en_partage/authentification.py
new file mode 100644 (file)
index 0000000..97ee14b
--- /dev/null
@@ -0,0 +1,67 @@
+# -*- encoding: utf-8 -*-
+import hashlib, sys
+
+import settings
+from django.contrib.auth.backends import ModelBackend
+from django.contrib.auth.models import User as DjangoUser, check_password
+
+from chercheurs.models import Utilisateur as RemoteUser
+
+class CascadeBackend(ModelBackend):
+    def authenticate(self, username=None, password=None):
+        user = None
+                
+        email = username
+        md5pass = hashlib.md5(password).hexdigest ()
+
+        # Cherche les comptes roa+locaux
+        remoteUser = localUser = None
+        try:
+            if settings.AUTH_PASSWORD_REQUIRED:
+                remoteUser = RemoteUser.objects.get (courriel=email, password=password)
+            else:
+                remoteUser = RemoteUser.objects.get (courriel=email)
+        except:
+            pass
+        try:
+            localUser = DjangoUser.objects.get (username=username)
+        except: pass
+
+        # 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 = settings.USERS_AS_STAFF,
+                        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 = settings.USERS_AS_STAFF,
+                        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 user
index be9abf8..db39753 100644 (file)
@@ -28,6 +28,9 @@ class Personne(models.Model):
     class Meta:
         ordering = ["prenom", "nom"]
 
+class Utilisateur(Personne):
+    password = models.CharField (max_length=35)
+
 FONCTION_CHOICES = (('Professeur', 'Professeur'), ('Chercheur', 'Chercheur'), ('Doctorant', 'Doctorant'), ('Autre', 'Autre'))
 class Chercheur(models.Model):
     id = models.AutoField(primary_key=True, db_column='id')
index 3adc5c3..8a18b32 100644 (file)
@@ -6,6 +6,7 @@ from forms import *
 from auf_references_client.models import Discipline, TypeImplantation
 from models import Personne
 
+from django.contrib.auth.decorators import login_required
 
 def chercheur_queryset (request):
     list = Chercheur.objects.order_by("id")
@@ -80,10 +81,12 @@ def inscription(request):
     return render_to_response ("chercheurs/inscription.html", \
             Context (variables), 
             context_instance = RequestContext(request))
-            
-def perso(request, id):
+
+
+def perso(request):
     """Mock up de l'espace perso"""
-    chercheur = Chercheur.objects.get(id=id)
+    context_instance = RequestContext(request)
+    chercheur = context_instance['user_chercheur']
     variables = { 'chercheur': chercheur,
                 }
     return render_to_response ("chercheurs/perso.html", \
diff --git a/auf_savoirs_en_partage/context_processors.py b/auf_savoirs_en_partage/context_processors.py
new file mode 100644 (file)
index 0000000..90e884e
--- /dev/null
@@ -0,0 +1,13 @@
+# -*- encoding: utf-8 -*-
+
+from chercheurs.models import Chercheur
+
+    
+def user_chercheur(request):
+    user_chercheur = Chercheur.objects.none()
+    if request.user.is_authenticated():
+        try:
+            user_chercheur = Chercheur.objects.get(personne__courriel=request.user.email)
+        except:
+            pass
+    return {'user_chercheur': user_chercheur}
index 29927f8..b4b0a94 100644 (file)
@@ -71,6 +71,16 @@ INSTALLED_APPS = (
     'sitotheque',
 )
 
+
+TEMPLATE_CONTEXT_PROCESSORS = (
+    # default : http://docs.djangoproject.com/en/dev/ref/settings/?from=olddocs#template-context-processors
+    "django.core.context_processors.auth",
+    "django.core.context_processors.debug",
+    "django.core.context_processors.i18n",
+    "django.core.context_processors.media",
+    "django.core.context_processors.request",
+    "context_processors.user_chercheur",
+)
 TEMPLATE_LOADERS = (
     'django.template.loaders.filesystem.load_template_source',
     'django.template.loaders.app_directories.load_template_source',
@@ -81,7 +91,7 @@ TEMPLATE_DIRS = (
 )
 
 AUTHENTICATION_BACKENDS = (
-    'auf_references_client.backends.CascadeBackend',
+    'authentification.CascadeBackend',
 )
 
 CACHE_BACKEND = 'memcached://127.0.0.1:11211/'
index fd72887..4449d9d 100644 (file)
@@ -26,7 +26,9 @@
         <ul class="sous-menu">
             <li><a href="{% url chercheurs.views.repertoire %}">Répertoire</a></li>
             <li><a href="{% url chercheurs.views.inscription %}">Inscription</a></li>
-            <li><a href="">Espace chercheur</a></li>
+            {% if user_chercheur %}
+            <li><a href="{% url chercheurs.views.perso %}">Espace chercheur</a></li>
+            {% endif %}
         </ul>
         <ul class="liste-de-l-accueil">
         {% for chercheur in chercheurs %}
index c0fb3e1..42eed55 100644 (file)
@@ -32,8 +32,8 @@ urlpatterns = patterns(
     (r'^chercheurs/(?P<id>\d+)/$', 'chercheurs.views.retrieve'),
     (r'^chercheurs/inscription/$', 'chercheurs.views.inscription'),
     (r'^chercheurs/repertoire/$', 'chercheurs.views.repertoire'),
-    (r'^espace/chercheur/(?P<id>\d+)/$', 'chercheurs.views.perso'),
-    
+    (r'^chercheurs/perso/$', 'chercheurs.views.perso'),
+
     (r'^sites/$', 'sitotheque.views.index'),
     (r'^sites/(?P<id>\d+)/$', 'sitotheque.views.retrieve'),
 )