fix(honeybar): Ursprung zur Laufzeit statt beim Bauen
Die Adresse im <script>-Tag stand fest in der index.html, waehrend die CSP aus HONEYBAR_ORIGIN kam. Wer die Leiste woanders betreibt, bekam genau den Widerspruch: die CSP erlaubte den eigenen Ursprung, geladen wurde der alte. Der erste Versuch, das ueber ein Bau-Argument zu loesen, half beim fertigen Abbild nicht — dort ist der Bau vorbei, und ein Umzug haette einen Neubau verlangt. Ursprung und Schluessel stehen jetzt in /api/v1/public/config, die Oberflaeche haengt das Skript selbst ein. Beides speist sich aus derselben Variablen wie die CSP, sie koennen also nicht auseinanderlaufen, und eine Aenderung wirkt beim Neustart. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
6c7eb348b0
commit
57156a6394
11 files changed
+74
-67
No files matched your search
@@ -374,6 +374,12 @@ func main() {
|
||||
faviconURL = admin.AppIconURL(s["app_icon_storage_key"], "64")
|
||||
appleTouchURL = admin.AppIconURL(s["app_icon_storage_key"], "192")
|
||||
}
|
||||
// Ohne Ursprung gibt es keine Leiste — dann hat auch der Schluessel
|
||||
// nichts auf der Seite zu suchen.
|
||||
honeybarKey := ""
|
||||
if cfg.HoneybarOrigin != "" {
|
||||
honeybarKey = cfg.HoneybarKey
|
||||
}
|
||||
apps := cfg.ExternalApps
|
||||
if apps == nil {
|
||||
apps = []config.ExternalApp{} // nie null – das Frontend erwartet eine Liste
|
||||
@@ -398,6 +404,12 @@ func main() {
|
||||
// ist – sonst gibt der Endpunkt eine Einstellung preis, die
|
||||
// niemanden etwas angeht.
|
||||
"oidc_button_label": oidcLabel,
|
||||
// Die HoneyOS-Leiste laedt die Oberflaeche selbst nach. Zur
|
||||
// Laufzeit statt beim Bauen, damit ein fertiges Abbild ueber die
|
||||
// .env umgezogen werden kann — und damit derselbe Ursprung
|
||||
// gilt, den die CSP erlaubt.
|
||||
"honeybar_origin": cfg.HoneybarOrigin,
|
||||
"honeybar_key": honeybarKey,
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@@ -83,9 +83,21 @@ type Config struct {
|
||||
// (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 <script>-Tag der index.html passen. Leer heißt: keine
|
||||
// Leiste, und die CSP bleibt so eng wie bisher.
|
||||
// Derselbe Wert geht über /api/v1/public/config an die Oberfläche, die das
|
||||
// Skript daraufhin selbst nachlädt. Beides aus einer Quelle: so kann die
|
||||
// CSP nicht einen anderen Ursprung erlauben als den geladenen.
|
||||
//
|
||||
// Leer heißt: keine Leiste, und die CSP bleibt so eng wie bisher.
|
||||
HoneybarOrigin string
|
||||
// HoneybarKey ist der Ausweis, mit dem sich die Leiste bei HoneyOS die
|
||||
// App-Liste holt (dort HONEYOS_APPS_KEY). Nötig, wenn HoneyOS auf einer
|
||||
// anderen Site liegt als Aether: dann schickt der Browser die
|
||||
// HoneyOS-Sitzung nicht mit.
|
||||
//
|
||||
// Er steht anschließend im Quelltext der Seite — das ist unvermeidlich,
|
||||
// die Leiste läuft im Browser. Er gibt nur die App-Liste her, nichts
|
||||
// Schreibendes.
|
||||
HoneybarKey string
|
||||
// OfficeWopiURL ist die Adresse, unter der der **Office-Server** Aether
|
||||
// erreicht.
|
||||
//
|
||||
@@ -189,6 +201,7 @@ func Load() (*Config, error) {
|
||||
OfficeURL: strings.TrimRight(getEnv("OFFICE_URL", ""), "/"),
|
||||
OfficePublicURL: strings.TrimRight(getEnv("OFFICE_PUBLIC_URL", ""), "/"),
|
||||
HoneybarOrigin: strings.TrimRight(getEnv("HONEYBAR_ORIGIN", ""), "/"),
|
||||
HoneybarKey: getEnv("HONEYBAR_KEY", ""),
|
||||
OfficeWopiURL: strings.TrimRight(getEnv("OFFICE_WOPI_URL", ""), "/"),
|
||||
OfficeAllowedHosts: splitList(getEnv("OFFICE_ALLOWED_HOSTS", "")),
|
||||
OfficeInsecureTLS: getEnv("OFFICE_INSECURE_TLS", "false") == "true",
|
||||
|
||||
Reference in new issue
Block a user