Onyscribe Admin: Initialer Stand
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>
This commit is contained in:
42
scripts/fake_login_server.py
Normal file
42
scripts/fake_login_server.py
Normal file
@@ -0,0 +1,42 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user