Admin-Plattform für die Tenants von Onyscribe: Editor mit Live-Vorschau (echter Core in Sandbox), Versionen, KI-Agent (Cortecs), OIDC-Abgleich über die Login-Developer-API, Deploy-Engine (Mittwald, gesperrt ohne DEPLOY_LIVE, Freigabe pro Tenant), Core-Vertrag (Schema/Manifest), Core-Releases mit Kompatibilitätsprüfung, Canary-Rollout und Rollback, Zustandsabgleich. Runbook: docs/RUNBOOK_PARALLELTEST.md Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
#!/usr/bin/env python3
|
||
"""Lokaler Fake von login.onyva.dev /api/v1 – zum Ausprobieren des OIDC-Abgleichs ohne echtes Login-System.
|
||
|
||
python scripts/fake_login_server.py # http://127.0.0.1:8399/api/v1, Key: onyva_testkey, Nutzer: anna@x.de, bob@x.de
|
||
ONYVA_LOGIN_API_KEY=onyva_testkey OIDC_SYNC_LIVE=true uvicorn app.main:app --port 8300
|
||
→ Einstellungen → „API-Basis“ = http://127.0.0.1:8399/api/v1
|
||
"""
|
||
import json
|
||
import sys
|
||
from http.server import BaseHTTPRequestHandler, HTTPServer
|
||
from pathlib import Path
|
||
|
||
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
|
||
from tests.fakelogin import FakeLogin # noqa: E402
|
||
|
||
fake = FakeLogin()
|
||
|
||
|
||
class H(BaseHTTPRequestHandler):
|
||
def _do(self):
|
||
n = int(self.headers.get("Content-Length") or 0)
|
||
body = json.loads(self.rfile.read(n)) if n else None
|
||
status, data, hdrs = fake(self.command, f"http://x{self.path}", {"Authorization": self.headers.get("Authorization", "")}, body)
|
||
self.send_response(status)
|
||
for k, v in hdrs.items():
|
||
self.send_header(k, v)
|
||
self.send_header("Content-Type", "application/json")
|
||
out = json.dumps(data).encode() if data is not None else b""
|
||
self.send_header("Content-Length", str(len(out)))
|
||
self.end_headers()
|
||
self.wfile.write(out)
|
||
print(f"{self.command} {self.path} → {status}", flush=True)
|
||
|
||
do_GET = do_POST = do_PUT = do_PATCH = do_DELETE = _do
|
||
|
||
def log_message(self, *a):
|
||
pass
|
||
|
||
|
||
if __name__ == "__main__":
|
||
print("Fake-Login auf http://127.0.0.1:8399/api/v1 (Key onyva_testkey)", flush=True)
|
||
HTTPServer(("127.0.0.1", 8399), H).serve_forever()
|