Skip to main content

concierge

The page on a cluster's bare domain, https://<kernel>/: the first thing anybody typing the cluster's address meets. gentian-os installs it as a component of the platform tenant from chart/ and publishes it from that tenant's DMZ, with no session in front of it. It asks for an e-mail address and sends the browser to the desktop of the workspace the address belongs to:

AddressGoes to
<name>@<tenant>.<kernel>https://desktop.<tenant>.<kernel>/
<name>@<kernel>, <name>@platform.<kernel>https://platform.<kernel>/, the platform administrators' desktop
a custom domain the operator published (see lookup)the address its lookup file names
anything elseasks for the workspace's name: platform is the platform's, any other <tenant> is https://desktop.<tenant>.<kernel>/

That is the whole of where this page sends a browser: to https://platform.<kernel>/, to https://desktop.<label>.<kernel>/ for one DNS label, or to a custom domain's address taken from the lookup file the operator wrote for that domain. Nothing else is ever derived from what was typed, and nothing is forwarded without the person's input.

The page asks the server nothing, so it cannot reveal whether an account exists. It hands the address on as ?login_hint= on the desktop's address: the edge in front of the desktop starts the sign-in and passes the address it was asked for to the identity provider inside the request's state, and the login theme in gentian-os reads the hint from there and fills the username. No cookie is set and nothing of this page's lives on the identity provider's host.

Configuration​

/sign-in/config.json, mounted by the deployment. Every key is optional.

KeyMeaning
lookupA same-origin directory the page asks about addresses it cannot place: GET <lookup><sha256-hex of the domain>.json answering {"url": "https://..."}, or 404. gentian-os sets /sign-in/lookup/ and the operator fills it with the tenants' custom domains; hashing the name means a domain is found only by someone who already knows it.

On a cluster with a single user tenant the edge redirects the bare domain's / and /sign-in to that tenant's desktop before this page is reached; the page itself forwards nobody, and only /branding/ is served there.

The cluster's brand​

The same server serves /branding/ (brand.css, brand.json, brand.webmanifest, icons), which the operator renders from the cluster's Branding and every page on the cluster loads: this one, the identity provider's, the desktop and the consoles. brand.json is served with Access-Control-Allow-Origin: * because the consoles read it from their own hosts; it holds nothing that is not on every page anyway.

Development​

Static files, no build: site/sign-in/ is what is served. symlinks is on in serve.json because a mounted ConfigMap is a directory of symlinks. npm test runs the routing tests with Node's own test runner. The image is built by .github/workflows/concierge.yaml and run by gentian-os beside the identity provider (kernel/services/keycloak-idp).