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:
marcandClaude Opus 5 committed 2026-08-24 23:07:35 +02:00
1 parent 6c7eb348b0
commit 57156a6394
11 files changed
+74 -67

No files matched your search

+28
View File
@@ -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)
}