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
@@ -231,6 +231,11 @@ export interface PublicConfig {
|
||||
oidc_button_label?: string
|
||||
primary_color?: string
|
||||
accent_color?: string
|
||||
/** Ursprung der HoneyOS-Leiste (HONEYBAR_ORIGIN). Leer = keine Leiste. */
|
||||
honeybar_origin?: string
|
||||
/** Ausweis fuer deren App-Liste (HONEYBAR_KEY). Nur gesetzt, wenn es einen
|
||||
* Ursprung gibt. */
|
||||
honeybar_key?: string
|
||||
external_apps: ExternalApp[]
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
* Die HoneyOS-Leiste nachladen.
|
||||
*
|
||||
* Zur Laufzeit statt beim Bauen: Der Ursprung steht in der .env des Servers,
|
||||
* ein fertiges Abbild laesst sich damit umziehen, ohne es neu zu bauen. Frueher
|
||||
* stand die Adresse fest in der index.html — wer die Leiste woanders betrieb,
|
||||
* bekam einen CSP-Verstoss, weil der erlaubte und der geladene Ursprung
|
||||
* auseinanderliefen. Beides kommt jetzt aus HONEYBAR_ORIGIN.
|
||||
*
|
||||
* Faellt der Server aus oder ist kein Ursprung gesetzt, passiert schlicht
|
||||
* nichts: Aether ist nicht auf die Leiste angewiesen.
|
||||
*/
|
||||
export function mountHoneybar(origin?: string, key?: string) {
|
||||
if (!origin) return
|
||||
// Der Aufruf haengt an der Konfiguration, und die wird auch neu geladen,
|
||||
// wenn der Admin etwas aendert. Zweimal einbinden hiesse zwei Leisten.
|
||||
if (document.querySelector('script[data-honeybar]')) return
|
||||
|
||||
const el = document.createElement('script')
|
||||
el.dataset.honeybar = ''
|
||||
el.defer = true
|
||||
el.src = origin.replace(/\/+$/, '') + '/honeybar/honeybar.js'
|
||||
// honeybar.js liest seine Einstellungen ueber document.currentScript –
|
||||
// das gilt auch fuer ein nachtraeglich eingehaengtes Skript.
|
||||
el.dataset.app = 'aether'
|
||||
if (key) el.dataset.key = key
|
||||
document.head.appendChild(el)
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
import { mountHoneybar } from '../honeybar'
|
||||
import { createContext, useCallback, useContext, useEffect, useState, type ReactNode } from 'react'
|
||||
import { publicApi } from '../api/client'
|
||||
import { applyTheme } from '../theme'
|
||||
@@ -103,6 +104,7 @@ export function AppSettingsProvider({ children }: { children: ReactNode }) {
|
||||
if (typeof cfg.max_versions_kept === 'number' && cfg.max_versions_kept > 0) {
|
||||
setMaxVersionsKept(cfg.max_versions_kept)
|
||||
}
|
||||
mountHoneybar(cfg.honeybar_origin, cfg.honeybar_key)
|
||||
applyTheme(cfg.primary_color, cfg.accent_color)
|
||||
applyThemeColor(cfg.primary_color)
|
||||
document.title = cfg.cloud_name || 'Aether'
|
||||
|
||||
Reference in new issue
Block a user