API-Referenz

Auth & Konto

GET /auth/status 🌐

Gibt an, ob die Ersteinrichtung nötig ist und ob eine Session besteht.

{ "setup_required": false, "user": { "id": 1, "username": "admin" } }

Solange die Einrichtung aussteht (setup_required: true), enthält die Antwort zusätzlich demo_available – ob dieses Binary eine Demo-Website eingebettet hat, die POST /auth/setup mit "demo": true einspielen kann (Release-Builds immer, selbst gebaute nur nach scripts/build-demo.sh):

{ "setup_required": true, "demo_available": true, "user": null }

user ist null, wenn kein gültiges Session-Cookie mitgesendet wurde (API-Tokens zählen hier nicht). Im Remote-Modus enthält die Antwort zusätzlich remote (die gewählte Verbindung).

POST /auth/setup 🌐

Legt den ersten Admin an und startet direkt eine Session. Funktioniert nur, solange noch kein Benutzer existiert, danach 409.

{ "username": "admin", "password": "mindestens-8-zeichen" }

Antwort 200: { "user": { "id": 1, "username": "admin" } } + Set-Cookie: ic_session=…

Validierung: Benutzername 1–64 Zeichen, Passwort mindestens 8 Zeichen. Höchstens 72 Bytes (auth.passwordTooLong). Ist am Server IC_SETUP_TOKEN gesetzt, verlangt die Einrichtung zusätzlich "setup_token" im Body (oder Header X-IC-Setup-Token), sonst 403 setup.tokenInvalid; GET /auth/status meldet dann setup_token_required: true. Nach dem Ändern des eigenen Passworts (POST /auth/password, auch PUT /users/{id}/password am eigenen Konto) enden alle anderen Sitzungen des Kontos; falsche Versuche zählen für das Limit (429 auth.tooManyAttempts), der Login zählt zusätzlich je Benutzername (30 Versuche/15 min).

Demo-Website (optional, nur hier – danach gibt es keinen Weg über diesen Endpunkt): Mit "demo": true spielt der Server nach dem Anlegen des Kontos die eingebettete Demo ein – wie ein Bundle-Import inklusive Medien und Einträgen der Live-Collections, ohne Backup (die Instanz ist leer). REST-Quellen, deren URL mit http://demo.invalid beginnt, zeigen danach auf die Adresse der Anfrage (Schema und Host, hinter einem Proxy über X-Forwarded-Proto/-Host).

{ "username": "admin", "password": "mindestens-8-zeichen", "demo": true }

Antwort 200: { "user": {…}, "demo": { "pages": 23, "files": 12, "sources": 1 } } + Set-Cookie. Fehler: 400 setup.demoUnavailable (dieses Binary enthält keine Demo – es wird kein Konto angelegt), 500 setup.demoFailed (Konto ist angelegt und angemeldet, nur die Demo fehlt; params.error nennt den Grund).

POST /auth/login 🌐

{ "username": "admin", "password": "…" }
  • 200 { "user": {…} } + Session-Cookie
  • 401 invalid username or password
  • 429 nach 10 Fehlversuchen pro IP innerhalb von 15 Minuten

POST /auth/logout 🌐

Beendet die aktuelle Session und löscht das Cookie. Antwort: { "ok": true }.

POST /auth/password 👤

{ "current": "altes-passwort", "new": "neues-passwort" }
  • 200 { "ok": true }
  • 403 current password is wrong
  • 400 neues Passwort kürzer als 8 Zeichen