* feat (auth/ldap): add Repo support for max page size and deref aliases (#3670) * chore: update cap/ldap dependency This latest version of cap/ldap adds support for MaxPageSize and DerefAliases * feat (auth/ldap): add MaxPageSize and DerefAliases to storage proto * feat (api/authmethods): add new ldap fields. Add support for maximum_page_size and dereference_aliases * feat (auth/ldap): schema changes to support new LDAP attributes * feat (auth/ldap): add Repo support for max page size and deref aliases * feat (handlers/ldap): add support for new fields (#3674) Added API support for new ldap fields: MaximumPageSize and DereferenceAliases * chore: add CHANGELOG entry for new api auth ldap fields
126 lines
5.5 KiB
PL/PgSQL
126 lines
5.5 KiB
PL/PgSQL
-- Copyright (c) HashiCorp, Inc.
|
|
-- SPDX-License-Identifier: BUSL-1.1
|
|
|
|
begin;
|
|
|
|
alter table auth_ldap_method
|
|
add column maximum_page_size int not null default 0
|
|
constraint maximum_page_size_greater_or_equal_to_zero
|
|
check(
|
|
maximum_page_size >= 0
|
|
);
|
|
|
|
create table auth_ldap_deref_aliases_enm (
|
|
name text primary key
|
|
constraint only_predefined_deref_aliases_allowed
|
|
check (
|
|
name in (
|
|
'NeverDerefAliases',
|
|
'DerefInSearching',
|
|
'DerefFindingBaseObj',
|
|
'DerefAlways'
|
|
)
|
|
)
|
|
);
|
|
comment on table auth_ldap_deref_aliases_enm is
|
|
'auth_ldap_deref_alias_enm is an enumeration table for ldap deref aliases.'
|
|
'It contains rows for representing the NeverDerefAliases, DerefInSearching, '
|
|
'DerefFindingBaseObj, and DerefAlways deref aliasing.';
|
|
|
|
insert into auth_ldap_deref_aliases_enm (name)
|
|
values
|
|
('NeverDerefAliases'),
|
|
('DerefInSearching'),
|
|
('DerefFindingBaseObj'),
|
|
('DerefAlways');
|
|
|
|
create table auth_ldap_deref_aliases (
|
|
create_time wt_timestamp,
|
|
ldap_method_id wt_public_id primary key
|
|
constraint auth_ldap_method_fkey
|
|
references auth_ldap_method (public_id)
|
|
on delete cascade
|
|
on update cascade,
|
|
dereference_aliases text not null
|
|
constraint auth_ldap_deref_aliases_enm_fkey
|
|
references auth_ldap_deref_aliases_enm (name)
|
|
on delete cascade
|
|
on update cascade
|
|
);
|
|
comment on table auth_ldap_deref_aliases is
|
|
'auth_ldap_deref_aliases are optional and specify how Boundary should handle '
|
|
'dereferencing aliases durning LDAP searches';
|
|
|
|
-- replaces view from 65/01_ldap.up.sql
|
|
drop view ldap_auth_method_with_value_obj;
|
|
-- ldap_auth_method_with_value_obj is useful for reading an ldap auth method
|
|
-- with its associated value objects (urls, certs, search config, etc). The use
|
|
-- of the postgres string_agg(...) to aggregate the url and cert 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 ldap auth methods fairly
|
|
-- straightforward to implement for the ldap repo. The view also includes an
|
|
-- is_primary_auth_method bool
|
|
create view ldap_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.start_tls,
|
|
am.insecure_tls,
|
|
am.discover_dn,
|
|
am.anon_group_search,
|
|
am.upn_domain,
|
|
am.enable_groups,
|
|
am.use_token_groups,
|
|
am.maximum_page_size,
|
|
-- the string_agg(..) column will be null if there are no associated value objects
|
|
string_agg(distinct url.url, '|') as urls,
|
|
string_agg(distinct cert.certificate, '|') as certs,
|
|
string_agg(distinct concat_ws('=', aam.from_attribute, aam.to_attribute), '|') as account_attribute_map,
|
|
|
|
-- the rest of the fields are zero to one relationships that are stored in
|
|
-- related tables. Since we're outer joining with these tables, we need to
|
|
-- either add them to the group by, use an aggregating func, or handle
|
|
-- multiple rows returning for each auth method. I've chosen to just use
|
|
-- string_agg(...)
|
|
string_agg(distinct uc.user_dn, '|') as user_dn,
|
|
string_agg(distinct uc.user_attr, '|') as user_attr,
|
|
string_agg(distinct uc.user_filter, '|') as user_filter,
|
|
string_agg(distinct gc.group_dn, '|') as group_dn,
|
|
string_agg(distinct gc.group_attr, '|') as group_attr,
|
|
string_agg(distinct gc.group_filter, '|') as group_filter,
|
|
string_agg(distinct cc.certificate_key, '|') as client_certificate_key,
|
|
string_agg(distinct cc.certificate_key_hmac, '|') as client_certificate_key_hmac,
|
|
string_agg(distinct cc.key_id, '|') as client_certificate_key_id,
|
|
string_agg(distinct cc.certificate, '|') as client_certificate_cert,
|
|
string_agg(distinct bc.dn, '|') as bind_dn,
|
|
string_agg(distinct bc.password, '|') as bind_password,
|
|
string_agg(distinct bc.password_hmac, '|') as bind_password_hmac,
|
|
string_agg(distinct bc.key_id, '|') as bind_password_key_id,
|
|
string_agg(distinct df.dereference_aliases, '|') as dereference_aliases
|
|
from
|
|
auth_ldap_method am
|
|
left outer join iam_scope s on am.public_id = s.primary_auth_method_id
|
|
left outer join auth_ldap_url url on am.public_id = url.ldap_method_id
|
|
left outer join auth_ldap_certificate cert on am.public_id = cert.ldap_method_id
|
|
left outer join auth_ldap_account_attribute_map aam on am.public_id = aam.ldap_method_id
|
|
left outer join auth_ldap_user_entry_search uc on am.public_id = uc.ldap_method_id
|
|
left outer join auth_ldap_group_entry_search gc on am.public_id = gc.ldap_method_id
|
|
left outer join auth_ldap_client_certificate cc on am.public_id = cc.ldap_method_id
|
|
left outer join auth_ldap_bind_credential bc on am.public_id = bc.ldap_method_id
|
|
left outer join auth_ldap_deref_aliases df on am.public_id = df.ldap_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 ldap_auth_method_with_value_obj is
|
|
'ldap auth method with its associated value objects (urls, certs, search config, etc)';
|
|
|
|
commit; |