This adds a trigger and function to ensure that an auth token fact is created when a new auth token is created with the 'token issued' status.
82 lines
3.5 KiB
PL/PgSQL
82 lines
3.5 KiB
PL/PgSQL
-- Copyright (c) HashiCorp, Inc.
|
|
-- SPDX-License-Identifier: BUSL-1.1
|
|
|
|
begin;
|
|
select plan(4);
|
|
|
|
select wtt_load('widgets', 'iam', 'kms');
|
|
|
|
-- Create a user dimension for corresponding auth token's user.
|
|
insert into wh_user_dimension (
|
|
user_id, user_name, user_description,
|
|
auth_account_id, auth_account_type, auth_account_name, auth_account_description,
|
|
auth_method_id, auth_method_type, auth_method_name, auth_method_description,
|
|
user_organization_id, user_organization_name, user_organization_description,
|
|
current_row_indicator,
|
|
row_effective_time, row_expiration_time,
|
|
auth_method_external_id, auth_account_external_id, auth_account_full_name, auth_account_email
|
|
) values (
|
|
'u_____user1', 'None', 'None',
|
|
'a______acc1', 'None', 'None', 'None',
|
|
'am______am1', 'None', 'None', 'None',
|
|
'o______org1', 'None', 'None',
|
|
'current',
|
|
now(), 'infinity'::timestamptz,
|
|
'None', 'None', 'None', 'None'
|
|
);
|
|
|
|
-- Create auth method and account to use for making auth tokens.
|
|
insert into auth_password_conf
|
|
(password_method_id, private_id)
|
|
values
|
|
('apm___widget', 'apmc__widget');
|
|
insert into auth_password_method
|
|
(scope_id, public_id, password_conf_id, name)
|
|
values
|
|
('o_____widget', 'apm___widget', 'apmc__widget', 'Widget Auth Password');
|
|
insert into auth_password_account
|
|
(auth_method_id, public_id, login_name)
|
|
values
|
|
('apm___widget', 'apa___walter', 'walter');
|
|
update auth_account set iam_user_id = 'u_____walter' where public_id = 'apa___walter';
|
|
|
|
-- should start with no facts for this user.
|
|
select is(count(*), 0::bigint)
|
|
from wh_auth_token_accumulating_fact
|
|
where user_id = 'u_____walter';
|
|
|
|
-- Insert with status 'auth token pending' should not create a auth token fact.
|
|
insert into auth_token
|
|
(key_id, auth_account_id, public_id, token, status)
|
|
values
|
|
('kdkv___widget', 'apa___walter', 'tok___walter1', 'tok___walter1'::bytea, 'auth token pending');
|
|
select is(count(*), 0::bigint) from wh_auth_token_accumulating_fact where user_id = 'u_____walter';
|
|
|
|
-- Insert an auth token wuth the 'token issued' status.
|
|
insert into auth_token
|
|
(key_id, auth_account_id, public_id, token, status)
|
|
values
|
|
('kdkv___widget', 'apa___walter', 'tok___walter2', 'tok___walter2'::bytea, 'token issued');
|
|
|
|
-- should have one fact for this user.
|
|
select is(count(*), 1::bigint)
|
|
from wh_auth_token_accumulating_fact
|
|
where user_id = 'u_____walter';
|
|
select is(
|
|
wh_auth_token_accumulating_fact.*,
|
|
row('tok___walter2',
|
|
'u_____walter', (select key from wh_user_dimension where user_id = 'u_____walter'),
|
|
wh_date_key(now()), wh_time_key(now()), now(),
|
|
-1, -1, 'infinity'::timestamptz,
|
|
wh_date_key(now()), wh_time_key(now()), now(),
|
|
tstzrange(now(), now(), '[]'),
|
|
tstzrange(now(), 'infinity'::timestamptz, '[]'),
|
|
1
|
|
)::wh_auth_token_accumulating_fact
|
|
)
|
|
from wh_auth_token_accumulating_fact
|
|
where user_id = 'u_____walter';
|
|
|
|
select * from finish();
|
|
rollback;
|