feat(FastAPI): support {named} fmt in auth_required redirect

Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
Kevin Morris 2021-10-07 00:03:24 -07:00
parent e5299b5ed4
commit 75c49e4f8a
No known key found for this signature in database
GPG key ID: F7E46DED420788F3

View file

@ -1,4 +1,5 @@
import functools import functools
import re
from datetime import datetime from datetime import datetime
from http import HTTPStatus from http import HTTPStatus
@ -121,6 +122,7 @@ class BasicAuthBackend(AuthenticationBackend):
def auth_required(is_required: bool = True, def auth_required(is_required: bool = True,
login: bool = False,
redirect: str = "/", redirect: str = "/",
template: tuple = None, template: tuple = None,
status_code: HTTPStatus = HTTPStatus.UNAUTHORIZED): status_code: HTTPStatus = HTTPStatus.UNAUTHORIZED):
@ -162,8 +164,16 @@ def auth_required(is_required: bool = True,
async def wrapper(request, *args, **kwargs): async def wrapper(request, *args, **kwargs):
if request.user.is_authenticated() != is_required: if request.user.is_authenticated() != is_required:
url = "/" url = "/"
if redirect: if redirect:
url = redirect path_params_expr = re.compile(r'\{(\w+)\}')
match = re.findall(path_params_expr, redirect)
args = {k: request.path_params.get(k) for k in match}
url = redirect.format(**args)
if login:
url = "/login?" + util.urlencode({"next": url})
if template: if template:
# template=("template.html", # template=("template.html",
# ["Some Title", "someFormatted {}"], # ["Some Title", "someFormatted {}"],