from fastapi import APIRouter, Depends, HTTPException, status from fastapi.responses import StreamingResponse from PIL import Image from ..core.calendar_config import CalendarConfig, DoorsSaved, get_calendar_config from ..core.depends import get_day_image from ..core.helpers import api_return_image, load_image from ._security import user_can_view_day, user_is_admin router = APIRouter(prefix="/user", tags=["user"]) @router.get( "/background_image", response_class=StreamingResponse, ) async def get_background_image( cal_cfg: CalendarConfig = Depends(get_calendar_config), ) -> StreamingResponse: """ Hintergrundbild laden """ return await api_return_image(await load_image(f"files/{cal_cfg.background}")) @router.get( "/image_{day}", response_class=StreamingResponse, ) async def get_image_for_day( image: Image.Image = Depends(get_day_image), can_view: bool = Depends(user_can_view_day), is_admin: bool = Depends(user_is_admin), ) -> StreamingResponse: """ Bild für einen Tag erstellen """ if not (can_view or is_admin): raise HTTPException(status.HTTP_401_UNAUTHORIZED, "Wie unhöflich!!!") return await api_return_image(image) @router.get("/doors") async def get_doors( cal_cfg: CalendarConfig = Depends(get_calendar_config), ) -> DoorsSaved: """ User-sichtbare Türchen lesen """ return [door for door in cal_cfg.doors if await user_can_view_day(door.day)]