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