Abmelden nur noch in den Einstellungen, App-Menue statt Zahnrad

Marcs Entscheidung: In der HoneyBar fremder Apps steht kein Abmelden mehr
— es war dort ohnehin nur ein Link auf den Schreibtisch. Als einzige
Schaltflaeche, die eine Sitzung beendet, steht es jetzt an genau einer
Stelle: unten in den Einstellungen, sichtbar nur bei eigener Anmeldung.
Damit faellt auch der ?abmelden=1-Pfad wieder weg und /api/apps braucht
das oidc-Feld nicht mehr.

Das Zahnrad rechts in der Menueleiste ist durch den Pfeil mit der
App-Liste ersetzt — derselbe wie in der HoneyBar. Beide Leisten tragen
damit dieselben vier Dinge: Logo, Apps, Wetter/Uhr, Aufklappmenue.
This commit is contained in:
marc committed 2026-08-29 21:51:00 +02:00
1 parent 0a5cd94ba0
commit 6d75ce78c2
7 files changed
+136 -65

No files matched your search

+14 -25
View File
@@ -56,8 +56,6 @@
let apps = DEFAULT_APPS;
let settings = null;
// Ob HoneyOS ueberhaupt anmeldet — ohne Anbieter gaebe es nichts abzumelden.
let oidc = false;
// Was die Seite oben schon hatte, bevor die HoneyBar sie heruntergeschoben hat.
let urspruenglichesPolster = null;
@@ -222,8 +220,6 @@
<a id="mSettings" role="menuitem">Einstellungen &hellip;</a>
<hr />
<button id="hide" role="menuitem">HoneyBar einklappen</button>
<hr id="mLogoutSep" hidden />
<a id="mLogout" role="menuitem" hidden>Abmelden</a>
</div>
<div class="menu" id="menu" role="menu">
@@ -400,31 +396,25 @@
}
/**
* Die drei Wege ins System. Alle drei sind Links auf den Schreibtisch, keine
* Die zwei Wege ins System. Beides sind Links auf den Schreibtisch, keine
* Aktionen hier — und das ist keine Bequemlichkeit, sondern die Grenze:
*
* Einstellungen und Abmelden **schreiben**. Dafuer braucht der Server die
* HoneyOS-Sitzung, und die schickt der Browser aus einer fremden App nicht
* mit; liegt alles unter einer Domain, kommt sie zwar mit, aber das
* CSRF-Prüfwort steht in einem Cookie der HoneyOS-Adresse, das dieses Skript
* von hier aus nicht lesen darf. Und ein Abmelden, das ein simpler Aufruf
* erledigt, koennte jede fremde Seite ausloesen.
* Einstellungen **schreiben**. Dafuer braucht der Server die HoneyOS-Sitzung,
* und die schickt der Browser aus einer fremden App nicht mit; liegt alles
* unter einer Domain, kommt sie zwar mit, aber das CSRF-Prüfwort steht in
* einem Cookie der HoneyOS-Adresse, das dieses Skript von hier aus nicht
* lesen darf.
*
* Also: die HoneyBar zeigt den Weg, gehandelt wird dort, wo man angemeldet
* ist. Der Schreibtisch sieht die Frage in der Adresse und macht sie auf.
* Abmelden steht hier bewusst gar nicht: Es gehoert dorthin, wo man sich
* angemeldet hat. Wer es aus einer App heraus braucht, geht ueber
* „Einstellungen …" — dort unten steht der Knopf.
*/
function systemZiele() {
const ziel = (q) => {
const u = new URL(homeUrl, location.href);
u.search = q;
return u.href;
};
root.getElementById("mHome").href = new URL(homeUrl, location.href).href;
root.getElementById("mSettings").href = ziel("einstellungen=1");
const ab = root.getElementById("mLogout");
ab.href = ziel("abmelden=1");
ab.hidden = !oidc;
root.getElementById("mLogoutSep").hidden = !oidc;
const heim = new URL(homeUrl, location.href);
root.getElementById("mHome").href = heim.href;
const einst = new URL(homeUrl, location.href);
einst.search = "einstellungen=1";
root.getElementById("mSettings").href = einst.href;
}
/**
@@ -520,7 +510,6 @@
apps = [{ id: "honeyos", name: "DESKTOP", url: homeUrl }].concat(data.apps);
}
settings = data.settings || null;
oidc = !!data.oidc;
}
} catch {
/* nicht angemeldet, kein CORS, kein Netz → eingebaute Liste;