65 lines
1.8 KiB
PHP
65 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Ui\System\Modal;
|
|
|
|
use Illuminate\Support\Facades\Auth;
|
|
use LivewireUI\Modal\ModalComponent;
|
|
|
|
class ApiKeyCreateModal extends ModalComponent
|
|
{
|
|
public string $name = '';
|
|
public bool $sandbox = false;
|
|
public array $selected = [];
|
|
|
|
public static array $availableScopes = [
|
|
'mailboxes:read' => 'Mailboxen lesen',
|
|
'mailboxes:write' => 'Mailboxen schreiben',
|
|
'aliases:read' => 'Aliases lesen',
|
|
'aliases:write' => 'Aliases schreiben',
|
|
'domains:read' => 'Domains lesen',
|
|
'domains:write' => 'Domains schreiben',
|
|
];
|
|
|
|
public function create(): void
|
|
{
|
|
$this->validate([
|
|
'name' => 'required|string|max:80',
|
|
'selected' => 'required|array|min:1',
|
|
'selected.*' => 'in:' . implode(',', array_keys(self::$availableScopes)),
|
|
], [
|
|
'selected.required' => 'Bitte mindestens einen Scope auswählen.',
|
|
'selected.min' => 'Bitte mindestens einen Scope auswählen.',
|
|
]);
|
|
|
|
$token = Auth::user()->createToken(
|
|
$this->name,
|
|
$this->selected,
|
|
);
|
|
|
|
$pat = $token->accessToken;
|
|
if ($this->sandbox) {
|
|
$pat->sandbox = true;
|
|
$pat->save();
|
|
}
|
|
|
|
$this->dispatch('token-created', plainText: $token->plainTextToken);
|
|
$this->closeModal();
|
|
}
|
|
|
|
public function toggleAll(): void
|
|
{
|
|
if (count($this->selected) === count(self::$availableScopes)) {
|
|
$this->selected = [];
|
|
} else {
|
|
$this->selected = array_keys(self::$availableScopes);
|
|
}
|
|
}
|
|
|
|
public function render()
|
|
{
|
|
return view('livewire.ui.system.modal.api-key-create-modal', [
|
|
'scopes' => self::$availableScopes,
|
|
]);
|
|
}
|
|
}
|