CluPilotCloud/lang/en
Claude a58faf3f85
tests / pest (push) Successful in 8m56s Details
tests / assets (push) Successful in 20s Details
tests / release (push) Successful in 4s Details
Manage the Stripe key from the console, behind a password and a test
Changing a key meant a shell, a file edit and a cache rebuild — and the person
who owns the Stripe account is not necessarily the person who owns the server.

Two gates, not one. The capability decides who may open the page; every operator
has console.view, and that must not mean "can read the payment key". The
password decides whether this SESSION may see or change anything, because the
realistic threat is not a stranger but an unlocked machine, and a session is
exactly what that hands over. Both are re-checked server-side on every action —
a Livewire action is reachable by anyone who can post to /livewire/update.

The value is stored encrypted under a key of its own, SECRETS_KEY, and the vault
refuses to work without it rather than falling back to APP_KEY: rotating APP_KEY
is ordinary maintenance and would otherwise destroy every stored credential,
discovered when Stripe stops answering. It is read where it is used, not
overlaid onto config at boot — an overlay adds a query to every request
including the public site, and leaves queue workers holding whatever was true
when they started. It is never shown again, only outlined, and never enters a
Livewire property that would carry it to the browser and back in the snapshot.

A registry, not an env editor: a form that can set any environment variable is a
privilege-escalation primitive, and one bad value bricks the installation with
no way back through that same form.

The test button is the part that matters. It reports which Stripe account the
key belongs to, whether it is LIVE or test — the most expensive mistake here is
pasting one where the other belongs, and both look identical in a form — and
which webhook endpoints exist with the events each subscribes to. A key can be
perfectly valid while the endpoint listens for the wrong five events, and
nothing fails until a payment goes unrecorded.

The webhook signing secret deliberately stays in .env. It is read on every
incoming payment event; in the database, a database problem becomes silently
failing signature checks.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 09:01:16 +02:00
..
admin.php Manage the Stripe key from the console, behind a password and a test 2026-07-27 09:01:16 +02:00
admin_settings.php Let people change their own password, and a location be switched off while editing it 2026-07-27 07:49:07 +02:00
auth.php Land a sign-in where it was performed, not always in the customer portal 2026-07-27 06:15:16 +02:00
backups.php feat(portal): full sidebar — Cloud, Users, Backups, Invoices, Support 2026-07-25 08:08:33 +02:00
billing.php feat(billing): a proof register, and modules frozen at their booked price 2026-07-26 13:07:34 +02:00
cloud.php fix(portal): cloud status labels for all instance states; scale storage curve into the quota 2026-07-25 19:16:16 +02:00
coming_soon.php feat(site): switch the public website and portal off from the console 2026-07-25 23:10:27 +02:00
common.php feat(admin): VPN access management with live peer state 2026-07-25 21:38:12 +02:00
dashboard.php feat(traffic): meter the monthly allowance, show it, throttle instead of blocking 2026-07-25 23:33:47 +02:00
datacenters.php Let people change their own password, and a location be switched off while editing it 2026-07-27 07:49:07 +02:00
errors.php Make the console's access list reach the proxy, price in euros, and answer errors 2026-07-27 06:51:05 +02:00
hosts.php feat(admin): host reserve edit + maintenance drain; customer suspend/reactivate 2026-07-25 14:30:21 +02:00
impersonate.php feat(admin): impersonate customer portal — session login + return banner 2026-07-25 13:46:48 +02:00
instances.php feat(admin): administrator access to a customer's Nextcloud 2026-07-26 05:30:59 +02:00
invoices.php feat(portal): full sidebar — Cloud, Users, Backups, Invoices, Support 2026-07-25 08:08:33 +02:00
maintenance.php fix(portal): move notices into the header, so the page stops scrolling twice 2026-07-26 00:13:20 +02:00
plans.php Make the console's access list reach the proxy, price in euros, and answer errors 2026-07-27 06:51:05 +02:00
provisioning.php chore(engine-b): provisioning step/mail i18n (DE+EN) + demo seed data 2026-07-25 11:59:06 +02:00
secrets.php Manage the Stripe key from the console, behind a password and a test 2026-07-27 09:01:16 +02:00
settings.php Give customers two-factor, and stop every button on the settings page reacting at once 2026-07-27 08:48:34 +02:00
status.php Make the console's access list reach the proxy, price in euros, and answer errors 2026-07-27 06:51:05 +02:00
support.php feat(portal): full sidebar — Cloud, Users, Backups, Invoices, Support 2026-07-25 08:08:33 +02:00
updating.php feat(ops): update page, automatic 419 recovery, CI workflow 2026-07-26 00:58:27 +02:00
users.php fix(portal): no silent no-ops without a customer; maintenance visible per instance; maintenance form redesign 2026-07-25 19:10:44 +02:00
vpn.php feat(vpn): explain a missing download, and offer a way out 2026-07-26 01:20:04 +02:00