mailwolt/app/Livewire/Ui/System/Modal/ApiKeyCreateModal.php

69 lines
2.2 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 static function closeModalOnClickAway(): bool { return false; }
public static function closeModalOnEscape(): bool { return false; }
public static function closeModalOnEscapeIsForceful(): bool { return false; }
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->dispatch('openModal',
component: 'ui.system.modal.api-key-show-modal',
arguments: ['plainText' => $token->plainTextToken],
);
}
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,
]);
}
}