CluPilotCloud/app/Support
nexxo cfaea7dc82 Fill the hostname page from the installation, not from a blank form
The page was empty, and that was a design fault rather than a missing button. I
built a register that starts blank — while the installation already serves half
a dozen names whose certificates were exactly what the operator wanted to see.
An overview you have to populate first does not answer "what do I have".

So the names are derived now, from the same configuration routes/web.php builds
its domain bindings from: SITE_HOSTS, APP_HOST, FILES_HOST, ADMIN_HOSTS. If a
name is in the environment, the application answers on it, and then it belongs
in this list without anybody typing it a second time. Opening the page syncs
them; the list is never empty again.

Syncing and measuring are deliberately separate. The sync costs nothing and runs
on page load. The measurement goes out over the network and runs on the button
or on a schedule — doing it on page load would mean waiting through half a dozen
TLS handshakes, and one of them is always the name that currently does not
resolve.

Which is the other half of what was missing: there was no overview because
nothing measured unless somebody pressed a button. A daily run at 04:17 fills
it, because the question that matters is not "is it valid right now" but "is
renewal running" — a certificate expiring in forty days is fine, the same one at
twenty means something has been broken for a week. Only a measurement taken
while nobody is looking can tell those apart.

The page now opens with four counts — total, valid, expiring soon, without a
certificate — and says when it last measured. A name that comes from the
environment is marked as such and cannot be removed here: it would come back at
the next sync, and a button that does nothing is worse than no button, because
it gets believed once.

2040 tests pass, assets build.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 00:53:12 +02:00
..
Readiness Never tell anyone to delete a catalogue their contracts bill on 2026-07-30 17:30:56 +02:00
AdminArea.php Let the console keep its recovery hostnames without breaking route caching 2026-07-27 06:20:44 +02:00
Bytes.php feat(traffic): meter the monthly allowance, show it, throttle instead of blocking 2026-07-25 23:33:47 +02:00
CompanyProfile.php Quote what a person pays, and tab the settings page 2026-07-29 19:18:10 +02:00
HostEnrolment.php Give the operator one line to copy and three steps around it 2026-07-30 20:40:19 +02:00
HostTakeoverCommand.php Give the downloads a hostname of their own, with two halves 2026-07-30 21:37:47 +02:00
KnownHostnames.php Fill the hostname page from the installation, not from a blank form 2026-07-31 00:53:12 +02:00
LocalTime.php Show times on the operator's clock, keep storing them in UTC 2026-07-27 17:32:21 +02:00
Money.php Make the console's access list reach the proxy, price in euros, and answer errors 2026-07-27 06:51:05 +02:00
Navigation.php Put the page in the navigation, and stop files. handing out the portal 2026-07-30 23:21:15 +02:00
NextcloudOcc.php Fix nine defects in the provisioning pipelines 2026-07-30 01:34:55 +02:00
OfficialDomains.php Always name the host we are being served from, and stop promising a duration 2026-07-29 17:10:06 +02:00
OperatingMode.php Refuse a key that does not belong to the slot it sits in 2026-07-30 17:05:58 +02:00
ProvisioningSettings.php Read the support mailbox into the console 2026-07-29 21:41:29 +02:00
Readiness.php Notice when nobody is picking up the queue 2026-07-30 14:32:09 +02:00
Settings.php Close the data-loss paths the review found in the mailbox takeover 2026-07-28 01:15:50 +02:00
StripeCatalogueMode.php Never tell anyone to delete a catalogue their contracts bill on 2026-07-30 17:30:56 +02:00
StripeWebhookSecret.php Verify webhooks against the secret of the mode we are in 2026-07-30 12:13:55 +02:00