from fastapi import APIRouter, Request, Response, HTTPException, status, Depends, Query, Cookie from fastapi.security import HTTPBasic, HTTPBasicCredentials from fastapi.responses import RedirectResponse from starlette.datastructures import URL from collections import deque from functools import wraps from models import FormatEnum from utils import logger, check_credentials, create_login_key, format_message router = APIRouter(tags=['authentication']) security = HTTPBasic() router.session_keys = deque([], maxlen=3) router.token_keys = deque([], maxlen=3) def session_required(func): """Raises exception if request argument in decorated view function doesn't contain valid session cookie.""" @wraps(func) def wrapper(session_token, **kwargs): logger.info(f'Session validation {session_token=}') if session_token not in router.session_keys: raise HTTPException(status.HTTP_401_UNAUTHORIZED) return func(session_token, **kwargs) return wrapper def token_required(func): """Raises exception if token argument in decorated view function is invalid."""