1 # -*- encoding: utf-8 -*-
4 from django
.conf
import settings
5 from django
.contrib
.auth
.backends
import ModelBackend
6 from django
.contrib
.auth
.models
import User
as DjangoUser
, check_password
8 from models
import AufUser
as RemoteUser
10 class CascadeBackend(ModelBackend
):
11 def authenticate(self
, username
=None, password
=None):
15 if username
.endswith ("@auf.org"):
16 username
= username
.replace ("@auf.org", "")
18 email
= "%s@auf.org" % username
19 md5pass
= hashlib
.md5(password
).hexdigest ()
21 # Cherche les comptes roa+locaux
22 remoteUser
= localUser
= None
24 if settings
.AUTH_PASSWORD_REQUIRED
:
25 remoteUser
= RemoteUser
.objects
.get (email
=email
, password
=md5pass
)
27 remoteUser
= RemoteUser
.objects
.get (email
=email
)
31 localUser
= DjangoUser
.objects
.get (username
=username
)
34 # Si on a pas besoin du mdp, on doit copier qd meme,
35 # il ne faut jamais retourner un "RemoteUser" ici
36 if not settings
.AUTH_PASSWORD_REQUIRED
:
37 if remoteUser
and not localUser
:
38 localUser
= DjangoUser (username
= username
,
40 first_name
= remoteUser
.first_name
,
41 last_name
= remoteUser
.last_name
,
45 localUser
.set_password (password
)
48 # Gestion des comptes roa vs. local
50 # Local existe pas, on doit de tte facon le creer
52 localUser
= DjangoUser (username
= username
,
57 # Cas du compte local seul, on verifie le mot de passe
59 if localUser
.check_password (password
):
61 # Compte roa, on valide le mot de passe distant et on
62 # met a jour la copie locale
64 localUser
.first_name
= remoteUser
.first_name
65 localUser
.last_name
= remoteUser
.last_name
67 localUser
.set_password (password
)