diff options
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r-- | ishtar_common/views.py | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py index b6b58fe05..f5a58afad 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -31,9 +31,13 @@ from django.apps import apps from django.conf import settings from django.contrib.auth import logout from django.contrib.auth.decorators import login_required -from django.contrib.auth.views import redirect_to_login, LoginView as AuthLoginView +from django.contrib.auth.views import redirect_to_login, LoginView as AuthLoginView, \ + PasswordChangeView as AuthPasswordChangeView, \ + PasswordResetConfirmView as AuthPasswordResetConfirmView, \ + LogoutView as AuthLogoutView from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ObjectDoesNotExist +from django.core.cache import cache from django.db.models import Q from django.template import loader from django.forms.models import modelformset_factory @@ -171,6 +175,42 @@ class LoginView(AuthLoginView): form_class = forms.AuthenticationForm +class LogoutView(AuthLogoutView): + def get(self, request, *args, **kwargs): + # clear cache + keys = [] + if request.user and hasattr(request.user, "pk") and request.user.pk: + keys.append(f"{settings.PROJECT_SLUG}-password_expired-{request.user.pk}") + for key in keys: + cache.delete(key) + return super().get(request, *args, **kwargs) + + +def update_password_last_update(user): + try: + ishtar_user = models.IshtarUser.objects.get(pk=user.pk) + except models.IshtarUser.DoesNotExist: + return + ishtar_user.password_last_update = datetime.date.today() + ishtar_user.save() + key = f"{settings.PROJECT_SLUG}-password_expired-{ishtar_user.pk}" + cache.set(key, False, settings.CACHE_TIMEOUT) + + +class PasswordChangeView(AuthPasswordChangeView): + def form_valid(self, form): + returned = super().form_valid(form) + update_password_last_update(form.user) + return returned + + +class PasswordResetConfirmView(AuthPasswordResetConfirmView): + def form_valid(self, form): + returned = super().form_valid(form) + update_password_last_update(form.user) + return returned + + person_search_wizard = wizards.PersonSearch.as_view( [("general-person_search", forms.PersonFormSelection)], label=_("Person search"), |