feat(api): CORS-Tür für POST /speak — OPTIONS-Preflight und ACAO aus Config
OPTIONS /speak beantwortet Preflights mit 204 + Allow-Headers/Methods/Max-Age, wenn die Origin in server.allowed_origins steht; ungeliste Origins und leere Liste bekommen keine CORS-Header (Browser blockt). Nur /speak, kein anderer Endpunkt. /status ergänzt additiv cors:[origins] (immer vorhanden, [] wenn zu).
This commit is contained in:
1 parent
cef6e6b9f2
commit
156c20dbb3
5 files changed
+174
-35
No files matched your search
+10
-3
@@ -5,7 +5,9 @@
|
||||
// Default 1 Ansage / 30 s; low über Budget wird verworfen, normal parkt,
|
||||
// high darf mit queue.allow_high_burst verstoßen) plus Ruhezeiten
|
||||
// (quiet_hours/quiet_mode; now:true bricht bewusst aus beiden aus).
|
||||
// CORS/MCP folgen in Task 06.
|
||||
// Task 06 ergänzt die CORS-Tür für POST /speak (server.allowed_origins /
|
||||
// TALK_ALLOWED_ORIGINS; leer = kein CORS) und den MCP-Endpoint POST /mcp
|
||||
// (Streamable HTTP, ein speak-Tool).
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -120,6 +122,7 @@ func run() error {
|
||||
Mute: mute,
|
||||
Version: versionString(),
|
||||
KnownProviders: provider.Names(),
|
||||
AllowedOrigins: cfg.Server.AllowedOrigins,
|
||||
Provider: func() string {
|
||||
if cur, ok := q.Current(); ok {
|
||||
return resolveProviderName(baseChain, cur)
|
||||
@@ -139,9 +142,13 @@ func run() error {
|
||||
srv := &http.Server{Handler: handler, ReadHeaderTimeout: 5 * time.Second}
|
||||
errCh := make(chan error, 1)
|
||||
go func() { errCh <- srv.Serve(ln) }()
|
||||
log.Printf("listening on http://%s (version %s, audio sink %s, mute=%v, rate-limit %s, high-burst=%v, ruhezeit=%q modus %s)",
|
||||
corsLog := "zu (kein CORS)"
|
||||
if len(cfg.Server.AllowedOrigins) > 0 {
|
||||
corsLog = fmt.Sprintf("%v", cfg.Server.AllowedOrigins)
|
||||
}
|
||||
log.Printf("listening on http://%s (version %s, audio sink %s, mute=%v, rate-limit %s, high-burst=%v, ruhezeit=%q modus %s, cors=%s, mcp=/mcp)",
|
||||
addr, versionString(), sink.Name(), mute.Muted(),
|
||||
cfg.Queue.RateLimit, cfg.Queue.AllowHighBurst, cfg.QuietHours, cfg.QuietMode)
|
||||
cfg.Queue.RateLimit, cfg.Queue.AllowHighBurst, cfg.QuietHours, cfg.QuietMode, corsLog)
|
||||
|
||||
sig := make(chan os.Signal, 1)
|
||||
signal.Notify(sig, os.Interrupt, syscall.SIGTERM)
|
||||
|
||||
Reference in new issue
Block a user