Added the digest_login_required decorator.

This commit is contained in:
依瑪貓 2020-07-06 22:26:29 +08:00
parent 68cf985671
commit 405ae2307e
2 changed files with 25 additions and 1 deletions

View File

@ -23,6 +23,7 @@ from django.http import HttpResponseRedirect, HttpResponse
from django.urls import reverse from django.urls import reverse
from django.utils import dateformat, timezone from django.utils import dateformat, timezone
from django.utils.decorators import method_decorator
from django.views import generic from django.views import generic
from django.views.decorators.http import require_GET from django.views.decorators.http import require_GET
@ -30,10 +31,12 @@ from accounting.models import Record
from accounting.utils import PeriodParser, Pagination, \ from accounting.utils import PeriodParser, Pagination, \
PageNoOutOfRangeError PageNoOutOfRangeError
from mia import settings from mia import settings
from mia_core.digest_auth import digest_login_required
from mia_core.utils import UrlBuilder from mia_core.utils import UrlBuilder
@require_GET @require_GET
@digest_login_required
def home(request): def home(request):
"""The accounting home page. """The accounting home page.
@ -45,6 +48,7 @@ def home(request):
@require_GET @require_GET
@digest_login_required
def cash_home(request): def cash_home(request):
"""The accounting cash report home page. """The accounting cash report home page.
@ -58,6 +62,7 @@ def cash_home(request):
reverse("accounting:cash", args=(subject_code, period_spec))) reverse("accounting:cash", args=(subject_code, period_spec)))
@method_decorator(digest_login_required, name='dispatch')
class BaseReportView(generic.ListView): class BaseReportView(generic.ListView):
"""A base account report. """A base account report.
@ -115,7 +120,6 @@ class BaseReportView(generic.ListView):
return r return r
class CashReportView(BaseReportView): class CashReportView(BaseReportView):
"""The accounting cash report.""" """The accounting cash report."""
http_method_names = ["get"] http_method_names = ["get"]

View File

@ -18,6 +18,10 @@
"""The utilities for the HTTP digest authentication. """The utilities for the HTTP digest authentication.
""" """
from functools import wraps
from django.http import HttpResponse
from mia_core.models import User from mia_core.models import User
@ -52,3 +56,19 @@ class AccountBackend:
print("mia_core.digest_auth.AccountBackend.get_user(): " + str(User.objects.filter( print("mia_core.digest_auth.AccountBackend.get_user(): " + str(User.objects.filter(
login_id=username).first())) login_id=username).first()))
return User.objects.filter(login_id=username).first() return User.objects.filter(login_id=username).first()
def digest_login_required(function=None):
"""The decorator to check if the user has logged in, and send
HTTP 401 if the user has not logged in.
"""
def decorator(view_func):
@wraps(view_func)
def _wrapped_view(request, *args, **kwargs):
if request.user.is_anonymous:
return HttpResponse(status=401)
return view_func(request, *args, **kwargs)
return _wrapped_view
if function:
return decorator(function)
return decorator