Files
ponlork_1st/docker/jupyter/jupyter_server_config.py
2026-01-29 14:31:48 +07:00

46 lines
1.3 KiB
Python

"""Jupyter Server configuration for DSP docker stack."""
from __future__ import annotations
import os
import re
c = get_config() # noqa: F821 - provided by Jupyter at runtime
default_app_origins = [
"http://localhost:8082",
"http://127.0.0.1:8082",
]
extra_app_origins = [
value.rstrip("/") for value in os.getenv("DSP_APP_ORIGINS", "").split() if value
]
allowed_app_origins = list(
dict.fromkeys([origin.rstrip("/") for origin in default_app_origins + extra_app_origins])
)
if allowed_app_origins:
c.ServerApp.allow_origin = allowed_app_origins[0]
if len(allowed_app_origins) > 1:
escaped_origins = [re.escape(origin) for origin in allowed_app_origins]
pattern = "^(" + "|".join(escaped_origins) + ")$"
c.ServerApp.allow_origin_pat = pattern
c.ServerApp.allow_remote_access = True
c.ServerApp.disable_check_xsrf = True
default_frame_ancestors = [
"'self'",
"http://localhost:8082",
"http://127.0.0.1:8082",
]
extra_frame_ancestors = [value for value in os.getenv("DSP_FRAME_ANCESTORS", "").split() if value]
frame_ancestors = " ".join(
dict.fromkeys(default_frame_ancestors + [origin.rstrip("/") for origin in extra_frame_ancestors])
)
c.ServerApp.tornado_settings = {
"headers": {
"Content-Security-Policy": f"frame-ancestors {frame_ancestors}",
"X-Frame-Options": "ALLOWALL",
}
}