CluPilotCloud/lang/de
nexxo 7edd88b71c Ein Zugang zur Konsole, dessen Passwort niemand kennt
Bisher erzeugte Settings::inviteStaff() beim Einladen eines
Betreiber-Mitarbeiters ein Passwort und zeigte es dem Inhaber einmal auf dem
Bildschirm, damit er es "sicher weitergibt" -- fuer einen Zugang zur Konsole,
die die ganze Flotte verwaltet. Der Kommentar dort nannte sich selbst eine
Attrappe.

Jetzt geht eine Einladung ohne Passwort hinaus: der Eingeladene bekommt eine
Mail mit einem Link und vergibt sein Passwort selbst, ueber
App\Livewire\Auth\OperatorSetPassword. Niemand -- auch der Inhaber nicht --
kennt je ein fremdes Passwort.

Dafuer brauchte es einen eigenen Weg, den es fuer Betreiber noch nicht gab
(R21: Konsole und Portal teilen keine Identitaet). Ein eigener Broker mit
eigener Tabelle (operator_password_reset_tokens, config/auth.php), eine
eigene Route in der Gast-Gruppe der Konsole (admin.invitation), und
Operator::sendPasswordResetNotification() wirft jetzt, statt Laravels
Vorgabe zu nutzen, die auf die Portalseite verlinkt haette.

Der Einladungslink gilt 72 Stunden -- lang genug fuer ein Wochenende, kurz
genug, dass ein altes Postfach nicht auf Dauer einen Schluessel zur Konsole
haelt. Zwei-Faktor bleibt unberuehrt: die neue Seite meldet niemanden
automatisch an, der Eingeladene durchlaeuft danach die normale Anmeldung
samt ihrer bestehenden Zwei-Faktor-Pruefung. Die Route liegt hinter denselben
Netz- und Hostwaechtern wie der Rest der Konsole (RestrictAdminHost,
RestrictConsoleNetwork), ohne Sonderfall.

OperatorInvitationMail reiht sich in den Versandtakt ein (MailLane::LOCKED,
wie ResetPasswordMail und VerifyEmailMail -- ein Mensch wartet gerade) und
ist damit in der Vorschau- und Versandtakt-Uebersicht der Konsole sichtbar,
statt lautlos in die gedrosselte Spur zu fallen.

Zwei Mutationsproben gegen die tragende Zusicherung durchgefuehrt (Bericht:
.superpowers/sdd/betreiber-einladung-report.md): die erste (durch die
Vorgaengersitzung) hielt fest, dass drei Zusicherungen fallen wuerden, waere
das Konto sofort anmeldbar; die zweite -- das Passwort testweise wieder auf
die Seite gebracht -- faellt exakt an der dafuer gebauten reflektierenden
Pruefung ueber alle oeffentlichen Eigenschaften der Seite.

Suite: 2771 passed (9683 assertions).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 01:50:42 +02:00
..
admin.php Sicht auf die Spuren, und ein Schalter, der die Drossel abstellt 2026-08-03 17:44:29 +02:00
admin_incidents.php Let an incident be deleted, and start measuring whether the hosts answer 2026-07-29 15:16:48 +02:00
admin_settings.php Ein Zugang zur Konsole, dessen Passwort niemand kennt 2026-08-04 01:50:42 +02:00
auth.php Ein Zugang zur Konsole, dessen Passwort niemand kennt 2026-08-04 01:50:42 +02:00
backups.php feat(portal): full sidebar — Cloud, Users, Backups, Invoices, Support 2026-07-25 08:08:33 +02:00
billing.php Der Deckel hielt außerhalb der Transaktion, das Fenster versprach einen Block zu viel 2026-08-01 18:53:00 +02:00
capacity.php Ein angehefteter Host umging die Reservierung 2026-08-01 18:53:11 +02:00
checkout.php Give the order a checkout page, and stop hiding what a year costs 2026-07-30 16:00:08 +02:00
cloud.php Restart a machine, enforce the quota that was sold, end a route that ended 2026-07-29 18:28:28 +02:00
coming_soon.php Say EU, and stop promising to fix somebody else's deleted folder 2026-07-29 14:17:30 +02:00
common.php Recover silently from an expired session, and show a connection banner when offline 2026-07-28 21:36:21 +02:00
customer_detail.php Let an operator correct a customer's details 2026-07-29 23:18:46 +02:00
customer_message.php Show the customer, and write the answers once 2026-07-29 22:37:30 +02:00
dashboard.php Sperren sehen und aufheben: Portalseite fuer den Inhaber, Abschnitte in der Konsole 2026-08-03 15:53:24 +02:00
datacenters.php Let a datacenter code be corrected while nothing depends on it, and say which building 2026-07-28 22:25:21 +02:00
delivery.php Quote what a person pays, and tab the settings page 2026-07-29 19:18:10 +02:00
devices.php Recognise the devices an account signs in from, and warn about a new one 2026-07-28 23:28:34 +02:00
domain.php Serve the custom domain, not just announce it 2026-07-29 16:44:52 +02:00
dormant_mail.php Accept terms instead of a start date, and fix the sender no server accepts 2026-07-30 15:22:35 +02:00
dpa.php Give settings the shape a settings page actually has 2026-07-30 17:59:16 +02:00
dpa_admin.php Stop asking for a signature the law does not want, and lay out the tab 2026-07-30 17:30:55 +02:00
dunning.php Mahnwesen: Tageslauf mit Gebuehrenrechnungen 2026-07-31 22:13:52 +02:00
dunning_mail.php Mahnwesen: die sechs Kundenmails 2026-07-31 22:31:04 +02:00
edit_customer.php Let an operator correct a customer's details 2026-07-29 23:18:46 +02:00
errors.php Refuse a portal login for an address that already belongs to an operator 2026-07-28 14:42:16 +02:00
finance.php Quote what a person pays, and tab the settings page 2026-07-29 19:18:10 +02:00
hosts.php Terminal: das Fenster sagt jetzt selbst, ob die Bruecke laeuft 2026-08-02 22:34:32 +02:00
impersonate.php feat(admin): impersonate customer portal — session login + return banner 2026-07-25 13:46:48 +02:00
inbox.php Read the mailbox password where it actually is, and let the console test it 2026-07-30 13:12:29 +02:00
instances.php Pin the sidebar header and footer so only the nav list scrolls, and shorten two action labels that wrapped 2026-07-28 20:52:12 +02:00
integrations.php Ein Waechter, der aufraeumt — und die vier offenen Punkte aus dem Betrieb 2026-08-03 09:43:33 +02:00
invoice.php Say the same thing to the customer, the register and the bank 2026-07-30 01:30:24 +02:00
invoice_mail.php Send the invoice with the invoice attached 2026-07-29 02:13:41 +02:00
invoices.php Say the same thing to the customer, the register and the bank 2026-07-30 01:30:24 +02:00
invoices_admin.php Write an invoice for work that came off no price list 2026-07-29 20:12:26 +02:00
landing.php Fix-Runde 1/1: Enterprise-Schwelle folgt dem Katalog statt einer festen Zahl 2026-08-01 16:15:59 +02:00
mail.php Put customer instances on their own domain, and say which domains are ours 2026-07-29 16:03:13 +02:00
mail_log.php Keep a register of what was sent, and answer the customer from here 2026-07-29 21:02:36 +02:00
mail_pace.php Ein Zugang zur Konsole, dessen Passwort niemand kennt 2026-08-04 01:50:42 +02:00
mail_preview.php Make mails readable on a phone, and let an operator look at one 2026-07-30 14:50:37 +02:00
mail_settings.php Die Mailseite fragt drei Fragen statt eine Wand zu zeigen 2026-08-03 22:06:50 +02:00
maintenance.php Put every mail in one design, and confirm an order when the money arrives 2026-07-29 00:14:04 +02:00
new_invoice.php Write an invoice for work that came off no price list 2026-07-29 20:12:26 +02:00
open_work.php Offene Punkte: nach Dringlichkeit gruppiert, in der Formensprache der Bereitschaftsseite 2026-08-02 16:35:14 +02:00
operator_invitation.php Ein Zugang zur Konsole, dessen Passwort niemand kennt 2026-08-04 01:50:42 +02:00
order.php Fix the checkout link, and stop the switch moving under the cursor 2026-07-30 16:05:56 +02:00
orders.php Keep the shop window off the portal's front door 2026-07-29 00:26:22 +02:00
payment_problems.php Ein Waechter, der aufraeumt — und die vier offenen Punkte aus dem Betrieb 2026-08-03 09:43:33 +02:00
plans.php Schalter je Paket, ehrliche Statusanzeige, Reste der alten Leiter 2026-08-01 17:53:06 +02:00
provisioning.php Ein Schritt ohne Namen zeigt bei jeder Bestellung seinen Schluessel 2026-08-03 23:57:42 +02:00
proxy.php Fill the hostname page from the installation, not from a blank form 2026-07-31 00:53:12 +02:00
readiness.php Die Bereitschaftsseite meldet eine Spur, die steht 2026-08-03 18:37:20 +02:00
reset_password.php Give people a way back in, and put the URL in English 2026-07-29 16:50:29 +02:00
roles.php Sperren sehen und aufheben: Portalseite fuer den Inhaber, Abschnitte in der Konsole 2026-08-03 15:53:24 +02:00
secrets.php Testergebnis erscheint am Feld statt am Seitenende; DNS-Token bekommt einen Testknopf 2026-07-31 21:26:14 +02:00
security.php fix(security): Aufheben einer Sperre sagt die Wahrheit und wird nachgeholt 2026-08-03 17:28:28 +02:00
sessions.php Show where an account is signed in, and let it sign the other places out 2026-07-28 23:38:17 +02:00
settings.php Give settings the shape a settings page actually has 2026-07-30 17:59:16 +02:00
status.php Let an incident be deleted, and start measuring whether the hosts answer 2026-07-29 15:16:48 +02:00
support.php Editing in modals, an update button that is not gated on a stale reading, and a support page that is real 2026-07-27 17:55:49 +02:00
templates.php Show the customer, and write the answers once 2026-07-29 22:37:30 +02:00
two_factor_setup.php Let a half-finished two-factor enrolment be cancelled, and rework the setup page 2026-07-28 22:25:27 +02:00
updating.php Stop root workers breaking every page, and let the panel be closed 2026-07-29 15:43:54 +02:00
users.php Fuenf geparkte Kleinigkeiten nach der Mitarbeiterverwaltung 2026-08-04 01:09:45 +02:00
verify_email.php Accept terms instead of a start date, and fix the sender no server accepts 2026-07-30 15:22:35 +02:00
vpn.php Release v1.3.84 — VPN-Zugänge nach Personen und Hosts getrennt 2026-08-01 02:34:15 +02:00
withdrawal.php Take the address by field, fix the customer type, ask why they leave 2026-07-30 16:41:32 +02:00