@@ -373,6 +373,10 @@ func (c *Client) createUser(user User) error {
373
373
func (c * Client ) DeleteUser (username string ) error {
374
374
c .log .Debug ().Msgf ("Deleting user: %s" , username )
375
375
376
+ if err := c .RemoveUserFromAllTeams (username ); err != nil {
377
+ return errors .Wrapf (err , "removing user from all teams: %s" , username )
378
+ }
379
+
376
380
if _ , err := c .client .AdminDeleteUser (username ); err != nil {
377
381
return errors .Wrapf (err , "deleting user: %s" , username )
378
382
}
@@ -382,6 +386,48 @@ func (c *Client) DeleteUser(username string) error {
382
386
return nil
383
387
}
384
388
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
+
385
431
func (c * Client ) ListTeamUsers (teamID int64 ) (map [string ]Account , error ) {
386
432
var accounts = make (map [string ]Account )
387
433
0 commit comments