mirror of
https://github.com/pocket-id/pocket-id.git
synced 2026-07-15 21:48:13 +03:00
fix: INTERNAL_APP_URL not reflected in UI URLs
This commit is contained in:
@@ -22,6 +22,15 @@ export type OidcClientCredentials = {
|
|||||||
federatedIdentities: OidcClientFederatedIdentity[];
|
federatedIdentities: OidcClientFederatedIdentity[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type OidcDiscoveryConfiguration = {
|
||||||
|
issuer: string;
|
||||||
|
authorization_endpoint: string;
|
||||||
|
token_endpoint: string;
|
||||||
|
userinfo_endpoint: string;
|
||||||
|
end_session_endpoint: string;
|
||||||
|
jwks_uri: string;
|
||||||
|
};
|
||||||
|
|
||||||
export type OidcClient = OidcClientMetaData & {
|
export type OidcClient = OidcClientMetaData & {
|
||||||
callbackURLs: string[];
|
callbackURLs: string[];
|
||||||
logoutCallbackURLs: string[];
|
logoutCallbackURLs: string[];
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { beforeNavigate } from '$app/navigation';
|
import { beforeNavigate } from '$app/navigation';
|
||||||
import { page } from '$app/state';
|
|
||||||
import { openConfirmDialog } from '$lib/components/confirm-dialog';
|
import { openConfirmDialog } from '$lib/components/confirm-dialog';
|
||||||
import CopyToClipboard from '$lib/components/copy-to-clipboard.svelte';
|
import CopyToClipboard from '$lib/components/copy-to-clipboard.svelte';
|
||||||
import FormattedMessage from '$lib/components/formatted-message.svelte';
|
import FormattedMessage from '$lib/components/formatted-message.svelte';
|
||||||
@@ -47,13 +46,13 @@
|
|||||||
const backNavigation = backNavigate('/settings/admin/oidc-clients');
|
const backNavigation = backNavigate('/settings/admin/oidc-clients');
|
||||||
|
|
||||||
const setupDetails = $state({
|
const setupDetails = $state({
|
||||||
[m.issuer_url()]: `https://${page.url.host}`,
|
[m.issuer_url()]: data.oidcConfiguration.issuer,
|
||||||
[m.authorization_url()]: `https://${page.url.host}/authorize`,
|
[m.authorization_url()]: data.oidcConfiguration.authorization_endpoint,
|
||||||
[m.oidc_discovery_url()]: `https://${page.url.host}/.well-known/openid-configuration`,
|
[m.oidc_discovery_url()]: `${data.oidcConfiguration.issuer}/.well-known/openid-configuration`,
|
||||||
[m.token_url()]: `https://${page.url.host}/api/oidc/token`,
|
[m.token_url()]: data.oidcConfiguration.token_endpoint,
|
||||||
[m.userinfo_url()]: `https://${page.url.host}/api/oidc/userinfo`,
|
[m.userinfo_url()]: data.oidcConfiguration.userinfo_endpoint,
|
||||||
[m.logout_url()]: `https://${page.url.host}/api/oidc/end-session`,
|
[m.logout_url()]: data.oidcConfiguration.end_session_endpoint,
|
||||||
[m.certificate_url()]: `https://${page.url.host}/.well-known/jwks.json`,
|
[m.certificate_url()]: data.oidcConfiguration.jwks_uri,
|
||||||
[m.pkce()]: client.pkceEnabled ? m.enabled() : m.disabled(),
|
[m.pkce()]: client.pkceEnabled ? m.enabled() : m.disabled(),
|
||||||
[m.requires_reauthentication()]: client.requiresReauthentication ? m.enabled() : m.disabled(),
|
[m.requires_reauthentication()]: client.requiresReauthentication ? m.enabled() : m.disabled(),
|
||||||
[m.requires_pushed_authorization_requests()]: client.requiresPushedAuthorizationRequests
|
[m.requires_pushed_authorization_requests()]: client.requiresPushedAuthorizationRequests
|
||||||
|
|||||||
@@ -1,16 +1,28 @@
|
|||||||
import OidcService from '$lib/services/oidc-service';
|
import OidcService from '$lib/services/oidc-service';
|
||||||
|
import type { OidcDiscoveryConfiguration } from '$lib/types/oidc.type';
|
||||||
import type { PageLoad } from './$types';
|
import type { PageLoad } from './$types';
|
||||||
|
|
||||||
export const load: PageLoad = async ({ params }) => {
|
export const load: PageLoad = async ({ fetch, params }) => {
|
||||||
const oidcService = new OidcService();
|
const oidcService = new OidcService();
|
||||||
|
|
||||||
const client = await oidcService.getClient(params.id);
|
const clientPromise = oidcService.getClient(params.id);
|
||||||
const scimServiceProvider = await oidcService
|
const scimServiceProviderPromise = oidcService
|
||||||
.getScimResourceProvider(params.id)
|
.getScimResourceProvider(params.id)
|
||||||
.then((p) => p)
|
.then((p) => p)
|
||||||
.catch(() => undefined);
|
.catch(() => undefined);
|
||||||
|
const oidcConfigurationPromise = fetch('/.well-known/openid-configuration').then(
|
||||||
|
(response) => response.json() as Promise<OidcDiscoveryConfiguration>
|
||||||
|
);
|
||||||
|
|
||||||
|
const [client, scimServiceProvider, oidcConfiguration] = await Promise.all([
|
||||||
|
clientPromise,
|
||||||
|
scimServiceProviderPromise,
|
||||||
|
oidcConfigurationPromise
|
||||||
|
]);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
client,
|
client,
|
||||||
scimServiceProvider
|
scimServiceProvider,
|
||||||
|
oidcConfiguration
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -89,6 +89,27 @@ test('Edit OIDC client', async ({ page }) => {
|
|||||||
.then((res) => expect.soft(res.status()).toBe(200));
|
.then((res) => expect.soft(res.status()).toBe(200));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('Displays OIDC client endpoints from discovery configuration', async ({ page }) => {
|
||||||
|
const oidcConfiguration = {
|
||||||
|
issuer: 'https://id.example.com',
|
||||||
|
authorization_endpoint: 'https://id.example.com/authorize',
|
||||||
|
token_endpoint: 'http://pocket-id:1411/api/oidc/token',
|
||||||
|
userinfo_endpoint: 'http://pocket-id:1411/api/oidc/userinfo',
|
||||||
|
end_session_endpoint: 'https://id.example.com/api/oidc/end-session',
|
||||||
|
jwks_uri: 'http://pocket-id:1411/.well-known/jwks.json'
|
||||||
|
};
|
||||||
|
|
||||||
|
await page.route('**/.well-known/openid-configuration', async (route) => {
|
||||||
|
await route.fulfill({ json: oidcConfiguration });
|
||||||
|
});
|
||||||
|
await page.goto(`/settings/admin/oidc-clients/${oidcClients.nextcloud.id}`);
|
||||||
|
await page.getByRole('button', { name: 'Show more details' }).click();
|
||||||
|
|
||||||
|
await expect(page.getByText(oidcConfiguration.token_endpoint, { exact: true })).toBeVisible();
|
||||||
|
await expect(page.getByText(oidcConfiguration.userinfo_endpoint, { exact: true })).toBeVisible();
|
||||||
|
await expect(page.getByText(oidcConfiguration.jwks_uri, { exact: true })).toBeVisible();
|
||||||
|
});
|
||||||
|
|
||||||
test('Create new OIDC client secret', async ({ page }) => {
|
test('Create new OIDC client secret', async ({ page }) => {
|
||||||
const oidcClient = oidcClients.nextcloud;
|
const oidcClient = oidcClients.nextcloud;
|
||||||
await page.goto(`/settings/admin/oidc-clients/${oidcClient.id}`);
|
await page.goto(`/settings/admin/oidc-clients/${oidcClient.id}`);
|
||||||
|
|||||||
Reference in New Issue
Block a user