Files
claude-regelwerk/.vault-tools/trading-plattform-pruefung/start_probe_zugang.py
T
Pascal MichelandClaude Opus 5 371a1f5d2a Automatischer Push: 8 Datei(en) geändert
- .vault-tools/trading-plattform-pruefung/LIESMICH.md
- .vault-tools/trading-plattform-pruefung/angriffe.py
- .vault-tools/trading-plattform-pruefung/browserlauf_zugang.py
- .vault-tools/trading-plattform-pruefung/handabruf_kerzen.py
- .vault-tools/trading-plattform-pruefung/lies_paper_protokoll.py
- .vault-tools/trading-plattform-pruefung/pruef_beobachtung_echt.py
- .vault-tools/trading-plattform-pruefung/start_probe_backend.py
- .vault-tools/trading-plattform-pruefung/start_probe_zugang.py

Erzeugt vom PostToolUse-Hook .vault-tools/auto-push/auto_push.py.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-18 04:00:01 +02:00

110 lines
4.0 KiB
Python

"""Probe-Backend mit Anmeldung: die echte App mit Attrappe, Wegwerf-Register und Wegwerf-Zugang.
Koordinator-Werkzeug zu Teil 10, nicht fuers Repo. Kein Broker-Aufruf, kein Ereignis im echten
Register, keine echte Zugangsdatei. Der Wegwerf-Zugang traegt ein bekanntes Passwort und das
Beispielgeheimnis der TOTP-Literatur; beides steht in zugang.json im Ausgabeordner, damit
angriffe.py und der Browser-Lauf sich anmelden koennen.
Aufruf aus dem Projektordner (oder einer Kopie davon):
python start_probe_zugang.py <port> <ausgabeordner> [mit-paperstatus]
"""
import dataclasses
import json
import sys
from datetime import UTC
from datetime import datetime
from pathlib import Path
import uvicorn
from trading.broker.attrappe import BrokerAttrappe
from trading.dashboard.app import erzeuge_app
from trading.dashboard.config import lade_dashboard_config
from trading.dashboard.zugang import Benutzer
from trading.dashboard.zugang import schreibe_benutzer
from trading.dashboard.zugang import setze_passwort
from trading.killswitch.killswitch import lade_killswitch_config
from trading.registry.registry import Registry
BENUTZER = "probe"
PASSWORT = "nur-fuer-die-probe-2026"
GEHEIMNIS = "JBSWY3DPEHPK3PXP"
port = int(sys.argv[1])
ordner = Path(sys.argv[2])
ordner.mkdir(parents=True, exist_ok=True)
mit_status = len(sys.argv) > 3 and sys.argv[3] == "mit-paperstatus"
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",
)
paper_ordner = ordner / "paper"
paper_ordner.mkdir(exist_ok=True)
status_datei = ordner / "status.json"
if mit_status:
protokoll = paper_ordner / "2026-09-18T131502-paper.jsonl"
zeilen = [
{"art": "kopf", "modus": "paper"},
{"art": "takt", "schritt": 1, "phase": "handelt", "position": 10, "zielposition": 10},
]
protokoll.write_text("\n".join(json.dumps(z) for z in zeilen) + "\n", encoding="utf-8")
status_datei.write_text(
json.dumps(
{
"zeit": datetime.now(UTC).isoformat(),
"modus": "paper",
"phase": "handelt",
"agent": {
"quelle": "register",
"name": "aapl-minute-ppo",
"version": "v20260907-074410",
"status": "paper",
},
"instrument": "AAPL.XNAS",
"killswitch": "aktiv",
"position": 10,
"zielposition": 10,
"letzte_aktion": {"zeit": datetime.now(UTC).isoformat(), "aktion": 3, "stufe": 1},
"letzte_kerze": datetime.now(UTC).replace(second=0, microsecond=0).isoformat(),
"orders": 1,
"kontowert": 100012.5,
"startkapital": 100000.0,
"hinweis": None,
"protokoll": str(protokoll),
"pid": 1,
}
),
encoding="utf-8",
)
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(status_datei),
paper_protokoll_ordner=str(paper_ordner),
)
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 mit Anmeldung 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)