2021-05-04 08:41:04 -04:00
-- Copyright (c) HashiCorp, Inc.
-- SPDX-License-Identifier: BUSL-1.1
2023-02-02 17:15:17 -08:00
2021-05-04 08:41:04 -04:00
begin ;
-- auth_oidc_account_claim_map entries are the optional claim maps from custom
-- claims to the standard claims of sub, name and email. There can be 0 or more
-- for each parent oidc auth method.
create table auth_oidc_account_claim_map (
create_time wt_timestamp ,
oidc_method_id wt_public_id
constraint auth_oidc_method_fkey
references auth_oidc_method ( public_id )
on delete cascade
on update cascade ,
from_claim text not null
constraint from_claim_must_not_be_empty
check ( length ( trim ( from_claim )) > 0 )
constraint from_claim_must_be_less_than_1024_chars
check ( length ( trim ( from_claim )) < 1024 ),
to_claim text not null
constraint to_claim_valid_values
check ( to_claim in ( 'sub' , 'name' , 'email' )), -- intentionally case-sensitive matching
primary key ( oidc_method_id , to_claim )
);
comment on table auth_oidc_account_claim_map is
2022-11-15 10:26:26 -08:00
'auth_oidc_account_claim_map entries are the optional claim maps from custom claims to the standard claims of sub, name and email. There can be 0 or more for each parent oidc auth method.' ;
2021-05-04 08:41:04 -04:00
2022-08-08 18:17:57 -04:00
create trigger default_create_time_column before insert on auth_oidc_account_claim_map
2021-05-04 08:41:04 -04:00
for each row execute procedure default_create_time ();
2022-08-08 18:17:57 -04:00
create trigger immutable_columns before update on auth_oidc_account_claim_map
2021-05-04 08:41:04 -04:00
for each row execute procedure immutable_columns ( 'oidc_method_id' , 'from_claim' , 'to_claim' , 'create_time' );
-- we will drop the oidc_auth_method_with_value_obj view, so we can recreate it
-- and add the oidc claim's scopes to the returned set.
drop view oidc_auth_method_with_value_obj ;
-- oidc_auth_method_with_value_obj is useful for reading an oidc auth method
-- with its associated value objects (algs, auds, certs, claims scopes and
-- account claim maps) as columns with | delimited values. The use of the
-- postgres string_agg(...) to aggregate the value objects into a column works
-- because we are only pulling in one column from the associated tables and that
-- value is part of the primary key and unique. This view will make things like
-- recursive listing of oidc auth methods fairly straightforward to implement
-- for the oidc repo. The view also includes an is_primary_auth_method bool
2022-12-08 12:40:14 -06:00
-- Recreated in 56/02_add_data_key_foreign_key_references.up.sql
2021-05-04 08:41:04 -04:00
create view oidc_auth_method_with_value_obj as
select
case when s . primary_auth_method_id is not null then
true
else false end
as is_primary_auth_method ,
am . public_id ,
am . scope_id ,
am . name ,
am . description ,
am . create_time ,
am . update_time ,
am . version ,
am . state ,
am . api_url ,
am . disable_discovered_config_validation ,
am . issuer ,
am . client_id ,
am . client_secret ,
am . client_secret_hmac ,
am . key_id ,
am . max_age ,
-- the string_agg(..) column will be null if there are no associated value objects
string_agg ( distinct alg . signing_alg_name , '|' ) as algs ,
string_agg ( distinct aud . aud_claim , '|' ) as auds ,
string_agg ( distinct cert . certificate , '|' ) as certs ,
string_agg ( distinct cs . scope , '|' ) as claims_scopes ,
string_agg ( distinct concat_ws ( '=' , acm . from_claim , acm . to_claim ), '|' ) as account_claim_maps
from
auth_oidc_method am
left outer join iam_scope s on am . public_id = s . primary_auth_method_id
left outer join auth_oidc_signing_alg alg on am . public_id = alg . oidc_method_id
left outer join auth_oidc_aud_claim aud on am . public_id = aud . oidc_method_id
left outer join auth_oidc_certificate cert on am . public_id = cert . oidc_method_id
left outer join auth_oidc_scope cs on am . public_id = cs . oidc_method_id
left outer join auth_oidc_account_claim_map acm on am . public_id = acm . oidc_method_id
group by am . public_id , is_primary_auth_method ; -- there can be only one public_id + is_primary_auth_method, so group by isn't a problem.
comment on view oidc_auth_method_with_value_obj is
2022-11-15 10:26:26 -08:00
'oidc auth method with its associated value objects (algs, auds, certs, scopes) as columns with | delimited values' ;
2021-05-04 08:41:04 -04:00
2022-08-08 18:17:57 -04:00
commit ;