Example #1
0
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."""