mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-08-26 12:46:08 +00:00
SSO: Use Login and Logout view classes instead of methods
- Closes #965 Signed-off-by: Joseph Nuthalpati <njoseph@thoughtworks.com> Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
parent
08e84001a8
commit
db479a7ae9
@ -20,10 +20,10 @@ URLs for the Single Sign On module.
|
|||||||
|
|
||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
|
|
||||||
from .views import login, refresh
|
from .views import SSOLoginView, refresh
|
||||||
from stronghold.decorators import public
|
from stronghold.decorators import public
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^accounts/sso/login/$', public(login), name='sso-login'),
|
url(r'^accounts/sso/login/$', public(SSOLoginView.as_view()), name='sso-login'),
|
||||||
url(r'^accounts/sso/refresh/$', refresh, name='sso-refresh'),
|
url(r'^accounts/sso/refresh/$', refresh, name='sso-refresh'),
|
||||||
]
|
]
|
||||||
|
|||||||
@ -26,8 +26,7 @@ from plinth import actions
|
|||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django.contrib.auth import REDIRECT_FIELD_NAME
|
from django.contrib.auth import REDIRECT_FIELD_NAME
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.contrib.auth.views import (login as auth_login, logout as
|
from django.contrib.auth.views import LoginView, LogoutView
|
||||||
auth_logout)
|
|
||||||
|
|
||||||
PRIVATE_KEY_FILE_NAME = 'privkey.pem'
|
PRIVATE_KEY_FILE_NAME = 'privkey.pem'
|
||||||
SSO_COOKIE_NAME = 'auth_pubtkt'
|
SSO_COOKIE_NAME = 'auth_pubtkt'
|
||||||
@ -48,21 +47,31 @@ def set_ticket_cookie(user, response):
|
|||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
def login(request):
|
class SSOLoginView(LoginView):
|
||||||
"""Login to Plinth and set a auth_pubtkt cookie which will be
|
"""View to login to Plinth and set a auth_pubtkt cookie which will be
|
||||||
used to provide Single Sign On for some other applications
|
used to provide Single Sign On for some other applications
|
||||||
"""
|
"""
|
||||||
response = auth_login(
|
|
||||||
request, template_name='login.html', redirect_authenticated_user=True)
|
redirect_authenticated_user = True
|
||||||
return set_ticket_cookie(
|
template_name = 'login.html'
|
||||||
request.user, response) if request.user.is_authenticated else response
|
|
||||||
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
response = super(SSOLoginView, self).dispatch(request, *args, **kwargs)
|
||||||
|
return set_ticket_cookie(
|
||||||
|
request.user,
|
||||||
|
response) if request.user.is_authenticated else response
|
||||||
|
|
||||||
|
|
||||||
def logout(request, next_page):
|
class SSOLogoutView(LogoutView):
|
||||||
"""Log out of Plinth and remove auth_pubtkt cookie"""
|
"""View to log out of Plinth and remove the auth_pubtkt cookie"""
|
||||||
response = auth_logout(request, next_page=next_page)
|
|
||||||
response.delete_cookie(SSO_COOKIE_NAME)
|
template_name = 'index.html'
|
||||||
return response
|
|
||||||
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
response = super(SSOLogoutView, self).dispatch(request, *args,
|
||||||
|
**kwargs)
|
||||||
|
response.delete_cookie(SSO_COOKIE_NAME)
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
|||||||
@ -24,10 +24,7 @@ from django.urls import reverse_lazy
|
|||||||
from stronghold.decorators import public
|
from stronghold.decorators import public
|
||||||
|
|
||||||
from plinth.utils import non_admin_view
|
from plinth.utils import non_admin_view
|
||||||
from plinth.modules.sso.views import (
|
from plinth.modules.sso.views import SSOLoginView, SSOLogoutView
|
||||||
login as sso_login,
|
|
||||||
logout as sso_logout
|
|
||||||
)
|
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
|
|
||||||
@ -42,8 +39,8 @@ urlpatterns = [
|
|||||||
non_admin_view(views.UserChangePassword.as_view()),
|
non_admin_view(views.UserChangePassword.as_view()),
|
||||||
name='change_password'),
|
name='change_password'),
|
||||||
# Add Django's login/logout urls
|
# Add Django's login/logout urls
|
||||||
url(r'^accounts/login/$', public(sso_login), name='login'),
|
url(r'^accounts/login/$', public(SSOLoginView.as_view()), name='login'),
|
||||||
url(r'^accounts/logout/$', public(sso_logout),
|
url(r'^accounts/logout/$', SSOLogoutView.as_view(),
|
||||||
{'next_page': reverse_lazy('index')}, name='logout'),
|
{'next_page': reverse_lazy('index')}, name='logout'),
|
||||||
url(r'^users/firstboot/$', public(views.FirstBootView.as_view()),
|
url(r'^users/firstboot/$', public(views.FirstBootView.as_view()),
|
||||||
name='firstboot'),
|
name='firstboot'),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user