forked from DGNum/gestioCOF
Si une (des) permission(s) sont nécessaires pour enregistrer/annuler des opérations, une demande d'authentification apparaît où l'utilisateur doit mettre le mot de passe d'un compte ayant la (les) permission(s) requise(s). Ce mot de passe est envoyé dans la requête AJAX via le header `KFetPassword`. Le middleware `KFetAuthenticationPassword` est appelée à chaque requête. Il appelle lui même le backend `KFetBackend` qui est chargé de retrouver le user dont le compte K-Fêt correspond au mot de passe défini dans le header `KFETPASSWORD`. Si le header n'est pas présent ou qu'aucun utilisateur ne correspond à ce mot de passe, le middleware ne fait... rien ! Dans le cas où un user est trouvé, il est "chargé" dans `request.user` permettant ainsi de connecter l'utilisateur pour ce cycle requête/réponse sans déconnecter l'utilisateur connecté de manière normale.
19 lines
496 B
Python
19 lines
496 B
Python
import hashlib
|
|
|
|
from kfet.models import Account
|
|
|
|
class KFetBackend(object):
|
|
def authenticate(self, request):
|
|
password = request.META.get('HTTP_KFETPASSWORD')
|
|
if not password:
|
|
return None
|
|
|
|
try:
|
|
password_sha1 = hashlib.sha1(password.encode()).hexdigest()
|
|
account = Account.objects.get(password=password_sha1)
|
|
user = account.cofprofile.user
|
|
except Account.DoesNotExist:
|
|
return None
|
|
|
|
return user
|