Skip to content

Commit e9369c2

Browse files
committed
Validate that no repository uses admin permissions
1 parent c9a1682 commit e9369c2

File tree

1 file changed

+38
-1
lines changed

1 file changed

+38
-1
lines changed

src/validate.rs

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use crate::data::Data;
22
use crate::github::GitHubApi;
3-
use crate::schema::{Bot, Email, MergeBot, Permissions, Team, TeamKind, TeamPeople, ZulipMember};
3+
use crate::schema::{
4+
Bot, Email, MergeBot, Permissions, RepoPermission, Team, TeamKind, TeamPeople, ZulipMember,
5+
};
46
use crate::zulip::ZulipApi;
57
use anyhow::{bail, Error};
68
use log::{error, warn};
@@ -51,6 +53,7 @@ static CHECKS: &[Check<fn(&Data, &mut Vec<String>)>] = checks![
5153
validate_repos,
5254
validate_branch_protections,
5355
validate_member_roles,
56+
validate_admin_access,
5457
validate_website,
5558
];
5659

@@ -1024,6 +1027,40 @@ fn validate_member_roles(data: &Data, errors: &mut Vec<String>) {
10241027
);
10251028
}
10261029

1030+
/// Validate that admin access is not used anywhere
1031+
fn validate_admin_access(data: &Data, errors: &mut Vec<String>) {
1032+
wrapper(data.all_repos(), errors, |repo, errors| {
1033+
wrapper(repo.access.teams.iter(), errors, |(team, permission), _| {
1034+
if let RepoPermission::Admin = permission {
1035+
bail!(
1036+
"Repository {}/{} uses `admin` permission for team `{team}`",
1037+
repo.org,
1038+
repo.name
1039+
);
1040+
} else {
1041+
Ok(())
1042+
}
1043+
});
1044+
wrapper(
1045+
repo.access.individuals.iter(),
1046+
errors,
1047+
|(member, permission), _| {
1048+
if let RepoPermission::Admin = permission {
1049+
bail!(
1050+
"Repository {}/{} uses `admin` permission for member `{member}`",
1051+
repo.org,
1052+
repo.name
1053+
);
1054+
} else {
1055+
Ok(())
1056+
}
1057+
},
1058+
);
1059+
1060+
Ok(())
1061+
});
1062+
}
1063+
10271064
/// We use Fluent ids which are lowercase alphanumeric with hyphens.
10281065
fn ascii_kebab_case(s: &str) -> bool {
10291066
s.chars()

0 commit comments

Comments
 (0)