diff --git a/halfapi/lib/acl_middleware.py b/halfapi/lib/acl_middleware.py index 7dfd629..5f1bc3c 100644 --- a/halfapi/lib/acl_middleware.py +++ b/halfapi/lib/acl_middleware.py @@ -1,31 +1,33 @@ #!/usr/bin/env python3 from starlette.requests import Request from starlette.exceptions import HTTPException +from starlette.middleware.base import BaseHTTPMiddleware -async def acl_middleware(request: Request, call_next): - """ Checks the "acls" key in the scope and applies the - corresponding functions in the current module's acl lib. +class AclMiddleware(BaseHTTPMiddleware): + async def dispatch(self, request: Request, call_next): + """ Checks the "acls" key in the scope and applies the + corresponding functions in the current module's acl lib. - Raises an exception if no acl function returns True - """ - print(f'Hit acl {__name__} middleware') + Raises an exception if no acl function returns True + """ + print(f'Hit acl {__name__} middleware') - for acl_fnct_name in request.scope['acls']: - print(f'Will apply {acl_fnct_name}') - try: - fct = getattr(acl, acl_fct_name) - if fct(request) is True: - print(f'{fct} : {fct(request)}\n') + for acl_fnct_name in request.scope['acls']: + print(f'Will apply {acl_fnct_name}') + try: + fct = getattr(acl, acl_fct_name) + if fct(request) is True: + print(f'{fct} : {fct(request)}\n') - return await call_next(request) + return await call_next(request) - except AttributeError as e: - print(f'No ACL function "{acl_fct_name}" in {__name__} module') - print(e) - break + except AttributeError as e: + print(f'No ACL function "{acl_fct_name}" in {__name__} module') + print(e) + break - except Exception as e: - print(e) - raise HTTPException(500) + except Exception as e: + print(e) + raise HTTPException(500) - raise HTTPException(401) + raise HTTPException(401)