123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- """
- Changed credentials service
- Stores new e-mail and password in cache
- """
- from hashlib import sha256
- from django.conf import settings
- from django.utils.encoding import force_bytes
- def store_new_credential(request, credential_type, credential_value):
- credential_key = "new_credential_%s" % credential_type
- token = _make_change_token(request.user, credential_type)
- request.session[credential_key] = {
- "user_pk": request.user.pk,
- "credential": credential_value,
- "token": token,
- }
- return token
- def read_new_credential(request, credential_type, link_token):
- try:
- credential_key = "new_credential_%s" % credential_type
- new_credential = request.session.pop(credential_key)
- except KeyError:
- return None
- if new_credential["user_pk"] != request.user.pk:
- return None
- current_token = _make_change_token(request.user, credential_type)
- if link_token != current_token:
- return None
- if new_credential["token"] != current_token:
- return None
- return new_credential["credential"]
- def _make_change_token(user, token_type):
- seeds = (
- user.pk,
- user.email,
- user.password,
- user.last_login.replace(microsecond=0, tzinfo=None),
- settings.SECRET_KEY,
- str(token_type),
- )
- return sha256(force_bytes("+".join([str(s) for s in seeds]))).hexdigest()
|