Skip to content

Commit

Permalink
feat(schemas): add saml_application_proxies table
Browse files Browse the repository at this point in the history
  • Loading branch information
darcyYe committed Nov 18, 2024
1 parent 9543eb7 commit c1b10ae
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { sql } from '@silverhand/slonik';

import type { AlterationScript } from '../lib/types/alteration.js';

import { applyTableRls, dropTableRls } from './utils/1704934999-tables.js';

const alteration: AlterationScript = {
up: async (pool) => {
await pool.query(sql`
create table saml_application_proxies (
application_id varchar(21) not null
references applications (id) on update cascade on delete cascade,
tenant_id varchar(21) not null
references tenants (id) on update cascade on delete cascade,
name varchar(256) not null,
description text,
attribute_mapping jsonb /* @use SamlAttributeMapping */ not null default '{}'::jsonb,
sp_metadata jsonb /* @use SamlSpMetadata */ not null,
primary key (application_id),
constraint application_type
check (check_application_type(application_id, 'SAML'))
);
create unique index saml_application_proxies__unique_application_id
on saml_application_proxies (application_id);
`);
await applyTableRls(pool, 'saml_application_proxies');
},
down: async (pool) => {
await dropTableRls(pool, 'saml_application_proxies');
await pool.query(sql`
drop table saml_application_proxies;
`);
},
};

export default alteration;
1 change: 1 addition & 0 deletions packages/schemas/src/foundations/jsonb-types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export * from './sso-connector.js';
export * from './applications.js';
export * from './verification-records.js';
export * from './account-centers.js';
export * from './saml-application-proxies.js';

export {
configurableConnectorMetadataGuard,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { type ToZodObject } from '@logto/connector-kit';
import { z } from 'zod';

export type SamlAttributeMapping = Record<string, string>;

export const samlAttributeMappingGuard = z.record(
z.string()
) satisfies z.ZodType<SamlAttributeMapping>;

export enum BindingType {
POST = 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',
REDIRECT = 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
}

export type SamlSpMetadata = {
entityID: string;
acsURL: {
binding: BindingType;
url: string;
};
};

export const samlSpMetadataGuard = z.object({
entityID: z.string(),
acsURL: z.object({
binding: z.nativeEnum(BindingType),
url: z.string(),
}),
}) satisfies ToZodObject<SamlSpMetadata>;
23 changes: 23 additions & 0 deletions packages/schemas/tables/saml_application_proxies.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/* init_order = 2 */

/**
* The SAML application proxy and SAML-type application have a one-to-one correspondence:
* - a SAML-type application can only have one SAML application proxy
* - a SAML application proxy can only proxy one SAML-type application
*/
create table saml_application_proxies (
application_id varchar(21) not null
references applications (id) on update cascade on delete cascade,
tenant_id varchar(21) not null
references tenants (id) on update cascade on delete cascade,
name varchar(256) not null,
description text,
attribute_mapping jsonb /* @use SamlAttributeMapping */ not null default '{}'::jsonb,
sp_metadata jsonb /* @use SamlSpMetadata */ not null,
primary key (application_id),
constraint application_type
check (check_application_type(application_id, 'SAML'))
);

create unique index saml_application_proxies__unique_application_id
on saml_application_proxies (application_id);

0 comments on commit c1b10ae

Please sign in to comment.