status, self::ELIGIBLE, true); } public function mount(string $uuid): void { $this->uuid = $uuid; $this->name = Host::query()->where('uuid', $uuid)->value('name') ?? ''; } /** * Ein Modal ist ohne die Route-Middleware der Seite erreichbar (R20) und * prüft die Berechtigung deshalb selbst — hier besonders, weil in der * Antwort ein privater WireGuard-Schlüssel steht. */ public function issue(): void { $this->authorize('hosts.manage'); $host = Host::query()->where('uuid', $this->uuid)->firstOrFail(); // Der Knopf steht nur bei passendem Zustand — aber ein Modal, das offen // blieb, während der Host aktiv wurde, ruft diese Methode trotzdem, und // eine Livewire-Methode ist ohnehin von außen aufrufbar. Die // Sichtbarkeit eines Knopfes ist keine Prüfung (Codex P1): sonst // tauschte das hier den Schlüssel einer laufenden Maschine und schnitte // sie aus dem Tunnel. if (! self::eligible($host)) { $this->refusal = __('hosts.reissue.not_eligible'); return; } // Dieselbe Prüfung wie in der Ansicht, aus demselben Grund (Codex P2). // Sonst wird ein gültiger Code entwertet und dafür eine Zeile // ausgegeben, der die Tunnel-Angaben fehlen — genau die kaputte Zeile, // vor der die Warnung daneben steht. if (HostTakeoverCommand::missingSettings() !== []) { $this->refusal = __('hosts.takeover.missing_title'); return; } $this->refusal = null; $this->command = HostTakeoverCommand::for($host, HostEnrolment::issueWithKeys($host)); } public function render() { return view('livewire.admin.reissue-takeover', [ 'missingSettings' => HostTakeoverCommand::missingSettings(), ]); } }