login/logout views

This commit is contained in:
Frédéric Péters 2020-04-12 11:16:06 +02:00
parent 72f541e84f
commit f1683e8897
2 changed files with 20 additions and 19 deletions

View File

@ -8,7 +8,7 @@ from django.views.decorators.cache import never_cache
from django.contrib.admin.views.decorators import staff_member_required
from .urls_utils import decorated_includes, manager_required
from .views import homepage, atom, unsubscribe, unsubscription_done, login, logout
from .views import homepage, atom, unsubscribe, unsubscription_done, LoginView, LogoutView
from .manage_urls import urlpatterns as manage_urls
from .api_urls import urlpatterns as api_urls
@ -27,8 +27,8 @@ urlpatterns = [
name='unsubscription_done'),
url(r'^unsubscribe/(?P<unsubscription_token>[\w:-]+)$', unsubscribe,
name='unsubscribe'),
url(r'^logout/$', logout, name='auth_logout'),
url(r'^login/$', login, name='auth_login'),
url(r'^logout/$',LogoutView.as_view(), name='auth_logout'),
url(r'^login/$', LoginView.as_view(), name='auth_login'),
url(r'^ckeditor/upload/', staff_member_required(ckeditor_views.upload),
name='ckeditor_upload'),
url(r'^ckeditor/browse/', never_cache(staff_member_required(ckeditor_views.browse)),

View File

@ -9,6 +9,7 @@ from django.views.generic import CreateView, UpdateView, DeleteView, \
ListView, TemplateView, RedirectView, DetailView, FormView
from django.contrib.syndication.views import Feed
from django.shortcuts import resolve_url
from django.utils.decorators import method_decorator
from django.utils.encoding import force_text
from django.utils.feedgenerator import Atom1Feed as DjangoAtom1Feed
from django.utils.http import quote
@ -18,6 +19,7 @@ from django.contrib.auth import views as auth_views
from django.contrib import messages
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ngettext
from django.views.decorators.cache import never_cache
from . import models
from .forms import AnnounceForm, CategoryForm, SubscriptionsImportForm, \
@ -30,24 +32,23 @@ except ImportError:
get_idps = lambda: []
def login(request, *args, **kwargs):
if any(get_idps()):
if 'next' not in request.GET:
return HttpResponseRedirect(resolve_url('mellon_login'))
return HttpResponseRedirect(resolve_url('mellon_login') + '?next=' +
quote(request.GET.get('next')))
return auth_views.login(request, *args, **kwargs)
class LoginView(auth_views.LoginView):
def get(self, request, *args, **kwargs):
if any(get_idps()):
if not 'next' in request.GET:
return HttpResponseRedirect(resolve_url('mellon_login'))
return HttpResponseRedirect(
resolve_url('mellon_login') + '?next=' + quote(request.GET.get('next'))
)
return super(LoginView, self).get(request, *args, **kwargs)
def logout(request, next_page=None):
if any(get_idps()):
return HttpResponseRedirect(resolve_url('mellon_logout'))
auth_logout(request)
if next_page is not None:
next_page = resolve_url(next_page)
else:
next_page = '/'
return HttpResponseRedirect(next_page)
class LogoutView(auth_views.LogoutView):
@method_decorator(never_cache)
def dispatch(self, request, *args, **kwargs):
if any(get_idps()):
return HttpResponseRedirect(resolve_url('mellon_logout'))
return super(LogoutView, self).dispatch(request, *args, **kwargs)
class HomepageView(RedirectView):