93 lines
3.4 KiB
PHP
93 lines
3.4 KiB
PHP
<?php
|
||
|
||
namespace App\Livewire\Ui\System;
|
||
|
||
use App\Models\Setting;
|
||
use Livewire\Component;
|
||
|
||
class SettingsForm extends Component
|
||
{
|
||
// Tab-Steuerung (optional per Alpine, hier aber auch als Prop)
|
||
public string $tab = 'general';
|
||
|
||
// Allgemein
|
||
public string $instance_name = ''; // readonly
|
||
public string $locale = 'de';
|
||
public string $timezone = 'Europe/Berlin';
|
||
public ?int $session_timeout = 120; // Minuten
|
||
|
||
// Domains & SSL
|
||
public string $ui_domain = '';
|
||
public string $mail_domain = '';
|
||
public string $webmail_domain = '';
|
||
public bool $ssl_auto = true;
|
||
|
||
// Sicherheit
|
||
public bool $twofa_enabled = false;
|
||
public ?int $rate_limit = 5; // Versuche / Minute
|
||
public ?int $password_min = 10;
|
||
|
||
protected function rules(): array
|
||
{
|
||
return [
|
||
'locale' => 'required|string|max:10',
|
||
'timezone' => 'required|string|max:64',
|
||
'session_timeout' => 'nullable|integer|min:5|max:1440',
|
||
|
||
'ui_domain' => 'nullable|string|max:190',
|
||
'mail_domain' => 'nullable|string|max:190',
|
||
'webmail_domain' => 'nullable|string|max:190',
|
||
'ssl_auto' => 'boolean',
|
||
|
||
'twofa_enabled' => 'boolean',
|
||
'rate_limit' => 'nullable|integer|min:1|max:100',
|
||
'password_min' => 'nullable|integer|min:6|max:128',
|
||
];
|
||
}
|
||
|
||
public function mount(): void
|
||
{
|
||
// Anzeige-Name der Instanz – lies was du hast (z.B. config('app.name'))
|
||
$this->instance_name = (string) (config('app.name') ?? 'MailWolt');
|
||
|
||
// Laden aus unserem einfachen Store
|
||
$this->locale = Setting::get('locale', $this->locale);
|
||
$this->timezone = Setting::get('timezone', $this->timezone);
|
||
$this->session_timeout = (int) Setting::get('session_timeout', $this->session_timeout);
|
||
|
||
$this->ui_domain = Setting::get('ui_domain', $this->ui_domain);
|
||
$this->mail_domain = Setting::get('mail_domain', $this->mail_domain);
|
||
$this->webmail_domain = Setting::get('webmail_domain', $this->webmail_domain);
|
||
$this->ssl_auto = (bool) Setting::get('ssl_auto', $this->ssl_auto);
|
||
|
||
$this->twofa_enabled = (bool) Setting::get('twofa_enabled', $this->twofa_enabled);
|
||
$this->rate_limit = (int) Setting::get('rate_limit', $this->rate_limit);
|
||
$this->password_min = (int) Setting::get('password_min', $this->password_min);
|
||
}
|
||
|
||
public function save(): void
|
||
{
|
||
$this->validate();
|
||
|
||
Setting::put('locale', $this->locale);
|
||
Setting::put('timezone', $this->timezone);
|
||
Setting::put('session_timeout', $this->session_timeout);
|
||
|
||
Setting::put('ui_domain', $this->ui_domain);
|
||
Setting::put('mail_domain', $this->mail_domain);
|
||
Setting::put('webmail_domain', $this->webmail_domain);
|
||
Setting::put('ssl_auto', $this->ssl_auto);
|
||
|
||
Setting::put('twofa_enabled', $this->twofa_enabled);
|
||
Setting::put('rate_limit', $this->rate_limit);
|
||
Setting::put('password_min', $this->password_min);
|
||
|
||
$this->dispatch('toast', type: 'success', message: 'Einstellungen gespeichert'); // optional
|
||
}
|
||
|
||
public function render()
|
||
{
|
||
return view('livewire.ui.system.settings-form');
|
||
}
|
||
}
|