Skip to content

Commit

Permalink
feat: remove user from all teams before deletion
Browse files Browse the repository at this point in the history
Signed-off-by: Janos Miko <[email protected]>
  • Loading branch information
janosmiko committed Jan 24, 2025
1 parent de95988 commit efa94f0
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 2 deletions.
2 changes: 0 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ name: Release

on:
push:
branches:
- main
tags:
- "v*"

Expand Down
46 changes: 46 additions & 0 deletions internal/gitea/gitea.go
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,10 @@ func (c *Client) createUser(user User) error {
func (c *Client) DeleteUser(username string) error {
c.log.Debug().Msgf("Deleting user: %s", username)

if err := c.RemoveUserFromAllTeams(username); err != nil {
return errors.Wrapf(err, "removing user from all teams: %s", username)
}

if _, err := c.client.AdminDeleteUser(username); err != nil {
return errors.Wrapf(err, "deleting user: %s", username)
}
Expand All @@ -382,6 +386,48 @@ func (c *Client) DeleteUser(username string) error {
return nil
}

func (c *Client) RemoveUserFromAllTeams(username string) error {
c.log.Debug().Msgf("Removing user from all teams: %s", username)

orgs, _, err := c.client.ListUserOrgs(username, gitea.ListOrgsOptions{})
if err != nil {
return errors.Wrapf(err, "listing all orgs for user: %s", username)
}

for _, org := range orgs {
teams, _, err := c.client.ListOrgTeams(org.UserName, gitea.ListTeamsOptions{})
if err != nil {
return errors.Wrapf(err, "listing all teams for org: %s", org.UserName)
}

for _, team := range teams {
isTeamMember, err := c.IsTeamMember(username, team.ID)
if err != nil {
return errors.Wrapf(err, "checking if user is a member of team: %s (team-id: %d)", username, team.ID)
}

if isTeamMember {
if _, err := c.client.RemoveTeamMember(team.ID, username); err != nil {
return errors.Wrapf(err, "removing user from team: %s (team-id: %d)", username, team.ID)
}
}
}
}

c.log.Info().Msgf("User removed from teams: %s", username)

return nil
}

func (c *Client) IsTeamMember(username string, teamID int64) (bool, error) {
member, _, err := c.client.GetTeamMember(teamID, username)
if err != nil {
return false, nil
}

return member != nil, nil
}

func (c *Client) ListTeamUsers(teamID int64) (map[string]Account, error) {
var accounts = make(map[string]Account)

Expand Down

0 comments on commit efa94f0

Please sign in to comment.