From 07567a1319cc5e37198d0614e13ad9ec85486a5b Mon Sep 17 00:00:00 2001 From: Sebastian Manger <s.manger@gmx.ch> Date: Tue, 9 May 2017 18:46:06 +0200 Subject: [PATCH] Prepare custom redirect for inactive accounts --- config/urls.py | 2 ++ wocat/users/views.py | 28 ++++++++++++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/config/urls.py b/config/urls.py index 468e8876..16e1e434 100644 --- a/config/urls.py +++ b/config/urls.py @@ -14,6 +14,7 @@ from wagtail.wagtaildocs import urls as wagtaildocs_urls from wagtail.wagtailsearch import urls as wagtailsearch_urls from wocat.core.views import SwitchLanguageView +from wocat.users.views import CASLoginView BACKEND_NAME = 'WOCAT backend' admin.site.site_header = BACKEND_NAME @@ -29,6 +30,7 @@ urlpatterns = [ # User management url(r'^users/', include('wocat.users.urls', namespace='users')), url(r'^accounts/', include('allauth.urls')), + url(r'^cas/login/?$', CASLoginView.as_view(), name='cas_login'), url(r'^cas/', include('mama_cas.urls')), url(r'^library/media/', include('wocat.medialibrary.urls', namespace='media')), url(r'^glossary/', include('wocat.glossary.urls', namespace='glossary')), diff --git a/wocat/users/views.py b/wocat/users/views.py index 78976326..6e271e66 100644 --- a/wocat/users/views.py +++ b/wocat/users/views.py @@ -1,13 +1,17 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, unicode_literals +import contextlib + +from django.http import HttpResponseRedirect from django.urls import reverse from django.template.loader import render_to_string from django.views.generic import DetailView, ListView, RedirectView, UpdateView - from django.contrib.auth.mixins import LoginRequiredMixin from django.utils.translation import ugettext_lazy as _ +from mama_cas.views import LoginView + from wocat.users.forms import UserForm from .models import User @@ -63,8 +67,7 @@ class UserRedirectView(LoginRequiredMixin, RedirectView): permanent = False def get_redirect_url(self): - return reverse('users:detail', - kwargs={'pk': self.request.user.id}) + return reverse('users:detail', kwargs={'pk': self.request.user.id}) class UserUpdateView(LoginRequiredMixin, UpdateView): @@ -72,8 +75,7 @@ class UserUpdateView(LoginRequiredMixin, UpdateView): form_class = UserForm def get_success_url(self): - return reverse('users:detail', - kwargs={'pk': self.request.user.id}) + return reverse('users:detail', kwargs={'pk': self.request.user.id}) def get_object(self): return User.objects.get(email=self.request.user.email) @@ -81,6 +83,16 @@ class UserUpdateView(LoginRequiredMixin, UpdateView): class UserListView(LoginRequiredMixin, ListView): model = User - # These next two lines tell the view to index lookups by email - #slug_field = 'email' - #slug_url_kwarg = 'email' + + +class CASLoginView(LoginView): + + def form_invalid(self, form): + """ + For inactive users: redirect to 're-activate' view. + """ + with contextlib.suppress(User.DoesNotExist): + user = User.objects.get(email=form.cleaned_data['username']) + if not user.is_active: + return HttpResponseRedirect(reverse('account_inactive')) + return super().form_invalid(form=form) -- GitLab