"""Probe-Backend fuer den Browserlauf zu Paket W: die echte App mit Broker-Attrappe, Wegwerf-Register und Wegwerf-Zugang. Koordinator-Pruefcode, nicht fuers Repo. Wie .vault-tools/trading-plattform-pruefung/start_probe_zugang.py, dazu die Konfiguration fuer Sicherheitsschluessel: RP-ID localhost, Origin http://localhost:. Gestartet wird aus einer KOPIE des Baums (dort gibt es keine Geheimnisdatei) -- kein Broker-Aufruf, kein Ereignis im echten Register, keine echte Zugangsdatei, kein Melder. Aufruf (WSL, aus der Kopie): python start_probe_w.py """ import dataclasses import json import sys from pathlib import Path sys.path.insert(0, str(Path.cwd())) import uvicorn # noqa: E402 from trading.broker.attrappe import BrokerAttrappe # noqa: E402 from trading.dashboard.app import erzeuge_app # noqa: E402 from trading.dashboard.config import lade_dashboard_config # noqa: E402 from trading.dashboard.zugang import Benutzer # noqa: E402 from trading.dashboard.zugang import schreibe_benutzer # noqa: E402 from trading.dashboard.zugang import setze_passwort # noqa: E402 from trading.killswitch.killswitch import lade_killswitch_config # noqa: E402 from trading.registry.registry import Registry # noqa: E402 BENUTZER = "probe" PASSWORT = "nur-fuer-die-probe-2026" GEHEIMNIS = "JBSWY3DPEHPK3PXP" port = int(sys.argv[1]) ordner = Path(sys.argv[2]) # Optional: ein Marktkatalog, der nur gelesen wird (fuer die Lastmessung der Kerzenabrufe). katalog = sys.argv[3] if len(sys.argv) > 3 else None ordner.mkdir(parents=True, exist_ok=True) assert not Path("config/secrets.toml").exists(), "Die Probe startet nur aus einem Baum ohne Geheimnisdatei" zugang_datei = ordner / "zugang.toml" schreibe_benutzer( zugang_datei, {BENUTZER: Benutzer(name=BENUTZER, passwort=setze_passwort(PASSWORT), totp_geheimnis=GEHEIMNIS)}, ) (ordner / "zugang.json").write_text( json.dumps({"benutzer": BENUTZER, "passwort": PASSWORT, "geheimnis": GEHEIMNIS}), encoding="utf-8" ) (ordner / "paper").mkdir(exist_ok=True) config = dataclasses.replace( lade_dashboard_config("config/dashboard.toml"), port=port, broker_wahl="attrappe", sendeintervall_s=2.0, erlaubte_hosts=(f"127.0.0.1:{port}", f"localhost:{port}"), anmeldung_pflicht=True, mfa_pflicht=True, zugang_datei=str(zugang_datei), zugang_protokoll=str(ordner / "anmeldungen.jsonl"), paper_status_datei=str(ordner / "status.json"), paper_protokoll_ordner=str(ordner / "paper"), schluessel_rp_id="localhost", **({} if katalog is None else {"markt_katalog": katalog}), schluessel_origins=(f"http://localhost:{port}",), ) app = erzeuge_app( broker=BrokerAttrappe(), registry=Registry(db_pfad=ordner / "registry.db", artefakt_wurzel=ordner / "artifacts"), config=config, killswitch_config=lade_killswitch_config("config/killswitch.toml"), dist=Path("dashboard/dist"), ) print(f"Probe-Backend W auf 127.0.0.1:{port}, Ablage {ordner}", flush=True) uvicorn.run(app, host="127.0.0.1", port=port, log_level="warning", server_header=False, proxy_headers=False)