text: """
  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()
  