auth: OIDC/lokal inloggning + device-flow för klienter, sessioner per användare
Ersätter den delade AGENT_HELM_TOKEN med en riktig auth-modell: - Webben loggar in med lokala konton ELLER OIDC (Authentik/Keycloak/…), valt per server. Inloggning ger en HMAC-signerad cookie; WS autentiseras via cookien. - Klienten (daemon) kopplas via device-flödet (RFC 8628-likt): `agent-helm connect` skriver ut en URL, du loggar in + godkänner i webben, och får ett klient-token som identifierar din användare. Token sparas i ~/.config/agent-helm/. - Sessioner är per användare (web ser bara sina egna; admin ser alla). Flera klient-instanser = flera parallella sessioner; --new tvingar ny, annars resume. - Identitet är utbytbar (lokal/OIDC) men device-flödet + sessionerna är alltid agent-helms egna → funkar för vem som helst som hostar detta, med eller utan IdP. - Bootstrap-admin via env (engångs) eller first-run-setup i UI:t. Klient-creds kan listas/återkallas; minimal admin-UI (skapa användare, konfigurera OIDC). Nya filer: server/store.ts (JSON-store, scrypt, cookies), server/oidc.ts (auth-code+PKCE), web/lib/api.ts. Verifierat end-to-end lokalt (login → device → approve → daemon-WS → web ser sessionen; web utan cookie nekas). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U68YyHsxU91ecsen84WQV4
This commit is contained in:
50
.env.example
50
.env.example
@@ -1,23 +1,43 @@
|
||||
# Delad token som BÅDE daemon och frontend måste skicka för att få ansluta till servern.
|
||||
# Byt till något hemligt — den här skyddar fjärrstyrning av en agent som kan köra shell.
|
||||
AGENT_HELM_TOKEN=change-me
|
||||
# ============================================================================
|
||||
# agent-helm — exempel-miljö. Kopiera till .env (dev) eller sätt i Dockge/compose.
|
||||
# Ingen delad token längre: webben loggar in (lokalt konto eller OIDC) och
|
||||
# klienten kopplas via device-flödet.
|
||||
# ============================================================================
|
||||
|
||||
# --- server ---
|
||||
PORT=8787
|
||||
DATA_DIR=./data # store.json (konton, klient-creds) lagras här
|
||||
AGENT_HELM_PUBLIC_URL=https://helm.example.com # publik URL (device-länken + Secure-cookie)
|
||||
# COOKIE_SECURE=true # default: true om PUBLIC_URL är https
|
||||
# AGENT_HELM_SECRET=<lång slump> # HMAC-nyckel för cookies; genereras+sparas om ej satt
|
||||
|
||||
# --- daemon ---
|
||||
SERVER_URL=ws://localhost:8787
|
||||
# Kommandot som körs i pty:n. Default: gemini. Sätt t.ex. AGENT_CMD=bash för att testa pipelinen.
|
||||
AGENT_CMD=gemini
|
||||
# Identitetsläge: local (egna konton) eller oidc (Authentik/Keycloak/…)
|
||||
AGENT_HELM_AUTH=local
|
||||
|
||||
# Bootstrap-admin (engångs): seedar det första kontot om inget admin finns.
|
||||
# Ta bort efter första inloggning — servern kör sen från sin egen databas.
|
||||
# Alternativt: lämna tomt och kör first-run-setupen i web-UI:t (lokalt läge).
|
||||
AGENT_HELM_ADMIN_USER=admin
|
||||
AGENT_HELM_ADMIN_PASSWORD=byt-mig-vid-forsta-start
|
||||
|
||||
# --- OIDC (endast om AGENT_HELM_AUTH=oidc; kan även sättas i admin-UI:t) ---
|
||||
# AGENT_HELM_OIDC_ISSUER=https://authentik.brasse-pc.eu/application/o/agent-helm/
|
||||
# AGENT_HELM_OIDC_CLIENT_ID=<client_id>
|
||||
# AGENT_HELM_OIDC_CLIENT_SECRET=<client_secret>
|
||||
# AGENT_HELM_OIDC_LABEL=Logga in med Authentik
|
||||
# AGENT_HELM_OIDC_GROUP=agent-helm # valfri grupp-gate (kräver claim "groups")
|
||||
# Registrera redirect-URI i providern: <PUBLIC_URL>/auth/oidc/callback
|
||||
|
||||
# --- daemon (klienten) ---
|
||||
# Anges oftast på CLI:n: agent-helm connect --server https://helm.example.com
|
||||
# SERVER_URL=https://helm.example.com
|
||||
AGENT_CMD=gemini # kommandot i pty:n; sätt bash för att testa pipelinen
|
||||
# AGENT_ARGS=
|
||||
# AGENT_CWD=
|
||||
# AGENT_TITLE=
|
||||
# AGENT_TITLE= # klient-/sessionsnamn (annars "cmd @ hostname")
|
||||
# AGENT_HELM_CONFIG_DIR=~/.config/agent-helm # var klient-token sparas
|
||||
|
||||
# --- hook (valfritt: strukturerade verktygsgodkännanden via BeforeTool) ---
|
||||
# AGENT_HELM_HOOK_PORT=8788 # lokal 127.0.0.1-endpoint som `agent-helm hook` anropar
|
||||
# AGENT_HELM_HOOK_DEFAULT=allow # beslut när ingen UI är ansluten (allow|deny)
|
||||
# AGENT_HELM_HOOK_TIMEOUT=120000 # ms att vänta på beslut innan default används
|
||||
|
||||
# --- frontend (Vite läser bara VITE_*-prefix) ---
|
||||
VITE_SERVER_WS=ws://localhost:8787
|
||||
VITE_AGENT_HELM_TOKEN=change-me
|
||||
# AGENT_HELM_HOOK_PORT=8788
|
||||
# AGENT_HELM_HOOK_DEFAULT=allow # beslut när ingen UI är ansluten (allow|deny)
|
||||
# AGENT_HELM_HOOK_TIMEOUT=120000
|
||||
|
||||
Reference in New Issue
Block a user