diff --git a/IDEAS.md b/IDEAS.md index 6c63237..89b52a3 100644 --- a/IDEAS.md +++ b/IDEAS.md @@ -131,7 +131,6 @@ Solange das so bleibt, kann HoneyOS **keine InkNote-Daten anzeigen**. Der Weg wäre, dass InkNote seine Sitzung zusätzlich als `HttpOnly`-Cookie setzt; der Token-Weg kann daneben bleiben, damit PWA und Offline-Betrieb unangetastet sind. -Erledigt zugleich den Token-Schlüssel (siehe „Offene Entscheidungen"). ### 1.5b HoneyOS selbst als PWA @@ -356,23 +355,16 @@ Aether oder InkNote neu zu bauen. → **Erst in einer App einbauen, eine Woche benutzen, dann entscheiden.** Nicht in beide gleichzeitig. -### Token-Schlüssel behalten oder löschen? +### Token-Schlüssel behalten oder löschen? — ✅ gelöscht (29.08.2026) -**Empfehlung: löschen.** Gründe: +Mitsamt dem Feld „Wer-bin-ich". Die Begründung von damals hat sich gehalten: Es +brachte allein den Anzeigenamen, wirkte an zwei Stellen unterschiedlich, und ein +Token an eine fremde Adresse zu schicken war eine Falle, die niemand braucht. -1. Er wirkt nur an einer von zwei Stellen — in der HoneyBar ja, auf dem Desktop - nie. Das ist schwer zu erklären und noch schwerer zu merken. -2. Er bringt allein die Namensanzeige. Kein Funktionsunterschied. -3. Sobald 1.3 gebaut ist, ist er ohnehin überflüssig. -4. **Scharfe Kante:** Das Feld „Wer-bin-ich" darf auch eine vollständige fremde - Adresse sein. Steht dort etwas Fremdes *und* ein Token-Schlüssel, schickt die - HoneyBar den InkNote-Token dorthin. Das setzt voraus, dass jemand Angemeldetes - das selbst einträgt — bei einer Ein-Personen-Instanz also kein akuter - Notstand, aber eine Falle, die niemand braucht. +Den Namen zeigt jetzt das Benutzer-Widget auf dem Schreibtisch, aus der +HoneyOS-Anmeldung — dort, wo er hingehört, und ohne dass eine App etwas dafür +tun muss. -Wird er doch behalten, gehört mindestens eingebaut: **mit Token-Schlüssel nur -relative Pfade zulassen**, damit ein Ausweis nie an einen fremden Ursprung geht. -Drei Zeilen. ### Persönliche Apps je Nutzer? diff --git a/README.md b/README.md index 1297672..ace1d0c 100644 --- a/README.md +++ b/README.md @@ -109,8 +109,6 @@ entfällt der Schlüssel und alles funktioniert ohne Einschränkung. | Adresse | wohin der Start springt | | Symbol | cloud · note · box · chip · folder · gear · globe · disk | | Taste | Zifferntaste im Terminal-Modus | -| Wer-bin-ich | optional, siehe unten | -| Token-Schlüssel | nur für Apps mit Bearer-Token im localStorage statt Cookie | Gespeichert wird die Liste als Ganzes; der Server prüft sie noch einmal und antwortet mit dem, was er wirklich behalten hat. Eine Adresse ohne `https://` kommt als Fehlermeldung @@ -388,25 +386,21 @@ nur, wessen App selbst eine schickt. - **Andere Proxys:** Caddy braucht ein Zusatzmodul (`replace-response`), Traefik ein Plugin für den Antwortkörper. nginx kann es ohne Erweiterung. -## Wer ist wo angemeldet +## Wer angemeldet ist -Das Feld **Wer-bin-ich** ist der Pfad, unter dem eine App „wer bin ich" beantwortet -(relativ zur Adresse oder absolut). Aus der Antwort wird der Anzeigename gefischt — -`display_name`, `displayName`, `name`, `username`, auch verschachtelt unter `user`. +Steht auf dem Schreibtisch, als eigenes Widget: Bild, Name und Begrüßung, aus +der HoneyOS-Anmeldung. In den Apps steht es **nicht** — die HoneyBar dort trägt +genau dasselbe wie die Menüleiste hier, sonst merkt man beim Wechsel, dass es +zwei verschiedene Leisten sind. -Gelesen wird das an zwei Stellen, und die verhalten sich **unterschiedlich**: +Früher konnte jede App einen „Wer-bin-ich"-Pfad und einen Token-Schlüssel +mitbringen; die HoneyBar fragte damit die App nach dem Anzeigenamen. Beides ist +seit dem 29.08.2026 **entfernt**. Es brachte allein einen Namen, wirkte je nach +Domain unterschiedlich, und der Token-Schlüssel hatte eine scharfe Kante: Zeigte +das Wer-bin-ich-Feld auf eine fremde Adresse, ging der Ausweis der App dorthin. +Wer die Felder in seiner `honeyos.json` noch stehen hat, braucht nichts zu tun — +sie werden beim nächsten Speichern still verworfen. -1. **Die HoneyBar in der App** fragt ihre eigene App. Gleicher Ursprung → funktioniert - sofort, ohne Änderung an Aether oder InkNote. -2. **Der Desktop auf `os.…`** fragt über die Domaingrenze. Dafür muss die App diesen - Ursprung erlauben: - - InkNote: `ALLOWED_ORIGINS=https://os.honeyy.duckdns.org` - - Aether: CORS mit `Access-Control-Allow-Credentials` — noch nicht vorhanden - -Fehlt das, bleibt die Anzeige leer und sonst passiert nichts. - -**Voraussetzung:** alle Adressen unter derselben Domain (`*.honeyy.duckdns.org`). Sonst -behandelt der Browser sie als fremde Site und schickt die Sitzung gar nicht erst mit. ## Entwickeln diff --git a/honeyos b/honeyos index 64d3cf1..abbaf57 100755 Binary files a/honeyos and b/honeyos differ diff --git a/main.go b/main.go index ea78fa5..9e3c9a3 100644 --- a/main.go +++ b/main.go @@ -28,7 +28,7 @@ const localSub = "local" // Version ist die einzige Stelle, an der sie steht. build.sh liest sie hier aus // und vergibt denselben Docker-Tag; die Oberfläche holt sie über /api/public. // Vorher stand sie zusätzlich in os.js und lief mit den Image-Tags auseinander. -const Version = "0.9" +const Version = "1.0" type Config struct { Addr string diff --git a/store.go b/store.go index d3e4cea..55e8880 100644 --- a/store.go +++ b/store.go @@ -24,8 +24,6 @@ type App struct { URL string `json:"url"` Glyph string `json:"glyph,omitempty"` Key string `json:"key,omitempty"` - Me string `json:"me,omitempty"` - TokenKey string `json:"tokenKey,omitempty"` } type User struct { @@ -117,8 +115,6 @@ func (s *Store) SetApps(apps []App) error { a.URL = strings.TrimSpace(a.URL) a.Glyph = strings.TrimSpace(a.Glyph) a.Key = strings.TrimSpace(a.Key) - a.Me = strings.TrimSpace(a.Me) - a.TokenKey = strings.TrimSpace(a.TokenKey) if !idPattern.MatchString(a.ID) { return fmt.Errorf("App %d: ID muss klein geschrieben sein und mit Buchstabe oder Ziffer beginnen", i+1) @@ -141,7 +137,7 @@ func (s *Store) SetApps(apps []App) error { if len([]rune(a.Key)) > 1 { return fmt.Errorf("App %q: Taste ist ein einzelnes Zeichen", a.ID) } - for _, f := range []string{a.Name, a.Subtitle, a.URL, a.Me, a.TokenKey} { + for _, f := range []string{a.Name, a.Subtitle, a.URL} { if len(f) > maxFieldLen { return fmt.Errorf("App %q: ein Feld ist länger als %d Zeichen", a.ID, maxFieldLen) } diff --git a/web/honeybar/honeybar.js b/web/honeybar/honeybar.js index 0454847..9c57ebd 100644 --- a/web/honeybar/honeybar.js +++ b/web/honeybar/honeybar.js @@ -153,8 +153,6 @@ background: var(--p); border-color: var(--p); color: var(--bg); text-shadow: none; } .right { display: flex; align-items: center; gap: 8px; } - .user { color: var(--p); max-width: 160px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } - .user[hidden] { display: none; } .clock { color: var(--p-mid); font-variant-numeric: tabular-nums; } /* Anzeige, kein Knopf: Wer darauf klickt, erwartet, dass etwas passiert. Eingestellt wird das Wetter dort, wo alles eingestellt wird. */ @@ -187,7 +185,6 @@ ■ HONEYOS
optional — zeigt an, ob du dort angemeldet bist
- -nur für Apps mit Bearer-Token im localStorage statt Cookie