diff --git a/backend/routers/exercises.py b/backend/routers/exercises.py index d4a04b3..9dbfa77 100644 --- a/backend/routers/exercises.py +++ b/backend/routers/exercises.py @@ -70,12 +70,23 @@ def normalize_exercise_skill_level(value) -> Optional[str]: MEDIA_ROOT = Path(os.getenv("MEDIA_ROOT", str(Path(__file__).resolve().parent.parent / "media"))) MAX_EXERCISE_MEDIA = 10 -MAX_UPLOAD_BYTES = 50 * 1024 * 1024 +# Upload-Limits (Übungs-Medien): Trainer wie bisher kleiner; Admin/Superadmin höheres Limit für große Videos +_MAX_UPLOAD_MB_USER = max(1, int(os.getenv("EXERCISE_MEDIA_MAX_UPLOAD_MB", "50"))) +_MAX_UPLOAD_MB_ADMIN = max(_MAX_UPLOAD_MB_USER, int(os.getenv("EXERCISE_MEDIA_ADMIN_MAX_UPLOAD_MB", "1024"))) +MAX_UPLOAD_BYTES_USER = _MAX_UPLOAD_MB_USER * 1024 * 1024 +MAX_UPLOAD_BYTES_ADMIN = _MAX_UPLOAD_MB_ADMIN * 1024 * 1024 ALLOWED_UPLOAD_MIMES = frozenset( {"image/jpeg", "image/png", "image/gif", "video/mp4", "application/pdf"} ) +def _upload_limit_bytes(session: dict) -> int: + role = session.get("role") or "" + if role in ("admin", "superadmin"): + return MAX_UPLOAD_BYTES_ADMIN + return MAX_UPLOAD_BYTES_USER + + # ============================================================================ # Pydantic Models # ============================================================================ @@ -1201,10 +1212,11 @@ async def upload_exercise_media( ) else: raw = await file.read() - if len(raw) > MAX_UPLOAD_BYTES: + max_upload = _upload_limit_bytes(session) + if len(raw) > max_upload: raise HTTPException( status_code=413, - detail=f"Datei zu groß (max. {MAX_UPLOAD_BYTES // (1024 * 1024)} MB)", + detail=f"Datei zu groß (max. {max_upload // (1024 * 1024)} MB)", ) mime = file.content_type or "" if mime not in ALLOWED_UPLOAD_MIMES: