1
0
mirror of https://github.com/pocket-id/pocket-id.git synced 2026-03-24 03:55:06 +00:00

feat: add support for SCIM provisioning (#1182)

This commit is contained in:
Elias Schneider
2026-01-02 17:54:20 +01:00
committed by GitHub
parent e4a8ca476c
commit 579cfdc678
37 changed files with 1963 additions and 34 deletions

View File

@@ -4,6 +4,7 @@
import { LucideChevronDown, type Icon as IconType } from '@lucide/svelte';
import { onMount, type Snippet } from 'svelte';
import { slide } from 'svelte/transition';
import FormattedMessage from './formatted-message.svelte';
import { Button } from './ui/button';
import * as Card from './ui/card';
@@ -70,7 +71,7 @@
{title}
</Card.Title>
{#if description}
<Card.Description>{description}</Card.Description>
<Card.Description><FormattedMessage m={description} /></Card.Description>
{/if}
</div>
{#if button}

View File

@@ -10,6 +10,7 @@ import type {
OidcClientWithAllowedUserGroupsCount,
OidcDeviceCodeInfo
} from '$lib/types/oidc.type';
import type { ScimServiceProvider } from '$lib/types/scim.type';
import { cachedOidcClientLogo } from '$lib/utils/cached-image-util';
import APIService from './api-service';
@@ -127,6 +128,11 @@ class OidcService extends APIService {
revokeOwnAuthorizedClient = async (clientId: string) => {
await this.api.delete(`/oidc/users/me/authorized-clients/${clientId}`);
};
getScimResourceProvider = async (clientId: string) => {
const res = await this.api.get(`/oidc/clients/${clientId}/scim-service-provider`);
return res.data as ScimServiceProvider;
};
}
export default OidcService;

View File

@@ -0,0 +1,27 @@
import type { ScimServiceProvider, ScimServiceProviderCreate } from '$lib/types/scim.type';
import APIService from './api-service';
class ScimService extends APIService {
syncServiceProvider = async (serviceProviderId: string) => {
return await this.api.post(`/scim/service-provider/${serviceProviderId}/sync`);
};
createServiceProvider = async (serviceProvider: ScimServiceProviderCreate) => {
return (await this.api.post('/scim/service-provider', serviceProvider))
.data as ScimServiceProvider;
};
updateServiceProvider = async (
serviceProviderId: string,
serviceProvider: ScimServiceProviderCreate
) => {
return (await this.api.put(`/scim/service-provider/${serviceProviderId}`, serviceProvider))
.data as ScimServiceProvider;
};
deleteServiceProvider = async (serviceProviderId: string) => {
await this.api.delete(`/scim/service-provider/${serviceProviderId}`);
};
}
export default ScimService;

View File

@@ -0,0 +1,14 @@
import type { OidcClientMetaData } from './oidc.type';
export type ScimServiceProvider = {
id: string;
endpoint: string;
token?: string;
lastSyncedAt?: string;
createdAt: string;
oidcClient: OidcClientMetaData;
};
export type ScimServiceProviderCreate = Pick<ScimServiceProvider, 'endpoint' | 'token'> & {
oidcClientId: string;
};