name = $u->name ?? ''; $this->email = $u->email ?? ''; $this->totpEnabled = app(TotpService::class)->isEnabled($u); } #[On('2fa-status-changed')] public function refreshTotpStatus(): void { $this->totpEnabled = app(TotpService::class)->isEnabled(Auth::user()); } public function saveProfile(): void { $this->validate([ 'name' => 'required|string|max:100', ]); $u = Auth::user(); $u->name = $this->name; $u->save(); $this->dispatch('toast', type: 'done', badge: 'Profil', title: 'Gespeichert', text: 'Profilname wurde aktualisiert.', duration: 4000); } public function changePassword(): void { if ($this->new_password === '') { $this->addError('new_password', 'Kein neues Passwort eingegeben.'); return; } $this->validate([ 'current_password' => 'required|string', 'new_password' => 'required|string|min:8', 'new_password_confirmation' => 'required|same:new_password', ]); $u = Auth::user(); if (!Hash::check($this->current_password, $u->password)) { $this->addError('current_password', 'Aktuelles Passwort ist falsch.'); return; } $u->password = Hash::make($this->new_password); $u->save(); $this->reset(['current_password', 'new_password', 'new_password_confirmation']); $this->dispatch('toast', type: 'done', badge: 'Profil', title: 'Passwort geändert', text: 'Dein Passwort wurde aktualisiert.', duration: 4000); } public function disableTotp(): void { app(TotpService::class)->disable(Auth::user()); session()->forget('2fa_verified'); $this->totpEnabled = false; $this->dispatch('toast', type: 'done', badge: '2FA', title: 'TOTP deaktiviert', text: 'Zwei-Faktor-Authentifizierung wurde deaktiviert.', duration: 5000); } public function render() { return view('livewire.ui.system.profile-page'); } }