@@ -373,6 +373,10 @@ func (c *Client) createUser(user User) error {
373373func (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+
385431func (c * Client ) ListTeamUsers (teamID int64 ) (map [string ]Account , error ) {
386432 var accounts = make (map [string ]Account )
387433
0 commit comments