railiance-platform/scripts/operator-browser/xdg-open
codex 8d4d285643
All checks were successful
CCR intake gate / gate (push) Successful in 15s
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 2s
Intercept the WSL OpenBao browser launch.
OpenBao opens the login with cmd.exe /c start, so the xdg-open launcher
never ran. The attended PATH now supplies cmd.exe for that one allowlisted
URL and opens it in the empty Playwright Chromium profile.

Assistant: grok
Assistant-Session: 01a198fa-fd27-7e41-a0a2-57355c3e4efd
2026-11-02 10:08:36 +01:00

140 lines
4 KiB
Python
Executable file

#!/usr/bin/env python3
"""Open the approved OpenBao login in a new empty Playwright Chromium profile.
The Windows default browser is not used. A previous login opened Firefox,
which was already signed in as another account. This launcher uses the
headed Chromium binary pinned by coulomb-social's Playwright install.
"""
import json
import os
import subprocess
import sys
import tempfile
from pathlib import Path
from urllib.parse import parse_qs, urlsplit
BROWSERS_JSON = Path(
"/home/worsch/coulomb-social/scripts/node_modules/playwright-core/browsers.json"
)
def allowed(url):
try:
parsed = urlsplit(url)
query = parse_qs(parsed.query)
return (
parsed.scheme == "https"
and parsed.hostname == "kc.coulomb.social"
and parsed.port in (None, 443)
and parsed.username is None
and parsed.password is None
and not parsed.fragment
and not any(char in url for char in "\r\n\x00")
and query.get("redirect_uri")
in (
["http://localhost:8250/oidc/callback"],
["http://127.0.0.1:8250/oidc/callback"],
)
)
except ValueError:
return False
def chromium_executable(browsers_json, cache_root):
try:
spec = json.loads(Path(browsers_json).read_text(encoding="utf-8"))
except (OSError, UnicodeError, json.JSONDecodeError):
return ""
browsers = spec.get("browsers") if isinstance(spec, dict) else None
if not isinstance(browsers, list):
return ""
revision = ""
for item in browsers:
if isinstance(item, dict) and item.get("name") == "chromium":
revision = str(item.get("revision") or "")
break
if not revision.isdecimal():
return ""
candidate = Path(cache_root) / f"chromium-{revision}" / "chrome-linux64" / "chrome"
if candidate.is_file() and os.access(candidate, os.X_OK):
return str(candidate)
return ""
def browser_path():
return chromium_executable(BROWSERS_JSON, Path.home() / ".cache/ms-playwright")
def launch_argv(browser, profile_dir, url):
return [
browser,
f"--user-data-dir={profile_dir}",
"--no-first-run",
"--no-default-browser-check",
"--disable-sync",
"--new-window",
url,
]
def classify_cmd(argv):
"""Classify OpenBao's WSL launch, `cmd.exe /c start <url>`.
hashicorp/cap replaces each & with ^& before calling the Windows
default browser. Other cmd.exe uses are left for the real binary.
"""
if list(argv[:2]) != ["/c", "start"] or len(argv) != 3:
return "delegate", ""
url = str(argv[2]).replace("^&", "&")
if allowed(url):
return "open", url
return "reject", ""
def stamp(result):
path = Path("/home/worsch/.local/state/railiance/receipts/operator-browser-last.txt")
try:
path.parent.mkdir(mode=0o700, parents=True, exist_ok=True)
path.write_text(result + "\n", encoding="utf-8")
os.chmod(path, 0o600)
except OSError:
return
def open_url(url):
if not os.environ.get("DISPLAY") and not os.environ.get("WAYLAND_DISPLAY"):
stamp("no-display")
return 1
browser = browser_path()
if not browser:
stamp("no-browser")
return 1
profile = Path(tempfile.mkdtemp(prefix="operator-browser-"))
os.chmod(profile, 0o700)
command = launch_argv(browser, str(profile), url)
try:
subprocess.Popen(
command,
stdin=subprocess.DEVNULL,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
start_new_session=True,
)
except OSError:
stamp("open-failed")
return 1
stamp("opened")
return 0
def main():
stamp("called")
if len(sys.argv) != 2 or not allowed(sys.argv[1]):
stamp("rejected")
return 1
return open_url(sys.argv[1])
if __name__ == "__main__":
raise SystemExit(main())