Les nouveaux comptes doivent maintenant être activés par un lien courriel.
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / authentification.py
CommitLineData
9af73c99 1# -*- encoding: utf-8 -*-
2d0d06e4
EMS
2import re
3from datamaster_modeles.models import Authentification as AUFUser, Employe
4from django.conf import settings
9af73c99 5from django.contrib.auth.backends import ModelBackend
2d0d06e4
EMS
6from django.contrib.auth.models import User
7from hashlib import md5
9af73c99 8
2d0d06e4
EMS
9def get_django_user_for_email(email):
10 """Retourne un utilisateur Django avec le courriel donné.
11
12 S'il y a déjà un utilisateur avec ce courriel, on s'assure qu'il est activé.
13
14 Sinon, on crée un nouvel utilisateur."""
15 try:
16 user = User.objects.get(email=email)
17 if not user.is_active:
18 user.is_active = True
19 user.save()
20 except User.DoesNotExist:
21 username = email.split('@')[0]
22 username = re.sub('\W', '_', username)[:30]
23 i = 1
24 while User.objects.filter(username=username).count() > 0:
25 suffix = '_' + str(i)
26 username = username[:30-len(suffix)] + suffix
27 i += 1
28 # XXX: possible race condition here...
29 user = User.objects.create_user(username, email)
30 user.save()
31 return user
32
33class AUFBackend(ModelBackend):
34 """Authentifie un employé de l'AUF."""
35
36 def authenticate(self, username=None, password=None):
37 try:
38 auf_user = AUFUser.objects.get(courriel=username, actif=True)
39 except AUFUser.DoesNotExist:
40 return None
41 if not settings.AUTH_PASSWORD_REQUIRED or md5(password).hexdigest() == auf_user.password:
42 return get_django_user_for_email(username)
43
44class EmailBackend(ModelBackend):
45 """Authentifie un utilisateur par son courriel."""
9af73c99 46
9af73c99 47 def authenticate(self, username=None, password=None):
9af73c99 48 try:
2d0d06e4
EMS
49 user = User.objects.get(email=username, is_active=True)
50 except User.DoesNotExist:
518d0b44 51 return None
2d0d06e4
EMS
52 if not settings.AUTH_PASSWORD_REQUIRED or user.check_password(password):
53 return user