diff --git a/kfet/auth/decorators.py b/kfet/auth/decorators.py new file mode 100644 index 00000000..a9aef698 --- /dev/null +++ b/kfet/auth/decorators.py @@ -0,0 +1,23 @@ +from functools import wraps + +from kfet.auth.backends import AccountBackend + + +def kfet_password_auth(view_func): + def get_kfet_password(request): + return request.META.get("HTTP_KFETPASSWORD") or request.POST.get("KFETPASSWORD") + + @wraps(view_func) + def _wrapped_view(request, *args, **kwargs): + if request.method == "POST": + temp_request_user = AccountBackend().authenticate( + request, kfet_password=get_kfet_password(request) + ) + + if temp_request_user: + request.real_user = request.user + request.user = temp_request_user + + return view_func(request, *args, **kwargs) + + return _wrapped_view