100 lines
2.8 KiB
PHP
100 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Ui\System;
|
|
|
|
use App\Services\TotpService;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Livewire\Attributes\Layout;
|
|
use Livewire\Attributes\On;
|
|
use Livewire\Attributes\Title;
|
|
use Livewire\Component;
|
|
|
|
#[Layout('layouts.dvx')]
|
|
#[Title('Profil · Mailwolt')]
|
|
class ProfilePage extends Component
|
|
{
|
|
public string $name = '';
|
|
public string $email = '';
|
|
|
|
public string $current_password = '';
|
|
public string $new_password = '';
|
|
public string $new_password_confirmation = '';
|
|
|
|
public bool $totpEnabled = false;
|
|
|
|
public function mount(): void
|
|
{
|
|
$u = Auth::user();
|
|
$this->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');
|
|
}
|
|
}
|