# Kopier til config.toml og endre det du vil ha annerledes. Alt er valgfritt: # uten fila kjører appen med standardverdiene nedenfor, uten innlogging. # # cp config.example.toml config.toml # # Hver nøkkel kan overstyres av en miljøvariabel, se tabellen i AGENTS.md. # Hemmeligheter bør settes slik istedenfor å stå her, f.eks. i systemd-enheten: # Environment=ANNOUNCER_JWT_SECRET=... # config.toml er i .gitignore. [app] title = "Announcer" subtitle = "Skriv meldingen, forhåndslytt, og send den ut på anlegget." accent = "#4fd1c5" idle_text = "Stille · ingenting i kø" message_placeholder = "Skriv meldingen som skal leses opp …" max_chars = 600 default_voice = "finn" default_chime = "dingdong" # Knapper over tekstfeltet. Tom liste = ingen knapper. quick_phrases = [ "Pizzaen er kommet. Hent i kantina!", "Turneringen starter om ti minutter.", "Husk å rydde rundt plassen din. Takk!", ] [server] host = "0.0.0.0" port = 8090 # Slå på bare når appen står bak HTTPS. Setter Secure på sesjonscookien; på # rå HTTP ville ingen klart å logge inn med den på. behind_tls = false # Trengs bare bak en omvendt proxy, for at OIDC-redirect skal peke riktig. # public_url = "https://announcer.example.no" # Tom = nøkkel genereres én gang og lagres i instance/secret_key. # secret_key = "" [paths] # Kommenter inn hvis noe skal ligge et annet sted enn ved siden av koden. # voices = "voices" # cache = "cache" # chimes = "chimes" # log = "logs/announcements.jsonl" # state = "instance" [audio] # pw-play --target / paplay --device. Tom = systemets standardutgang. # Finn navnet med: pactl list short sinks sink = "" # -------------------------------------------------------------------------- # Innlogging # -------------------------------------------------------------------------- # Tom liste her og ingen av blokkene under utfylt = alt er åpent. Det er # standarden, og helt greit på et lukket nett. # # En metode er aktiv når den står i providers *eller* når den er ferdig # konfigurert nedenfor. Derfor holder det å sette en PIN for å slå på PIN. # Rekkefølgen her bestemmer hvilken som prøves først. [auth] providers = [] # providers = ["oidc", "jwt", "pin"] # --- PIN: én delt kode. Virker uten nett, så den er verdt å ha i reserve. --- [auth.pin] pin = "" role = "admin" label = "PIN" hint = "Spør vaktleder" # --- JWT: crew-panelet signerer et token. Se docs/crew-integration.md. ----- [auth.jwt] issuer = "https://crew.example.no" audience = "announcer" # Ett av disse to. Delt hemmelighet er enklest; JWKS er bedre fordi # announcer da aldri ser en nøkkel som kan lage tokens. # secret = "sett-via-ANNOUNCER_JWT_SECRET" # jwks_url = "https://crew.example.no/.well-known/jwks.json" # Tom = HS256 med secret, RS256/ES256 med jwks_url. algorithms = [] # Hvor rollene står i tokenet. Punktum for nestet, f.eks. "realm_access.roles". role_claim = "roles" # Hvilken rolle alle med gyldig token får hvis tokenet ikke sier noe. default_role = "" # Hvor lenge sesjonen fra /auth/token varer, hvis tokenet ikke har kortere exp. session_seconds = 43200 # Slingringsmonn på exp/nbf i sekunder, for klokker som ikke står helt likt. # En maskin på et arrangement har ikke alltid NTP i orden. leeway = 30 # --- OIDC: vanlig innlogging i nettleseren, autorisasjonskode med PKCE. ---- [auth.oidc] issuer = "https://crew.example.no" client_id = "" # client_secret = "sett-via-ANNOUNCER_OIDC_CLIENT_SECRET" scopes = ["openid", "profile", "email"] role_claim = "roles" default_role = "" label = "Logg inn med crew-kontoen" # Bare hvis panelet mangler .well-known/openid-configuration: # authorization_endpoint = "https://crew.example.no/oauth/authorize" # token_endpoint = "https://crew.example.no/oauth/token" # jwks_url = "https://crew.example.no/.well-known/jwks.json" # end_session_endpoint = "https://crew.example.no/logout" # -------------------------------------------------------------------------- # Roller # -------------------------------------------------------------------------- # Rollenavnene kommer fra tokenet (role_claim). Handlinger: # view se køen og hva som spilles nå # preview forhåndslytte (synteser lyd) # announce sende ut på anlegget # stop stoppe det som spilles # clear tømme køen # "*" betyr alt. [roles] # Alle som ikke er innlogget. ["view"] er nyttig for en statusskjerm på veggen. anonymous = [] crew = ["view", "preview", "announce"] admin = ["*"]