1 # -*- encoding: utf-8 -*-
5 from django
.contrib
.auth
.backends
import ModelBackend
6 from django
.contrib
.auth
.models
import User
as DjangoUser
, check_password
8 from chercheurs
.models
import Utilisateur
as RemoteUser
10 class CascadeBackend(ModelBackend
):
11 def authenticate(self
, username
=None, password
=None):
15 md5pass
= hashlib
.md5(password
).hexdigest ()
17 # Cherche les comptes roa+locaux
18 remoteUser
= localUser
= None
20 if settings
.AUTH_PASSWORD_REQUIRED
:
21 remoteUser
= RemoteUser
.objects
.get (courriel
=email
, password
=md5pass
)
23 remoteUser
= RemoteUser
.objects
.get (courriel
=email
)
27 localUser
= DjangoUser
.objects
.get (username
=username
)
30 # Si on a pas besoin du mdp, on doit copier qd meme,
31 # il ne faut jamais retourner un "RemoteUser" ici
32 if not settings
.AUTH_PASSWORD_REQUIRED
:
33 if remoteUser
and not localUser
:
34 localUser
= DjangoUser (username
= username
,
36 first_name
= remoteUser
.prenom
,
37 last_name
= remoteUser
.nom
,
38 is_staff
= settings
.USERS_AS_STAFF
,
41 localUser
.set_password (password
)
44 # Gestion des comptes roa vs. local
46 # Local existe pas, on doit de tte facon le creer
48 localUser
= DjangoUser (username
= username
,
50 is_staff
= settings
.USERS_AS_STAFF
,
53 # Cas du compte local seul, on verifie le mot de passe
55 if localUser
.check_password (password
):
57 # Compte roa, on valide le mot de passe distant et on
58 # met a jour la copie locale
60 localUser
.first_name
= remoteUser
.prenom
61 localUser
.last_name
= remoteUser
.nom
63 localUser
.set_password (password
)