Describe the bug
Stacktrace upon login (see below).
This might have something to do with changing the Django version (up or down?) underneath and existing TOM. (But we're not sure yet).
To Reproduce
Not sure.
Steps to reproduce the behavior:
-Sometime the bug shows up and sometimes it doesn't.
- upon trying to login after TOMToolkit update?
Expected behavior
Login as expected
Screenshots
stacktrack:
`Traceback (most recent call last):
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/core/handlers/base.py", line 199, in _get_response
response = self.process_exception_by_middleware(e, request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/core/handlers/base.py", line 362, in process_exception_by_middleware
response = middleware_method(request, exception)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/git/tom_base/tom_common/middleware.py", line 30, in process_exception
raise exception
^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/views/generic/base.py", line 105, in view
return self.dispatch(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/utils/decorators.py", line 48, in _wrapper
return bound_method(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/utils/decorators.py", line 48, in _wrapper
return bound_method(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/views/decorators/debug.py", line 143, in sensitive_post_parameters_wrapper
return view(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/utils/decorators.py", line 48, in _wrapper
return bound_method(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/utils/decorators.py", line 192, in _view_wrapper
result = _process_exception(request, e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/utils/decorators.py", line 190, in _view_wrapper
response = view_func(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/utils/decorators.py", line 48, in _wrapper
return bound_method(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/views/decorators/cache.py", line 80, in _view_wrapper
response = view_func(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/contrib/auth/views.py", line 89, in dispatch
return super().dispatch(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/views/generic/base.py", line 144, in dispatch
return handler(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/views/generic/edit.py", line 150, in post
if form.is_valid():
^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/forms/forms.py", line 206, in is_valid
return self.is_bound and not self.errors
^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/forms/forms.py", line 201, in errors
self.full_clean()
^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/forms/forms.py", line 338, in full_clean
self._clean_form()
^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/forms/forms.py", line 354, in _clean_form
cleaned_data = self.clean()
^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/views/decorators/debug.py", line 75, in sensitive_variables_wrapper
return func(*func_args, **func_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/contrib/auth/forms.py", line 366, in clean
self.user_cache = authenticate(
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/views/decorators/debug.py", line 75, in sensitive_variables_wrapper
return func(*func_args, **func_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/contrib/auth/init.py", line 114, in authenticate
user = backend.authenticate(request, **credentials)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/contrib/auth/backends.py", line 71, in authenticate
if user.check_password(password) and self.user_can_authenticate(user):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/contrib/auth/base_user.py", line 112, in check_password
return check_password(raw_password, self.password, setter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/contrib/auth/hashers.py", line 82, in check_password
setter(password)
^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/contrib/auth/base_user.py", line 110, in setter
self.save(update_fields=["password"])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/contrib/auth/base_user.py", line 65, in save
super().save(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/db/models/base.py", line 902, in save
self.save_base(
^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/db/models/base.py", line 988, in save_base
pre_save.send(
^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/dispatch/dispatcher.py", line 189, in send
response = receiver(signal=self, sender=sender, **named)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/git/tom_base/tom_common/signals.py", line 165, in user_updated_on_user_pre_save
session_utils.reencrypt_data(user) # need new RAW password to re-create cipher and re-encrypt
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/git/tom_base/tom_common/session_utils.py", line 264, in reencrypt_data
new_encryption_key: bytes = create_cipher_encryption_key(user, new_raw_password)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/git/tom_base/tom_common/session_utils.py", line 63, in create_cipher_encryption_key
encryption_key: bytes = base64.urlsafe_b64encode(kdf.derive(password.encode()))
^^^^^^^^^^^^^^^
Exception Type: AttributeError at /accounts/login/
Exception Value: 'NoneType' object has no attribute 'encode'`
Additional context
Add any other context about the problem here.
Describe the bug
Stacktrace upon login (see below).
This might have something to do with changing the Django version (up or down?) underneath and existing TOM. (But we're not sure yet).
To Reproduce
Not sure.
Steps to reproduce the behavior:
-Sometime the bug shows up and sometimes it doesn't.
Expected behavior
Login as expected
Screenshots
stacktrack:
`Traceback (most recent call last):
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/core/handlers/base.py", line 199, in _get_response
response = self.process_exception_by_middleware(e, request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/core/handlers/base.py", line 362, in process_exception_by_middleware
response = middleware_method(request, exception)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/git/tom_base/tom_common/middleware.py", line 30, in process_exception
raise exception
^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/views/generic/base.py", line 105, in view
return self.dispatch(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/utils/decorators.py", line 48, in _wrapper
return bound_method(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/utils/decorators.py", line 48, in _wrapper
return bound_method(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/views/decorators/debug.py", line 143, in sensitive_post_parameters_wrapper
return view(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/utils/decorators.py", line 48, in _wrapper
return bound_method(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/utils/decorators.py", line 192, in _view_wrapper
result = _process_exception(request, e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/utils/decorators.py", line 190, in _view_wrapper
response = view_func(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/utils/decorators.py", line 48, in _wrapper
return bound_method(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/views/decorators/cache.py", line 80, in _view_wrapper
response = view_func(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/contrib/auth/views.py", line 89, in dispatch
return super().dispatch(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/views/generic/base.py", line 144, in dispatch
return handler(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/views/generic/edit.py", line 150, in post
if form.is_valid():
^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/forms/forms.py", line 206, in is_valid
return self.is_bound and not self.errors
^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/forms/forms.py", line 201, in errors
self.full_clean()
^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/forms/forms.py", line 338, in full_clean
self._clean_form()
^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/forms/forms.py", line 354, in _clean_form
cleaned_data = self.clean()
^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/views/decorators/debug.py", line 75, in sensitive_variables_wrapper
return func(*func_args, **func_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/contrib/auth/forms.py", line 366, in clean
self.user_cache = authenticate(
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/views/decorators/debug.py", line 75, in sensitive_variables_wrapper
return func(*func_args, **func_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/contrib/auth/init.py", line 114, in authenticate
user = backend.authenticate(request, **credentials)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/contrib/auth/backends.py", line 71, in authenticate
if user.check_password(password) and self.user_can_authenticate(user):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/contrib/auth/base_user.py", line 112, in check_password
return check_password(raw_password, self.password, setter)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/contrib/auth/hashers.py", line 82, in check_password
setter(password)
^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/contrib/auth/base_user.py", line 110, in setter
self.save(update_fields=["password"])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/contrib/auth/base_user.py", line 65, in save
super().save(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/db/models/base.py", line 902, in save
self.save_base(
^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/db/models/base.py", line 988, in save_base
pre_save.send(
^
File "/home/tlister/venv/tom_venv/lib/python3.12/site-packages/django/dispatch/dispatcher.py", line 189, in send
response = receiver(signal=self, sender=sender, **named)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/git/tom_base/tom_common/signals.py", line 165, in user_updated_on_user_pre_save
session_utils.reencrypt_data(user) # need new RAW password to re-create cipher and re-encrypt
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/git/tom_base/tom_common/session_utils.py", line 264, in reencrypt_data
new_encryption_key: bytes = create_cipher_encryption_key(user, new_raw_password)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/git/tom_base/tom_common/session_utils.py", line 63, in create_cipher_encryption_key
encryption_key: bytes = base64.urlsafe_b64encode(kdf.derive(password.encode()))
^^^^^^^^^^^^^^^
Exception Type: AttributeError at /accounts/login/
Exception Value: 'NoneType' object has no attribute 'encode'`
Additional context
Add any other context about the problem here.