from __future__ import annotations from pathlib import Path from typing import Any STATIC_ROOT = Path(__file__).resolve().parent.parent / "static" def _local_static_file_exists(url: str) -> bool: if not url.startswith("/static/"): return True relative_path = url.removeprefix("/static/") file_path = STATIC_ROOT / Path(relative_path) return file_path.is_file() def sanitize_media_url(url: str | None) -> str | None: if not url: return None if url.startswith("/static/") and not _local_static_file_exists(url): return None return url def sanitize_media_list(urls: list[str] | None) -> list[str]: if not isinstance(urls, list): return [] items: list[str] = [] for item in urls: if not isinstance(item, str): continue safe_url = sanitize_media_url(item) if safe_url: items.append(safe_url) return items def sanitize_user_media_payload(payload: dict[str, Any]) -> dict[str, Any]: data = dict(payload) avatar_url = sanitize_media_url(data.get("avatar_url")) avatar_blur_url = sanitize_media_url(data.get("avatar_blur_url")) profile_images = sanitize_media_list(data.get("profile_images")) if not avatar_url and profile_images: avatar_url = profile_images[0] if not avatar_blur_url: avatar_blur_url = avatar_url if avatar_url and not profile_images: profile_images = [avatar_url] data["avatar_url"] = avatar_url data["avatar_blur_url"] = avatar_blur_url data["profile_images"] = profile_images return data