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:
+3
-3
@@ -76,12 +76,12 @@ richiede il probe WebUI su :8899). Esito 12/09/2026: unit 9/9, live completo OK.
|
||||
|
||||
```bash
|
||||
cd ~/workspace
|
||||
tar czf harbour-hermes-0.4.0.tar.gz \
|
||||
--transform 's,^harbour-hermes,harbour-hermes-0.4.0,' \
|
||||
tar czf harbour-hermes-0.5.0.tar.gz \
|
||||
--transform 's,^harbour-hermes,harbour-hermes-0.5.0,' \
|
||||
--exclude='.git' harbour-hermes
|
||||
```
|
||||
|
||||
Lo spec si aspetta la directory `harbour-hermes-0.4.0/` (pattern degli altri
|
||||
Lo spec si aspetta la directory `harbour-hermes-0.5.0/` (pattern degli altri
|
||||
progetti: cercato in modo robusto anche per i sorgenti live di sfdk).
|
||||
|
||||
## Traduzioni
|
||||
|
||||
+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