user()->currentWorkspace; if (! $workspace) { return redirect()->route('app.workspaces.create'); } $this->authorize('manageTeam', $workspace); $tokens = AccessToken::where('user_id', $request->user()->id) ->where('workspace_id', $workspace->id) ->where('revoked', false) ->personalAccessApiKey() ->latest() ->get() ->map(fn (AccessToken $token) => [ 'id' => $token->id, 'name' => $token->name, 'last_used_at' => $token->last_used_at, 'expires_at' => $token->expires_at, 'created_at' => $token->created_at, ]); return Inertia::render('settings/workspace/ApiKeys', [ 'workspace' => $workspace, 'apiTokens' => $tokens, ]); } public function store(StoreApiKeyRequest $request): RedirectResponse { $workspace = $request->user()->currentWorkspace; if (! $workspace) { return redirect()->route('app.workspaces.create'); } $this->authorize('manageTeam', $workspace); $created = CreateApiKey::execute( $request->user(), $workspace, $request->validated(), ); return back() ->with('flash.success', __('settings.api_keys.flash.created')) ->with('flash.plainToken', $created['plain_token']); } public function destroy(Request $request, string $tokenId): RedirectResponse { $workspace = $request->user()->currentWorkspace; if (! $workspace) { return redirect()->route('app.workspaces.create'); } $this->authorize('manageTeam', $workspace); $token = AccessToken::where('id', $tokenId) ->where('user_id', $request->user()->id) ->where('workspace_id', $workspace->id) ->personalAccessApiKey() ->first(); if (! $token) { abort(Response::HTTP_NOT_FOUND); } $token->forceFill(['revoked' => true])->saveQuietly(); return back()->with('flash.success', __('settings.api_keys.flash.deleted')); } }