oidcService = $oidcService; $this->configResolver = $configResolver; $this->connectedAppService = $connectedAppService; $this->logoUploader = $logoUploader; } public function requiresPkce(Client $client): bool { return $this->configResolver->requiresPkce($client); } public function mount(int $id): void { $this->authorize(AppPermissionEnum::Read->value); $this->appId = $id; $this->loadAppData(); } public function loadAppData(): void { $this->app = ConnectedApp::with(['protocol', 'status', 'roles'])->findOrFail($this->appId); $this->passportClient = $this->oidcService->getPassportClient($this->app); $this->signOutUris = $this->oidcService->getSignOutUris($this->app); } public function generateNewSecret(): void { $this->authorize(AppPermissionEnum::Update->value); if (!$this->passportClient) { $this->error('No corresponding Passport Client found to update.'); return; } $this->attempt( action: function () { $plainSecret = $this->oidcService->generateNewSecret($this->passportClient); $this->newSecretPlain = $plainSecret; $this->success('A new client secret has been generated! Make sure to copy it now.'); $this->loadAppData(); }, successMessage: 'New client secret generated successfully!', showSuccess: false ); } public function changeStatus(string $statusName): void { $this->authorize(AppPermissionEnum::Update->value); $this->attempt( action: function () use ($statusName) { $statusId = ConnectionStatus::where('name', $statusName)->firstOrFail()->id; $request = new ConnectAppRequest( name: $this->app->name, connectionProtocolId: $this->app->connection_protocol_id, connectionProviderId: $this->app->connection_provider_id, slug: $this->app->slug, connectionStatusId: $statusId, settings: $this->app->settings, logo: $this->app->logo, ); $this->connectedAppService->update($this->app->id, $request); $this->loadAppData(); }, successMessage: 'Application status updated successfully!' ); } public function goBack(): void { $this->redirectRoute('apps.index', navigate: true); } public function openEditGeneralModal(): void { $this->editName = $this->app->name; $this->editLogo = null; $this->editGeneralModal = true; } public function saveGeneralInfo(): void { $this->authorize(AppPermissionEnum::Update->value); $this->validate([ 'editName' => 'required|string|max:255', 'editLogo' => 'nullable|image|max:2048', ]); $this->attempt( action: function () { $logoPath = $this->editLogo ? $this->logoUploader->store($this->editLogo) : $this->app->logo; $request = new ConnectAppRequest( name: $this->editName, connectionProtocolId: $this->app->connection_protocol_id, connectionProviderId: $this->app->connection_provider_id, slug: \Illuminate\Support\Str::slug($this->editName), connectionStatusId: $this->app->connection_status_id, settings: $this->app->settings, logo: $logoPath, ); $this->connectedAppService->update($this->app->id, $request); if ($this->passportClient && $this->passportClient->name !== $this->editName) { $this->passportClient->name = $this->editName; $this->passportClient->save(); } $this->editGeneralModal = false; $this->success('Application updated successfully!'); $this->loadAppData(); } ); } public function startEditRedirects(): void { $clientUris = $this->passportClient->redirect_uris ?? []; $this->editSignOutUris = $this->signOutUris; $this->editSignInUris = array_values(array_filter( $clientUris, fn($uri) => !in_array($uri, $this->editSignOutUris, true) )); $this->editRedirectsMode = true; } public function cancelEditRedirects(): void { $this->editRedirectsMode = false; } public function saveRedirectUris(): void { $this->authorize(AppPermissionEnum::Update->value); if (!$this->passportClient) { $this->error('No corresponding Passport Client found to update.'); return; } $signInUris = array_values(array_filter(array_map('trim', $this->editSignInUris))); $signOutUris = array_values(array_filter(array_map('trim', $this->editSignOutUris))); $this->attempt( action: function () use ($signInUris, $signOutUris) { $this->oidcService->updateRedirectUris($this->app, $this->passportClient, $signInUris, $signOutUris); $this->editRedirectsMode = false; $this->success('Redirect URIs updated successfully!'); $this->loadAppData(); } ); } }; ?>
Protocol: {{ strtoupper($app->protocol->name) }}
| Creation date | Secret | Status |
|---|---|---|
| {{ $passportClient->updated_at?->format('M j, Y H:i:s') ?? 'N/A' }} | •••••••••••••••••••••••••••••••••••••••• | {{ !$passportClient->revoked ? 'Active' : 'Revoked' }} |
| No secrets available | ||
| Role Name | Priority | Access Type |
|---|---|---|
| {{ $role->name }} | {{ $role->priority }} | SSO Access |
| No specific roles assigned. Accessible by everyone depending on user access setting. | ||
Allows the application to fetch ID tokens for authenticating users.
Allows reading default profile fields like name, picture, and locale.
Grants access to the user's primary email address.
Allows requesting refresh tokens to maintain access offline.