forked from CGM_Public/pretix_original
Require login for all of tixlcontrol/ except login
This commit is contained in:
@@ -49,6 +49,7 @@ MIDDLEWARE_CLASSES = (
|
|||||||
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
|
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
|
||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||||
|
'tixlcontrol.middleware.LoginRequiredMiddleware',
|
||||||
)
|
)
|
||||||
|
|
||||||
ROOT_URLCONF = 'tixl.urls'
|
ROOT_URLCONF = 'tixl.urls'
|
||||||
@@ -83,7 +84,8 @@ USE_TZ = True
|
|||||||
# Authentication
|
# Authentication
|
||||||
|
|
||||||
AUTH_USER_MODEL = 'tixlbase.User'
|
AUTH_USER_MODEL = 'tixlbase.User'
|
||||||
|
LOGIN_URL = '/login'
|
||||||
|
LOGIN_URL_CONTROL = '/control/login'
|
||||||
|
|
||||||
# Static files (CSS, JavaScript, Images)
|
# Static files (CSS, JavaScript, Images)
|
||||||
# https://docs.djangoproject.com/en/dev/howto/static-files/
|
# https://docs.djangoproject.com/en/dev/howto/static-files/
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
from django.conf.urls import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
import tixlcontrol.urls
|
||||||
# Examples:
|
|
||||||
# url(r'^$', 'tixl.views.home', name='home'),
|
|
||||||
# url(r'^blog/', include('blog.urls')),
|
|
||||||
|
|
||||||
|
|
||||||
|
urlpatterns = patterns('',
|
||||||
|
url(r'^control/', include(tixlcontrol.urls, namespace='control')),
|
||||||
url(r'^admin/', include(admin.site.urls)),
|
url(r'^admin/', include(admin.site.urls)),
|
||||||
)
|
)
|
||||||
|
|||||||
39
src/tixlcontrol/middleware.py
Normal file
39
src/tixlcontrol/middleware.py
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
from django.conf import settings
|
||||||
|
from django.core.urlresolvers import resolve
|
||||||
|
from django.utils.encoding import force_str
|
||||||
|
from django.utils.six.moves.urllib.parse import urlparse
|
||||||
|
from django.shortcuts import resolve_url
|
||||||
|
from django.contrib.auth import REDIRECT_FIELD_NAME
|
||||||
|
|
||||||
|
|
||||||
|
class LoginRequiredMiddleware:
|
||||||
|
|
||||||
|
"""
|
||||||
|
This middleware enforces all requests to the control app
|
||||||
|
to require login.
|
||||||
|
"""
|
||||||
|
|
||||||
|
EXCEPTIONS = (
|
||||||
|
"login"
|
||||||
|
)
|
||||||
|
|
||||||
|
def process_request(self, request):
|
||||||
|
if not request.user.is_authenticated():
|
||||||
|
url_namespace = resolve(request.path_info).namespace
|
||||||
|
url_name = resolve(request.path_info).url_name
|
||||||
|
if url_namespace == 'control' and url_name not in self.EXCEPTIONS:
|
||||||
|
# Taken from django/contrib/auth/decorators.py
|
||||||
|
path = request.build_absolute_uri()
|
||||||
|
# urlparse chokes on lazy objects in Python 3, force to str
|
||||||
|
resolved_login_url = force_str(
|
||||||
|
resolve_url(settings.LOGIN_URL_CONTROL))
|
||||||
|
# If the login url is the same scheme and net location then just
|
||||||
|
# use the path as the "next" url.
|
||||||
|
login_scheme, login_netloc = urlparse(resolved_login_url)[:2]
|
||||||
|
current_scheme, current_netloc = urlparse(path)[:2]
|
||||||
|
if ((not login_scheme or login_scheme == current_scheme) and
|
||||||
|
(not login_netloc or login_netloc == current_netloc)):
|
||||||
|
path = request.get_full_path()
|
||||||
|
from django.contrib.auth.views import redirect_to_login
|
||||||
|
return redirect_to_login(
|
||||||
|
path, resolved_login_url, REDIRECT_FIELD_NAME)
|
||||||
5
src/tixlcontrol/urls.py
Normal file
5
src/tixlcontrol/urls.py
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
from django.conf.urls import patterns, url
|
||||||
|
|
||||||
|
urlpatterns = patterns('',
|
||||||
|
url(r'^$', 'tixlcontrol.views.main.index', name='index'),
|
||||||
|
)
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
from django.shortcuts import render
|
|
||||||
|
|
||||||
# Create your views here.
|
|
||||||
0
src/tixlcontrol/views/__init__.py
Normal file
0
src/tixlcontrol/views/__init__.py
Normal file
5
src/tixlcontrol/views/main.py
Normal file
5
src/tixlcontrol/views/main.py
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
from django.http import HttpResponse
|
||||||
|
|
||||||
|
|
||||||
|
def index(request):
|
||||||
|
return HttpResponse('Coming soon.')
|
||||||
Reference in New Issue
Block a user