Skip to content

Commit 1fe74da

Browse files
committed
Formatting
1 parent 6cd22e3 commit 1fe74da

File tree

3 files changed

+90
-22
lines changed

3 files changed

+90
-22
lines changed

manage-sec-team.py

Lines changed: 80 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ def add_args(parser) -> None:
3333
help="GitHub API URL (https://github-hostname-here/api/v3/ for GHES, EMU or data residency)",
3434
)
3535
parser.add_argument(
36-
"--token-file", required=False, help="GitHub Personal Access Token file (or use GITHUB_TOKEN)"
36+
"--token-file",
37+
required=False,
38+
help="GitHub Personal Access Token file (or use GITHUB_TOKEN)",
3739
)
3840
parser.add_argument(
3941
"--org-list", default="all_orgs.csv", help="CSV file of organizations"
@@ -42,8 +44,14 @@ def add_args(parser) -> None:
4244
"--sec-team-name", default="security-managers", help="Security team name"
4345
)
4446
parser.add_argument("--sec-team-members", nargs="*", help="Security team members")
45-
parser.add_argument("--sec-team-members-file", required=False, help="Security team members file")
46-
parser.add_argument("--legacy", action="store_true", help="Use legacy API endpoints to manage the security managers")
47+
parser.add_argument(
48+
"--sec-team-members-file", required=False, help="Security team members file"
49+
)
50+
parser.add_argument(
51+
"--legacy",
52+
action="store_true",
53+
help="Use legacy API endpoints to manage the security managers",
54+
)
4755
parser.add_argument(
4856
"--debug",
4957
"-d",
@@ -53,22 +61,36 @@ def add_args(parser) -> None:
5361

5462

5563
def make_security_managers_team(
56-
org_name: str, sec_team_name: str, api_url: str, headers: dict[str, str], legacy=False
64+
org_name: str,
65+
sec_team_name: str,
66+
api_url: str,
67+
headers: dict[str, str],
68+
legacy=False,
5769
) -> None:
5870
"""Create or update the security managers team in the specified organization."""
5971
security_manager_role_id: str | None = None
6072

6173
if not legacy:
62-
org_roles: dict[str, Any] = organizations.list_org_roles(api_url, headers, org_name)
74+
org_roles: dict[str, Any] = organizations.list_org_roles(
75+
api_url, headers, org_name
76+
)
6377

6478
# Check if the "security manager" role exists
6579
if "roles" not in org_roles:
6680
LOG.error("⨯ Malformed response from GitHub API")
6781
return
6882

69-
security_manager_role_id_list = [role["id"] for role in org_roles["roles"] if role["name"] == "security_manager"]
83+
security_manager_role_id_list = [
84+
role["id"]
85+
for role in org_roles["roles"]
86+
if role["name"] == "security_manager"
87+
]
7088
if not security_manager_role_id_list:
71-
LOG.error("⨯ Organization {} does not have a security manager role".format(org_name))
89+
LOG.error(
90+
"⨯ Organization {} does not have a security manager role".format(
91+
org_name
92+
)
93+
)
7294
return
7395
security_manager_role_id = security_manager_role_id_list[0]
7496

@@ -87,13 +109,33 @@ def make_security_managers_team(
87109
# Update that team to have the "security manager" role
88110
try:
89111
# only update it if the team does not already have the role
90-
if not teams.has_team_role(api_url, headers, org_name, sec_team_name, security_manager_role_id, legacy=legacy):
91-
teams.change_team_role(api_url, headers, org_name, sec_team_name, security_manager_role_id, legacy=legacy)
112+
if not teams.has_team_role(
113+
api_url,
114+
headers,
115+
org_name,
116+
sec_team_name,
117+
security_manager_role_id,
118+
legacy=legacy,
119+
):
120+
teams.change_team_role(
121+
api_url,
122+
headers,
123+
org_name,
124+
sec_team_name,
125+
security_manager_role_id,
126+
legacy=legacy,
127+
)
92128
LOG.info(
93-
"✓ Team {} updated as a security manager for {}".format(sec_team_name, org_name)
129+
"✓ Team {} updated as a security manager for {}".format(
130+
sec_team_name, org_name
131+
)
94132
)
95133
else:
96-
LOG.debug("✓ Team {} already has the security manager role for {}".format(sec_team_name, org_name))
134+
LOG.debug(
135+
"✓ Team {} already has the security manager role for {}".format(
136+
sec_team_name, org_name
137+
)
138+
)
97139
except Exception as e:
98140
LOG.error("⨯ Failed to update team {}: {}".format(sec_team_name, e))
99141
if LOG.getEffectiveLevel() == logging.DEBUG:
@@ -117,7 +159,11 @@ def add_security_managers_to_team(
117159
try:
118160
organizations.add_org_user(api_url, headers, org_name, username)
119161
except Exception as e:
120-
LOG.error("⨯ Failed to add user {} to org {}: {}".format(username, org_name, e))
162+
LOG.error(
163+
"⨯ Failed to add user {} to org {}: {}".format(
164+
username, org_name, e
165+
)
166+
)
121167
return
122168

123169
# Get the list of team members, adding the missing ones to the team and removing the extra ones
@@ -131,18 +177,30 @@ def add_security_managers_to_team(
131177
api_url, headers, org_name, sec_team_name, username
132178
)
133179
except Exception as e:
134-
LOG.error("⨯ Failed to remove user {} from team {}: {}".format(username, sec_team_name, e))
180+
LOG.error(
181+
"⨯ Failed to remove user {} from team {}: {}".format(
182+
username, sec_team_name, e
183+
)
184+
)
135185
return
136186
for username in sec_team_members:
137187
if username not in team_members_list:
138188
LOG.info("Adding {} to {}".format(username, sec_team_name))
139189
try:
140-
teams.add_team_member(api_url, headers, org_name, sec_team_name, username)
190+
teams.add_team_member(
191+
api_url, headers, org_name, sec_team_name, username
192+
)
141193
except Exception as e:
142-
LOG.error("⨯ Failed to add user {} to team {}: {}".format(username, sec_team_name, e))
194+
LOG.error(
195+
"⨯ Failed to add user {} to team {}: {}".format(
196+
username, sec_team_name, e
197+
)
198+
)
143199
return
144200
else:
145-
LOG.debug("✓ User {} is already a member of {}".format(username, sec_team_name))
201+
LOG.debug(
202+
"✓ User {} is already a member of {}".format(username, sec_team_name)
203+
)
146204

147205

148206
def main() -> None:
@@ -174,7 +232,9 @@ def main() -> None:
174232
elif args.sec_team_members:
175233
sec_team_members = args.sec_team_members
176234
else:
177-
LOG.error("⨯ Please provide either --sec-team-members or --sec-team-members-file")
235+
LOG.error(
236+
"⨯ Please provide either --sec-team-members or --sec-team-members-file"
237+
)
178238
return
179239

180240
# Set up the headers
@@ -186,7 +246,9 @@ def main() -> None:
186246
for org in orgs:
187247
org_name = org["login"]
188248

189-
make_security_managers_team(org_name, args.sec_team_name, args.api_url, headers, legacy=args.legacy)
249+
make_security_managers_team(
250+
org_name, args.sec_team_name, args.api_url, headers, legacy=args.legacy
251+
)
190252
add_security_managers_to_team(
191253
org_name, args.sec_team_name, sec_team_members, args.api_url, headers
192254
)

src/organizations.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,4 +201,4 @@ def list_org_roles(api_endpoint, headers, org):
201201
headers=add_request_headers(headers),
202202
)
203203
response.raise_for_status()
204-
return response.json()
204+
return response.json()

src/teams.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,22 +54,28 @@ def create_team(api_endpoint, headers, org, team_slug):
5454

5555

5656
# Change that security manager team's role to "security manager"
57-
def change_team_role(api_endpoint, headers, org, team_slug, security_manager_role_id=None, legacy=False):
57+
def change_team_role(
58+
api_endpoint, headers, org, team_slug, security_manager_role_id=None, legacy=False
59+
):
5860
"""
5961
Change the role of a team in an organization to "security manager"
6062
"""
6163
if legacy:
6264
response = requests.put(
6365
api_endpoint
64-
+ "/orgs/{}/security-managers/teams/{}".format(quote(org), quote(team_slug)),
66+
+ "/orgs/{}/security-managers/teams/{}".format(
67+
quote(org), quote(team_slug)
68+
),
6569
headers=add_request_headers(headers),
6670
)
6771
response.raise_for_status()
6872
else:
6973
# /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}
7074
response = requests.put(
7175
api_endpoint
72-
+ "/orgs/{}/organization-roles/teams/{}/{}".format(quote(org), quote(team_slug), security_manager_role_id),
76+
+ "/orgs/{}/organization-roles/teams/{}/{}".format(
77+
quote(org), quote(team_slug), security_manager_role_id
78+
),
7379
headers=add_request_headers(headers),
7480
)
7581
response.raise_for_status()

0 commit comments

Comments
 (0)