diff --git a/app/Livewire/Security/ApiTokens.php b/app/Livewire/Security/ApiTokens.php index fe68a8ba5..9add0b0ca 100644 --- a/app/Livewire/Security/ApiTokens.php +++ b/app/Livewire/Security/ApiTokens.php @@ -12,10 +12,9 @@ class ApiTokens extends Component public $tokens = []; public bool $viewSensitiveData = false; - public bool $readOnly = true; - public bool $rootAccess = false; + public bool $triggerDeploy = false; public array $permissions = ['read-only']; @@ -62,12 +61,25 @@ class ApiTokens extends Component $this->permissions = ['*']; $this->readOnly = false; $this->viewSensitiveData = false; + $this->triggerDeploy = false; } else { $this->readOnly = true; $this->permissions = ['read-only']; } } + public function updatedTriggerDeploy() + { + if ($this->triggerDeploy) { + $this->permissions[] = 'trigger-deploy'; + $this->permissions = array_diff($this->permissions, ['*']); + $this->rootAccess = false; + } else { + $this->permissions = array_diff($this->permissions, ['trigger-deploy']); + } + $this->makeSureOneIsSelected(); + } + public function makeSureOneIsSelected() { if (count($this->permissions) == 0) { diff --git a/resources/views/livewire/security/api-tokens.blade.php b/resources/views/livewire/security/api-tokens.blade.php index 1bcd64710..a360d4a3b 100644 --- a/resources/views/livewire/security/api-tokens.blade.php +++ b/resources/views/livewire/security/api-tokens.blade.php @@ -39,6 +39,7 @@ + @if (session()->has('token')) diff --git a/routes/api.php b/routes/api.php index b63fde871..05fe4f5e8 100644 --- a/routes/api.php +++ b/routes/api.php @@ -54,7 +54,8 @@ Route::group([ Route::patch('/security/keys/{uuid}', [SecurityController::class, 'update_key'])->middleware([IgnoreReadOnlyApiToken::class]); Route::delete('/security/keys/{uuid}', [SecurityController::class, 'delete_key'])->middleware([IgnoreReadOnlyApiToken::class]); - Route::match(['get', 'post'], '/deploy', [DeployController::class, 'deploy'])->middleware([IgnoreReadOnlyApiToken::class]); + Route::match(['get', 'post'], '/deploy', [DeployController::class, 'deploy']) + ->middleware([IgnoreReadOnlyApiToken::class, 'auth:sanctum', 'ability:trigger-deploy']); Route::get('/deployments', [DeployController::class, 'deployments']); Route::get('/deployments/{uuid}', [DeployController::class, 'deployment_by_uuid']);