25 lines
1.6 KiB
PL/PgSQL
25 lines
1.6 KiB
PL/PgSQL
BEGIN;
|
|
SET ROLE identity_role;
|
|
CREATE TABLE IF NOT EXISTS identity.service_principals (
|
|
principal_id TEXT PRIMARY KEY,
|
|
actor_id TEXT NOT NULL,
|
|
kind TEXT NOT NULL CHECK (kind = 'SERVICE'),
|
|
purpose TEXT NOT NULL,
|
|
synthetic_scope TEXT NOT NULL,
|
|
active BOOLEAN NOT NULL DEFAULT TRUE,
|
|
revision BIGINT NOT NULL DEFAULT 1,
|
|
recorded_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CHECK (principal_id <> '' AND actor_id <> '' AND purpose <> '' AND synthetic_scope <> '' AND revision > 0)
|
|
);
|
|
CREATE UNIQUE INDEX IF NOT EXISTS service_principals_actor_idx ON identity.service_principals(actor_id);
|
|
INSERT INTO identity.service_principals(principal_id, actor_id, kind, purpose, synthetic_scope)
|
|
VALUES ('domovoy-acceptance-harness-principal', 'domovoy-acceptance-harness-actor', 'SERVICE', 'AUTHENTICATE_ACCEPTANCE_HARNESS', 'synthetic-acceptance-scope')
|
|
ON CONFLICT (principal_id) DO NOTHING;
|
|
INSERT INTO identity.actors(actor_id, display_name) VALUES ('domovoy-acceptance-harness-actor', 'Domovoy Acceptance Harness') ON CONFLICT (actor_id) DO NOTHING;
|
|
INSERT INTO identity.principals(principal_id, display_name) VALUES ('domovoy-acceptance-harness-principal', 'Domovoy Acceptance Harness Principal') ON CONFLICT (principal_id) DO NOTHING;
|
|
INSERT INTO identity.principal_bindings(actor_id, principal_id, active) VALUES ('domovoy-acceptance-harness-actor', 'domovoy-acceptance-harness-principal', TRUE) ON CONFLICT (actor_id, principal_id) DO UPDATE SET active=TRUE;
|
|
REVOKE ALL ON identity.service_principals FROM PUBLIC;
|
|
GRANT SELECT ON identity.service_principals TO identity_role;
|
|
RESET ROLE;
|
|
COMMIT;
|