turbot/github_compliance

Query: repo_deletion_limited_to_trusted_users

Usage

powerpipe query github_compliance.query.repo_deletion_limited_to_trusted_users

SQL

with repo_admins as (
select distinct
name_with_owner,
array_agg(user_login) as admins
from
github_my_repository r
join
github_repository_collaborator c
on
r.name_with_owner = c.repository_full_name
and
c.permission = 'ADMIN'
group by
name_with_owner
)
select
-- Required Columns
r.url as resource,
case
when jsonb_array_length(to_jsonb(admins) - $1::text[]) > 0 then 'alarm'
else 'ok'
end as status,
case
when jsonb_array_length(to_jsonb(admins) - $1::text[]) > 2
then concat( 'Repository deletion permission allowed to untrusted users ', to_jsonb(admins) - $1::text[] #>> '{0}', ', ', to_jsonb(admins) - $1::text[] #>> '{1}', ' and ', (jsonb_array_length(to_jsonb(admins) - $1::text[]) - 2)::text, ' more.')
when jsonb_array_length(to_jsonb(admins) - $1::text[]) = 2
then concat('Repository deletion permission allowed to untrusted users ', to_jsonb(admins) - $1::text[] #>> '{0}', ' and ', to_jsonb(admins) - $1::text[] #>> '{1}', '.')
when jsonb_array_length(to_jsonb(admins) - $1::text[]) = 1
then concat('Repository deletion permission allowed to untrusted user ', to_jsonb(admins) - $1::text[] #>> '{0}', '.')
else 'Repository deletion permission limited to trusted users.'
end as reason,
-- Additional Dimensions
r.name_with_owner
from
github_my_repository as r
left join repo_admins as a on r.name_with_owner = a.name_with_owner;

Controls

The query is being used by the following controls: