from functools import wraps from typing import Any, Callable, Union from flask import request from fittrackee.responses import HttpResponse from .utils.controls import verify_user def verify_auth_user( f: Callable, verify_admin: bool, *args: Any, **kwargs: Any ) -> Union[Callable, HttpResponse]: response_object, user = verify_user(request, verify_admin=verify_admin) if response_object: return response_object return f(user, *args, **kwargs) def authenticate(f: Callable) -> Callable: @wraps(f) def decorated_function( *args: Any, **kwargs: Any ) -> Union[Callable, HttpResponse]: verify_admin = False return verify_auth_user(f, verify_admin, *args, **kwargs) return decorated_function def authenticate_as_admin(f: Callable) -> Callable: @wraps(f) def decorated_function( *args: Any, **kwargs: Any ) -> Union[Callable, HttpResponse]: verify_admin = True return verify_auth_user(f, verify_admin, *args, **kwargs) return decorated_function