Skip to content

Commit efa94f0

Browse files
committed
feat: remove user from all teams before deletion
Signed-off-by: Janos Miko <[email protected]>
1 parent de95988 commit efa94f0

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
lines changed

Diff for: .github/workflows/release.yml

-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ name: Release
22

33
on:
44
push:
5-
branches:
6-
- main
75
tags:
86
- "v*"
97

Diff for: internal/gitea/gitea.go

+46
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,10 @@ func (c *Client) createUser(user User) error {
373373
func (c *Client) DeleteUser(username string) error {
374374
c.log.Debug().Msgf("Deleting user: %s", username)
375375

376+
if err := c.RemoveUserFromAllTeams(username); err != nil {
377+
return errors.Wrapf(err, "removing user from all teams: %s", username)
378+
}
379+
376380
if _, err := c.client.AdminDeleteUser(username); err != nil {
377381
return errors.Wrapf(err, "deleting user: %s", username)
378382
}
@@ -382,6 +386,48 @@ func (c *Client) DeleteUser(username string) error {
382386
return nil
383387
}
384388

389+
func (c *Client) RemoveUserFromAllTeams(username string) error {
390+
c.log.Debug().Msgf("Removing user from all teams: %s", username)
391+
392+
orgs, _, err := c.client.ListUserOrgs(username, gitea.ListOrgsOptions{})
393+
if err != nil {
394+
return errors.Wrapf(err, "listing all orgs for user: %s", username)
395+
}
396+
397+
for _, org := range orgs {
398+
teams, _, err := c.client.ListOrgTeams(org.UserName, gitea.ListTeamsOptions{})
399+
if err != nil {
400+
return errors.Wrapf(err, "listing all teams for org: %s", org.UserName)
401+
}
402+
403+
for _, team := range teams {
404+
isTeamMember, err := c.IsTeamMember(username, team.ID)
405+
if err != nil {
406+
return errors.Wrapf(err, "checking if user is a member of team: %s (team-id: %d)", username, team.ID)
407+
}
408+
409+
if isTeamMember {
410+
if _, err := c.client.RemoveTeamMember(team.ID, username); err != nil {
411+
return errors.Wrapf(err, "removing user from team: %s (team-id: %d)", username, team.ID)
412+
}
413+
}
414+
}
415+
}
416+
417+
c.log.Info().Msgf("User removed from teams: %s", username)
418+
419+
return nil
420+
}
421+
422+
func (c *Client) IsTeamMember(username string, teamID int64) (bool, error) {
423+
member, _, err := c.client.GetTeamMember(teamID, username)
424+
if err != nil {
425+
return false, nil
426+
}
427+
428+
return member != nil, nil
429+
}
430+
385431
func (c *Client) ListTeamUsers(teamID int64) (map[string]Account, error) {
386432
var accounts = make(map[string]Account)
387433

0 commit comments

Comments
 (0)