secured-remote-docker-build/app/paths.py
Lukas Schaefer e174c2d5d0
Initial version of file upload
Signed-off-by: Lukas Schaefer <lukas@lschaefer.xyz>
2026-09-02 23:04:07 -04:00

17 lines
595 B
Python

import re
SAFE_MANIFEST_PATH = re.compile(r"^[A-Za-z0-9._/-]+$")
MAX_MANIFEST_PATH_LENGTH = 512
def normalize_manifest_path(path: str) -> str:
normalized = path.strip().removeprefix("./")
if not normalized:
raise ValueError("path must not be empty")
if len(normalized) > MAX_MANIFEST_PATH_LENGTH:
raise ValueError(
f"path exceeds {MAX_MANIFEST_PATH_LENGTH} characters: {path!r}"
)
if not SAFE_MANIFEST_PATH.match(normalized) or ".." in normalized.split("/"):
raise ValueError(f"path is not allowed: {path!r}")
return normalized