feat(profile): selezione del profilo di cui vedere le sessioni (v0.5.0)
- Impostazioni > Sessions: selettore "Profile" (elenco da /api/profiles; "(server active)" come prima voce = nessun cookie di profilo) - ApiClient: fetchProfiles() + switchProfile(); lo switch usa /api/profile/switch (process_wide=False lato server: il cookie firmato hermes_profile scopa le richieste dell'app per-client; il profilo attivo globale del server non viene toccato); refresh automatico delle sessioni - CookieJar::removeCookiesByName per l'opzione "(server active)" - Il profilo scelto viene riapplicato automaticamente dopo il login - i18n: nuove stringhe tradotte it/fr/de
This commit is contained in:
+22
-1
@@ -173,7 +173,28 @@ Annullamento: `GET /api/chat/cancel?stream_id=ID` →
|
||||
- Engine: `edge` (default, gratis), `elevenlabs`, `openai` (richiedono chiavi
|
||||
configurate sul server). `browser` è solo client-side, non usabile qui.
|
||||
|
||||
## 5. Note operative
|
||||
## 5. Profili (selezione dell'utente)
|
||||
|
||||
Le sessioni del WebUI appartengono a un *profilo* (campo `profile` nel payload
|
||||
di `/api/sessions`). Il client sceglie di quale profilo vedere le sessioni con
|
||||
lo switch per-client:
|
||||
|
||||
| Endpoint | Metodo | Note |
|
||||
|---|---|---|
|
||||
| `/api/profiles` | GET | `{"profiles": [{"name", "path", "is_default", "is_active", ...}], "active": "..."}` |
|
||||
| `/api/profile/switch` | POST | body `{"name": "carlo"}` → `200` + `Set-Cookie: hermes_profile=<name>.<firma>` |
|
||||
|
||||
Il cookie `hermes_profile` e' **firmato lato server** (HMAC legato al token di
|
||||
sessione, anti-forging): il client non puo' inventarlo, deve riceverlo dallo
|
||||
switch e conservarlo nel cookie jar. Da quel momento **tutte** le richieste
|
||||
dell'app sono profilate lato server (`server.py` applica il profilo
|
||||
per-request dal cookie). Lo switch usa `process_wide=False`: **il profilo
|
||||
attivo globale del server non viene toccato** (la vista del browser resta la
|
||||
sua). Per tornare al profilo attivo del server basta rimuovere il cookie.
|
||||
Validato contro il server reale (2026-09: switch → 200 + Set-Cookie firmato;
|
||||
profilo inesistente → 404 `Profile 'x' does not exist`).
|
||||
|
||||
## 6. Note operative
|
||||
|
||||
- Tutti gli errori API sono JSON `{"error": "..."}`.
|
||||
- Il server non espone CORS: il client nativo non serve preflight.
|
||||
|
||||
Reference in New Issue
Block a user