29 lines
995 B
Python
29 lines
995 B
Python
# polisplexity/core/urlbuild.py
|
|
from django.conf import settings
|
|
|
|
def public_base(request=None) -> str:
|
|
"""
|
|
1) settings.PUBLIC_BASE_URL (recommended in prod)
|
|
2) request scheme/host (proxy aware)
|
|
3) http://localhost:8000 fallback
|
|
"""
|
|
base = getattr(settings, "PUBLIC_BASE_URL", "").rstrip("/")
|
|
if base:
|
|
return base
|
|
if request is not None:
|
|
proto = (request.META.get("HTTP_X_FORWARDED_PROTO")
|
|
or ("https" if request.is_secure() else "http"))
|
|
host = request.get_host()
|
|
return f"{proto.split(',')[0].strip()}://{host}"
|
|
return "http://localhost:8000"
|
|
|
|
def public_url(path_or_abs: str, request=None) -> str:
|
|
"""Join public base to a path; pass through absolute URLs untouched."""
|
|
if not path_or_abs:
|
|
return path_or_abs
|
|
if "://" in path_or_abs:
|
|
return path_or_abs
|
|
if not path_or_abs.startswith("/"):
|
|
path_or_abs = "/" + path_or_abs
|
|
return public_base(request) + path_or_abs
|