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:
@@ -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}
|
||||
|
||||
@@ -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;
|
||||
|
||||
27
frontend/src/lib/services/scim-service.ts
Normal file
27
frontend/src/lib/services/scim-service.ts
Normal 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;
|
||||
14
frontend/src/lib/types/scim.type.ts
Normal file
14
frontend/src/lib/types/scim.type.ts
Normal 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;
|
||||
};
|
||||
Reference in New Issue
Block a user