diff --git a/backend/cmd/aether/main.go b/backend/cmd/aether/main.go index 11ac8ba..ad6d7e6 100644 --- a/backend/cmd/aether/main.go +++ b/backend/cmd/aether/main.go @@ -314,7 +314,13 @@ func main() { r.Use(chimiddleware.RequestID) r.Use(middleware.TrustedProxy(cfg)) r.Use(middleware.Logger) - r.Use(middleware.SecurityHeaders(officeFrameSrc)) + r.Use(middleware.SecurityHeaders(middleware.CSP{ + FrameSrc: []string{officeFrameSrc}, + // Die HoneyOS-Leiste kommt als Skript von dort und holt sich von dort + // auch ihre App-Liste. Leer = keine Leiste und die alte, engere Regel. + ScriptSrc: []string{cfg.HoneybarOrigin}, + ConnectSrc: []string{cfg.HoneybarOrigin}, + })) r.Use(chimiddleware.Recoverer) r.Get("/health", func(w http.ResponseWriter, r *http.Request) { diff --git a/backend/pkg/config/config.go b/backend/pkg/config/config.go index 4135dd5..ceea9c4 100644 --- a/backend/pkg/config/config.go +++ b/backend/pkg/config/config.go @@ -78,6 +78,14 @@ type Config struct { // eigenen internen Namen – die Adresse muss also umgeschrieben werden. // Leer heißt: dieselbe wie OfficeURL. OfficePublicURL string + + // HoneybarOrigin ist der Ursprung, von dem die HoneyOS-Leiste geladen wird + // (z. B. https://os.example.com). Er wird in die CSP aufgenommen — ohne das + // blockt der Browser das Skript und dessen Anfragen. + // + // Muss zur Adresse im + + +