0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2024-12-30 20:33:54 -05:00

feat(schemas): add column protected_app_metadata (#5113)

* feat(schemas): add new application type for protected app

* feat(schemas): add column protected_app_configs
This commit is contained in:
wangsijie 2023-12-19 17:04:14 +08:00 committed by GitHub
parent 7e435c4749
commit e28822997f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 42 additions and 2 deletions

View file

@ -38,6 +38,7 @@ export const mockApplication: Application = {
idTokenTtl: 5000, idTokenTtl: 5000,
refreshTokenTtl: 6_000_000, refreshTokenTtl: 6_000_000,
}, },
protectedAppMetadata: null,
isThirdParty: false, isThirdParty: false,
createdAt: 1_645_334_775_356, createdAt: 1_645_334_775_356,
}; };

View file

@ -20,7 +20,7 @@ export const applicationResponseGuard: typeof Applications.guard = EnvSet.values
.isDevFeaturesEnabled .isDevFeaturesEnabled
? Applications.guard ? Applications.guard
: Applications.guard : Applications.guard
.omit({ isThirdParty: true, type: true }) .omit({ isThirdParty: true, type: true, protectedAppMetadata: true })
.extend({ type: z.nativeEnum(OriginalApplicationType) }); .extend({ type: z.nativeEnum(OriginalApplicationType) });
// @ts-expect-error -- hide the dev feature field from the guard type, but always return the full type to make the api logic simpler // @ts-expect-error -- hide the dev feature field from the guard type, but always return the full type to make the api logic simpler
@ -28,5 +28,5 @@ export const applicationCreateGuard: typeof originalApplicationCreateGuard = Env
.isDevFeaturesEnabled .isDevFeaturesEnabled
? originalApplicationCreateGuard ? originalApplicationCreateGuard
: originalApplicationCreateGuard : originalApplicationCreateGuard
.omit({ isThirdParty: true, type: true }) .omit({ isThirdParty: true, type: true, protectedAppMetadata: true })
.extend({ type: z.nativeEnum(OriginalApplicationType) }); .extend({ type: z.nativeEnum(OriginalApplicationType) });

View file

@ -0,0 +1,18 @@
import { sql } from 'slonik';
import type { AlterationScript } from '../lib/types/alteration.js';
const alteration: AlterationScript = {
up: async (pool) => {
await pool.query(sql`
alter table applications add protected_app_metadata jsonb;
`);
},
down: async (pool) => {
await pool.query(sql`
alter table applications drop protected_app_metadata;
`);
},
};
export default alteration;

View file

@ -0,0 +1,18 @@
import { z } from 'zod';
export const protectedAppMetadataGuard = z.object({
/* The host of the site */
host: z.string(),
/* The origin of the site */
origin: z.string(),
/* Session duration in seconds */
sessionDuration: z.number(),
pageRules: z.array(
z.object({
/* The path pattern (regex) to match */
path: z.string(),
})
),
});
export type ProtectedAppMetadata = z.infer<typeof protectedAppMetadataGuard>;

View file

@ -10,6 +10,7 @@ export * from './sign-in-experience.js';
export * from './sentinel.js'; export * from './sentinel.js';
export * from './users.js'; export * from './users.js';
export * from './sso-connector.js'; export * from './sso-connector.js';
export * from './applications.js';
export { export {
configurableConnectorMetadataGuard, configurableConnectorMetadataGuard,

View file

@ -27,6 +27,7 @@ export const buildDemoAppDataForTenant = (tenantId: string): Application => ({
type: ApplicationType.SPA, type: ApplicationType.SPA,
oidcClientMetadata: { redirectUris: [], postLogoutRedirectUris: [] }, oidcClientMetadata: { redirectUris: [], postLogoutRedirectUris: [] },
customClientMetadata: {}, customClientMetadata: {},
protectedAppMetadata: null,
isThirdParty: false, isThirdParty: false,
createdAt: 0, createdAt: 0,
}); });

View file

@ -12,6 +12,7 @@ create table applications (
type application_type not null, type application_type not null,
oidc_client_metadata jsonb /* @use OidcClientMetadata */ not null, oidc_client_metadata jsonb /* @use OidcClientMetadata */ not null,
custom_client_metadata jsonb /* @use CustomClientMetadata */ not null default '{}'::jsonb, custom_client_metadata jsonb /* @use CustomClientMetadata */ not null default '{}'::jsonb,
protected_app_metadata jsonb /* @use ProtectedAppMetadata */,
is_third_party boolean not null default false, is_third_party boolean not null default false,
created_at timestamptz not null default(now()), created_at timestamptz not null default(now()),
primary key (id) primary key (id)