refactor: App-Umschalter und HONEYBAR_KEY entfernt
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>
This commit is contained in:
1 parent
31d51f9bc3
commit
9d152e3677
9 files changed
+4
-204
No files matched your search
@@ -40,10 +40,6 @@ type Config struct {
|
||||
AdminUsername string
|
||||
AdminPassword string
|
||||
|
||||
// ExternalApps erscheinen im App-Umschalter der Oberfläche. Kommt aus der
|
||||
// Umgebung, damit neue Apps ohne Neubau des Frontends dazukommen können.
|
||||
ExternalApps []ExternalApp
|
||||
|
||||
// OCR – Volltextsuche über den Inhalt von PDFs und Bildern.
|
||||
// Standardmäßig an; fehlen die Programme im Image, schaltet sich der
|
||||
// Arbeiter beim Start selbst ab, statt den Start zu verhindern.
|
||||
@@ -89,15 +85,6 @@ type Config struct {
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
@@ -138,45 +125,6 @@ func (c *Config) OfficeEnabled() bool {
|
||||
return (c.OfficeProvider == "collabora" || c.OfficeProvider == "onlyoffice") && c.OfficeURL != ""
|
||||
}
|
||||
|
||||
// ExternalApp ist ein Eintrag im App-Umschalter.
|
||||
type ExternalApp struct {
|
||||
Name string `json:"name"`
|
||||
URL string `json:"url"`
|
||||
Icon string `json:"icon"` // ein Emoji, optional
|
||||
}
|
||||
|
||||
// parseExternalApps liest EXTERNAL_APPS im Format
|
||||
//
|
||||
// Name|https://url|Emoji , Name|https://url|Emoji
|
||||
//
|
||||
// Einträge ohne Namen oder URL werden übersprungen, damit ein Tippfehler in der
|
||||
// .env nicht den Start verhindert.
|
||||
func parseExternalApps(raw string) []ExternalApp {
|
||||
var apps []ExternalApp
|
||||
for _, entry := range strings.Split(raw, ",") {
|
||||
entry = strings.TrimSpace(entry)
|
||||
if entry == "" {
|
||||
continue
|
||||
}
|
||||
parts := strings.Split(entry, "|")
|
||||
if len(parts) < 2 {
|
||||
continue
|
||||
}
|
||||
app := ExternalApp{
|
||||
Name: strings.TrimSpace(parts[0]),
|
||||
URL: strings.TrimSpace(parts[1]),
|
||||
}
|
||||
if len(parts) > 2 {
|
||||
app.Icon = strings.TrimSpace(parts[2])
|
||||
}
|
||||
if app.Name == "" || app.URL == "" {
|
||||
continue
|
||||
}
|
||||
apps = append(apps, app)
|
||||
}
|
||||
return apps
|
||||
}
|
||||
|
||||
func Load() (*Config, error) {
|
||||
cfg := &Config{
|
||||
AppEnv: getEnv("APP_ENV", "development"),
|
||||
@@ -198,8 +146,6 @@ func Load() (*Config, error) {
|
||||
AdminUsername: getEnv("ADMIN_USERNAME", ""),
|
||||
AdminPassword: getEnv("ADMIN_PASSWORD", ""),
|
||||
|
||||
ExternalApps: parseExternalApps(getEnv("EXTERNAL_APPS", "")),
|
||||
|
||||
OCREnabled: getEnv("OCR_ENABLED", "true") != "false",
|
||||
|
||||
OfficeProvider: strings.ToLower(strings.TrimSpace(getEnv("OFFICE_PROVIDER", ""))),
|
||||
@@ -207,7 +153,6 @@ func Load() (*Config, error) {
|
||||
OfficeJWTSecret: getEnv("OFFICE_JWT_SECRET", ""),
|
||||
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