The new design uses four separate service functions; List, ListPage, ListRefresh and ListRefreshPage. The first two are used during the initial pagination phase and the latter two are used for any subsequent refresh phases.
322 lines
7.6 KiB
Go
322 lines
7.6 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package target
|
|
|
|
const (
|
|
setChangesQuery = `
|
|
with
|
|
set_sources (source_id, type) as (
|
|
-- returns the SET list
|
|
select public_id, type
|
|
from credential_source_all_types
|
|
where public_id in (%s)
|
|
),
|
|
current_sources (source_id, type) as (
|
|
-- returns the current list
|
|
select credential_library_id, 'library'
|
|
from target_credential_library
|
|
where target_id = @target_id
|
|
and credential_purpose = @purpose
|
|
union
|
|
select credential_static_id, 'static'
|
|
from target_static_credential
|
|
where target_id = @target_id
|
|
and credential_purpose = @purpose
|
|
),
|
|
keep_sources (source_id) as (
|
|
-- returns the KEEP list
|
|
select source_id
|
|
from current_sources
|
|
where source_id in (select source_id from set_sources)
|
|
),
|
|
delete_sources (source_id, type) as (
|
|
-- returns the DELETE list
|
|
select source_id, type
|
|
from current_sources
|
|
where source_id not in (select source_id from set_sources)
|
|
),
|
|
insert_sources (source_id, type) as (
|
|
-- returns the ADD list
|
|
select source_id, type
|
|
from set_sources
|
|
where source_id not in (select * from keep_sources)
|
|
),
|
|
final (action, source_id, type) as (
|
|
select 'delete', source_id, type
|
|
from delete_sources
|
|
union
|
|
select 'add', source_id, type
|
|
from insert_sources
|
|
)
|
|
select * from final
|
|
order by action, source_id;
|
|
`
|
|
|
|
targetPublicIdList = `
|
|
select public_id, project_id from target
|
|
%s
|
|
;
|
|
`
|
|
|
|
estimateCountTargets = `
|
|
select sum(reltuples::bigint) as estimate from pg_class where oid in ('target_tcp'::regclass, 'target_ssh'::regclass)
|
|
`
|
|
|
|
listTargetsTemplate = `
|
|
with targets as (
|
|
select public_id
|
|
from target
|
|
-- search condition for applying permissions is constructed
|
|
where %s
|
|
order by create_time desc, public_id asc
|
|
limit %d
|
|
),
|
|
tcp_targets as (
|
|
select *
|
|
from target_tcp
|
|
where public_id in (select public_id from targets)
|
|
),
|
|
ssh_targets as (
|
|
select *
|
|
from target_ssh
|
|
where public_id in (select public_id from targets)
|
|
),
|
|
all_targets as (
|
|
select public_id,
|
|
project_id,
|
|
name,
|
|
description,
|
|
default_port,
|
|
session_max_seconds,
|
|
session_connection_limit,
|
|
version,
|
|
create_time,
|
|
update_time,
|
|
worker_filter,
|
|
egress_worker_filter,
|
|
ingress_worker_filter,
|
|
default_client_port,
|
|
null as storage_bucket_id,
|
|
false as enable_session_recording,
|
|
'tcp' as type
|
|
from tcp_targets
|
|
union
|
|
select public_id,
|
|
project_id,
|
|
name,
|
|
description,
|
|
default_port,
|
|
session_max_seconds,
|
|
session_connection_limit,
|
|
version,
|
|
create_time,
|
|
update_time,
|
|
worker_filter,
|
|
egress_worker_filter,
|
|
ingress_worker_filter,
|
|
default_client_port,
|
|
storage_bucket_id,
|
|
enable_session_recording,
|
|
'ssh' as type
|
|
from ssh_targets
|
|
)
|
|
select *
|
|
from all_targets
|
|
order by create_time desc, public_id asc;
|
|
`
|
|
|
|
listTargetsPageTemplate = `
|
|
with targets as (
|
|
select public_id
|
|
from target
|
|
where (create_time, public_id) < (@last_item_create_time, @last_item_id)
|
|
-- search condition for applying permissions is constructed
|
|
and %s
|
|
order by create_time desc, public_id asc
|
|
limit %d
|
|
),
|
|
tcp_targets as (
|
|
select *
|
|
from target_tcp
|
|
where public_id in (select public_id from targets)
|
|
),
|
|
ssh_targets as (
|
|
select *
|
|
from target_ssh
|
|
where public_id in (select public_id from targets)
|
|
),
|
|
all_targets as (
|
|
select public_id,
|
|
project_id,
|
|
name,
|
|
description,
|
|
default_port,
|
|
session_max_seconds,
|
|
session_connection_limit,
|
|
version,
|
|
create_time,
|
|
update_time,
|
|
worker_filter,
|
|
egress_worker_filter,
|
|
ingress_worker_filter,
|
|
default_client_port,
|
|
null as storage_bucket_id,
|
|
false as enable_session_recording,
|
|
'tcp' as type
|
|
from tcp_targets
|
|
union
|
|
select public_id,
|
|
project_id,
|
|
name,
|
|
description,
|
|
default_port,
|
|
session_max_seconds,
|
|
session_connection_limit,
|
|
version,
|
|
create_time,
|
|
update_time,
|
|
worker_filter,
|
|
egress_worker_filter,
|
|
ingress_worker_filter,
|
|
default_client_port,
|
|
storage_bucket_id,
|
|
enable_session_recording,
|
|
'ssh' as type
|
|
from ssh_targets
|
|
)
|
|
select *
|
|
from all_targets
|
|
order by create_time desc, public_id asc;
|
|
`
|
|
|
|
refreshTargetsTemplate = `
|
|
with targets as (
|
|
select public_id
|
|
from target
|
|
where update_time > @updated_after_time
|
|
-- search condition for applying permissions is constructed
|
|
and %s
|
|
order by update_time desc, public_id asc
|
|
limit %d
|
|
),
|
|
tcp_targets as (
|
|
select *
|
|
from target_tcp
|
|
where public_id in (select public_id from targets)
|
|
),
|
|
ssh_targets as (
|
|
select *
|
|
from target_ssh
|
|
where public_id in (select public_id from targets)
|
|
),
|
|
all_targets as (
|
|
select public_id,
|
|
project_id,
|
|
name,
|
|
description,
|
|
default_port,
|
|
session_max_seconds,
|
|
session_connection_limit,
|
|
version,
|
|
create_time,
|
|
update_time,
|
|
worker_filter,
|
|
egress_worker_filter,
|
|
ingress_worker_filter,
|
|
default_client_port,
|
|
null as storage_bucket_id,
|
|
false as enable_session_recording,
|
|
'tcp' as type
|
|
from tcp_targets
|
|
union
|
|
select public_id,
|
|
project_id,
|
|
name,
|
|
description,
|
|
default_port,
|
|
session_max_seconds,
|
|
session_connection_limit,
|
|
version,
|
|
create_time,
|
|
update_time,
|
|
worker_filter,
|
|
egress_worker_filter,
|
|
ingress_worker_filter,
|
|
default_client_port,
|
|
storage_bucket_id,
|
|
enable_session_recording,
|
|
'ssh' as type
|
|
from ssh_targets
|
|
)
|
|
select *
|
|
from all_targets
|
|
order by update_time desc, public_id asc;
|
|
`
|
|
|
|
refreshTargetsPageTemplate = `
|
|
with targets as (
|
|
select public_id
|
|
from target
|
|
where update_time > @updated_after_time
|
|
and (update_time, public_id) < (@last_item_update_time, @last_item_id)
|
|
-- search condition for applying permissions is constructed
|
|
and %s
|
|
order by update_time desc, public_id asc
|
|
limit %d
|
|
),
|
|
tcp_targets as (
|
|
select *
|
|
from target_tcp
|
|
where public_id in (select public_id from targets)
|
|
),
|
|
ssh_targets as (
|
|
select *
|
|
from target_ssh
|
|
where public_id in (select public_id from targets)
|
|
),
|
|
all_targets as (
|
|
select public_id,
|
|
project_id,
|
|
name,
|
|
description,
|
|
default_port,
|
|
session_max_seconds,
|
|
session_connection_limit,
|
|
version,
|
|
create_time,
|
|
update_time,
|
|
worker_filter,
|
|
egress_worker_filter,
|
|
ingress_worker_filter,
|
|
default_client_port,
|
|
null as storage_bucket_id,
|
|
false as enable_session_recording,
|
|
'tcp' as type
|
|
from tcp_targets
|
|
union
|
|
select public_id,
|
|
project_id,
|
|
name,
|
|
description,
|
|
default_port,
|
|
session_max_seconds,
|
|
session_connection_limit,
|
|
version,
|
|
create_time,
|
|
update_time,
|
|
worker_filter,
|
|
egress_worker_filter,
|
|
ingress_worker_filter,
|
|
default_client_port,
|
|
storage_bucket_id,
|
|
enable_session_recording,
|
|
'ssh' as type
|
|
from ssh_targets
|
|
)
|
|
select *
|
|
from all_targets
|
|
order by update_time desc, public_id asc;
|
|
`
|
|
)
|