CluPilotCloud/app/Http/Middleware
nexxo 398028a57d Rebuild Add host as a page with one job, and let downloads through the gate
The page was a wall. Six paragraphs of procedure stacked above a form, so the
thing the page actually asks for — four fields — sat underneath an essay about
what would happen afterwards. It answered everything and showed nothing.

It is now built the way the settings page is built, because that page was
rebuilt for the same reason and there is no case for a second idiom: an eyebrow,
a title, a sticky rail on the left and panels of rows on the right.

The rail carries the six steps as two-word labels rather than paragraphs. That
is what the question at this moment actually is — where am I, how much is left —
and it fits in 232 pixels. The numbers carry the state; a tick beside them would
be a second sign for one statement, and a number can be counted.

What a step MEANS now appears in the row where it is due, not six times in
advance. The two provider steps get a panel of their own above the form, because
they have to be done before you save: the one-time code starts expiring the
moment you do. Everything after the form waits until there is something to say.

After saving the command becomes the page. Full width, its own framed block with
the warning in the header strip rather than floating above, and the two
remaining steps below it as ordinary rows.

Two token bugs went with it. `bg-canvas` does not exist — it was a class that
compiled to nothing, which is part of why the block looked wrong. And
`text-accent` on white is 2.9:1; the config says in as many words to use
accent-text for anything read, so the current step number does.

Also fixed, and it would have broken every takeover in production: PublicSiteGate
is appended to the whole web group, so while the site is hidden a server in a
rescue system fetching the archive would have received the 503 placeholder and
piped it into tar. The operator would have seen an unpack error on a machine
only reachable through the provider's console, with nothing pointing at a switch
in the admin area — and they are by definition neither on a management network
nor signed in, since leaving that state is the whole point. Exempted by ROUTE
NAME, not by hostname: the docblock rightly warns that exempting by host means
trusting a header the caller picks, but that warning is about the entire portal.
Behind these two routes are documents that are public anyway and an archive that
404s without a valid one-time code.

2026 tests pass, assets build.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 21:51:30 +02:00
..
EnsureAdmin.php Move the console's identity out of the customer table 2026-07-28 10:31:43 +02:00
EnsureCustomerActive.php Stop a suspended customer's sign-out from killing a shared operator session 2026-07-28 15:02:00 +02:00
PublicSiteGate.php Rebuild Add host as a page with one job, and let downloads through the gate 2026-07-30 21:51:30 +02:00
RequireOperatorTwoFactor.php Match the logout exemption through AdminArea, not a bare route check 2026-07-28 15:27:06 +02:00
RestrictAdminHost.php Authorize the console's live feed on the operator guard, not the default 2026-07-28 13:31:50 +02:00
RestrictConsoleNetwork.php Give the three console guards one answer to "is this the console?" 2026-07-27 04:52:21 +02:00
TouchLoginSession.php Show where an account is signed in, and let it sign the other places out 2026-07-28 23:38:17 +02:00