Files
folkugat-web/folkugat_web/services/auth.py
2025-03-22 23:06:34 +01:00

49 lines
1.2 KiB
Python

import datetime
from typing import Annotated, Optional
import jwt
from fastapi import Cookie, Depends, HTTPException
from folkugat_web.config import auth as config
from folkugat_web.log import logger
def login(value: str | None) -> bool:
if value and value.lower() == config.ADMIN_PASSWORD:
return True
return False
def logged_in(nota_folkugat: Annotated[str | None, Cookie()] = None) -> bool:
if not nota_folkugat:
return False
try:
payload = jwt.decode(nota_folkugat, config.JWT_SECRET, algorithms=["HS256"])
except Exception as exc:
logger.error("Exception: ", exc)
return False
return payload.get('user') == 'admin'
LoggedIn = Annotated[bool, Depends(logged_in)]
def require_login(logged_in: LoggedIn) -> bool:
if not logged_in:
raise HTTPException(status_code=403, detail="Must be logged in")
return True
RequireLogin = Annotated[bool, Depends(require_login)]
def build_payload():
return {
'user': 'admin',
'exp': datetime.datetime.now(tz=datetime.timezone.utc) + config.SESSION_DURATION
}
def build_token():
return jwt.encode(build_payload(), config.JWT_SECRET, algorithm="HS256")