Beide waren Ballast, aber aus verschiedenen Gründen. Der App-Umschalter (EXTERNAL_APPS, AppSwitcher.tsx) hing seit dem 30.07.2026 nirgends mehr in der Oberfläche – auf Marcs Wunsch damals aus der Seitenleiste genommen, "weil eine gemeinsame Leiste für alle Apps noch überlegt wird". Diese Leiste gibt es inzwischen: die HoneyBar. Das Backend las die Variable trotzdem weiter und lieferte external_apps in der öffentlichen Konfiguration aus. Weg damit, samt Typ und Parser. HONEYBAR_KEY war der Ausweis für die App-Liste, wenn HoneyOS auf einer fremden Site liegt. Bei Marc liegen honeyos.duckdns.org und cloud.honeyos.duckdns.org unter derselben Site, das Sitzungscookie fließt also mit. Nachgesehen, wie HoneyOS entscheidet: Es prüft zuerst die Sitzung (SubFromRequest) und greift erst danach zum Schlüssel – die Leiste kommt hier ohne ihn an ihre Liste. Gedacht war er für Widgets; die sind vertagt. Aether schickt damit kein data-key mehr; HoneyOS behält seine Seite der Prüfung, für den Fall, dass später doch eine App auf fremder Domain dazu kommt. Nachgeprüft: go build, go vet und die Tests laufen; das Abbild baut ohne TypeScript-Fehler; die öffentliche Konfiguration liefert weder honeybar_key noch external_apps; im gebauten Bundle kommt data-key nicht mehr vor. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
28 lines
1.2 KiB
TypeScript
28 lines
1.2 KiB
TypeScript
/**
|
||
* 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) {
|
||
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'
|
||
document.head.appendChild(el)
|
||
}
|