diff --git a/pgweb/account/views.py b/pgweb/account/views.py index b5e4ffb7..21ba7532 100644 --- a/pgweb/account/views.py +++ b/pgweb/account/views.py @@ -2,7 +2,7 @@ from django.contrib.auth.models import User import django.contrib.auth.views as authviews from django.http import HttpResponseRedirect, Http404, HttpResponse from django.shortcuts import render_to_response, get_object_or_404 -from django.contrib.auth.decorators import login_required +from pgweb.util.decorators import login_required from django.utils.encoding import force_bytes from django.utils.http import urlsafe_base64_encode from django.contrib.auth.tokens import default_token_generator diff --git a/pgweb/core/views.py b/pgweb/core/views.py index 15bd71bb..a36e9792 100644 --- a/pgweb/core/views.py +++ b/pgweb/core/views.py @@ -2,7 +2,8 @@ from django.shortcuts import render_to_response from django.http import HttpResponse, Http404, HttpResponseRedirect from django.http import HttpResponseNotModified from django.template import TemplateDoesNotExist, loader -from django.contrib.auth.decorators import login_required, user_passes_test +from django.contrib.auth.decorators import user_passes_test +from pgweb.util.decorators import login_required from django.contrib import messages from django.views.decorators.csrf import csrf_exempt from django.db.models import Count diff --git a/pgweb/docs/views.py b/pgweb/docs/views.py index bd4dddf6..cf8930bf 100644 --- a/pgweb/docs/views.py +++ b/pgweb/docs/views.py @@ -2,7 +2,7 @@ from django.shortcuts import render_to_response, get_object_or_404 from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect from django.http import Http404 from django.template.context import RequestContext -from django.contrib.auth.decorators import login_required +from pgweb.util.decorators import login_required from django.db.models import Q from django.conf import settings diff --git a/pgweb/downloads/views.py b/pgweb/downloads/views.py index e5c21fd7..d1ac61b5 100644 --- a/pgweb/downloads/views.py +++ b/pgweb/downloads/views.py @@ -1,6 +1,6 @@ from django.shortcuts import render_to_response, get_object_or_404 from django.http import HttpResponse, Http404, HttpResponseRedirect -from django.contrib.auth.decorators import login_required +from pgweb.util.decorators import login_required from django.views.decorators.csrf import csrf_exempt from django.db import transaction from django.conf import settings diff --git a/pgweb/events/views.py b/pgweb/events/views.py index 5af2b5e4..bff7d10d 100644 --- a/pgweb/events/views.py +++ b/pgweb/events/views.py @@ -1,6 +1,6 @@ from django.shortcuts import render_to_response, get_object_or_404 from django.http import Http404 -from django.contrib.auth.decorators import login_required +from pgweb.util.decorators import login_required from datetime import date diff --git a/pgweb/misc/views.py b/pgweb/misc/views.py index 33acf65f..7915f4a7 100644 --- a/pgweb/misc/views.py +++ b/pgweb/misc/views.py @@ -1,5 +1,5 @@ from django.shortcuts import render_to_response -from django.contrib.auth.decorators import login_required +from pgweb.util.decorators import login_required from django.http import HttpResponse from django.db import connection from django.conf import settings diff --git a/pgweb/news/views.py b/pgweb/news/views.py index 6c87e97c..0e9c1889 100644 --- a/pgweb/news/views.py +++ b/pgweb/news/views.py @@ -1,6 +1,6 @@ from django.shortcuts import render_to_response, get_object_or_404 from django.http import Http404 -from django.contrib.auth.decorators import login_required +from pgweb.util.decorators import login_required from pgweb.util.contexts import NavContext from pgweb.util.helpers import simple_form diff --git a/pgweb/profserv/views.py b/pgweb/profserv/views.py index 3a8f8ddc..18ae4083 100644 --- a/pgweb/profserv/views.py +++ b/pgweb/profserv/views.py @@ -1,6 +1,6 @@ from django.shortcuts import render_to_response from django.http import Http404 -from django.contrib.auth.decorators import login_required +from pgweb.util.decorators import login_required from pgweb.util.contexts import NavContext from pgweb.util.helpers import simple_form diff --git a/pgweb/util/decorators.py b/pgweb/util/decorators.py index abfbc70c..d3062577 100644 --- a/pgweb/util/decorators.py +++ b/pgweb/util/decorators.py @@ -1,5 +1,6 @@ import datetime from functools import wraps +from django.contrib.auth.decorators import login_required as django_login_required def nocache(fn): def _nocache(request, *_args, **_kwargs): @@ -18,3 +19,16 @@ def cache(days=0, hours=0, minutes=0, seconds=0): return resp return __cache return _cache + +from django.utils.decorators import available_attrs + +# A wrapped version of login_required that throws an exception if it's +# used on a path that's not under /account/. +def login_required(f): + @wraps(f) + def wrapper(*args, **kwargs): + request = args[0] + if not request.path.startswith('/account/'): + raise Exception("Login required in bad path, aborting with exception.") + return django_login_required(f)(*args, **kwargs) + return wrapper