code.gitea.io/gitea@v1.22.3/cmd/admin_user_delete.go (about) 1 // Copyright 2023 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package cmd 5 6 import ( 7 "errors" 8 "fmt" 9 "strings" 10 11 user_model "code.gitea.io/gitea/models/user" 12 "code.gitea.io/gitea/modules/storage" 13 user_service "code.gitea.io/gitea/services/user" 14 15 "github.com/urfave/cli/v2" 16 ) 17 18 var microcmdUserDelete = &cli.Command{ 19 Name: "delete", 20 Usage: "Delete specific user by id, name or email", 21 Flags: []cli.Flag{ 22 &cli.Int64Flag{ 23 Name: "id", 24 Usage: "ID of user of the user to delete", 25 }, 26 &cli.StringFlag{ 27 Name: "username", 28 Aliases: []string{"u"}, 29 Usage: "Username of the user to delete", 30 }, 31 &cli.StringFlag{ 32 Name: "email", 33 Aliases: []string{"e"}, 34 Usage: "Email of the user to delete", 35 }, 36 &cli.BoolFlag{ 37 Name: "purge", 38 Usage: "Purge user, all their repositories, organizations and comments", 39 }, 40 }, 41 Action: runDeleteUser, 42 } 43 44 func runDeleteUser(c *cli.Context) error { 45 if !c.IsSet("id") && !c.IsSet("username") && !c.IsSet("email") { 46 return errors.New("You must provide the id, username or email of a user to delete") 47 } 48 49 ctx, cancel := installSignals() 50 defer cancel() 51 52 if err := initDB(ctx); err != nil { 53 return err 54 } 55 56 if err := storage.Init(); err != nil { 57 return err 58 } 59 60 var err error 61 var user *user_model.User 62 if c.IsSet("email") { 63 user, err = user_model.GetUserByEmail(ctx, c.String("email")) 64 } else if c.IsSet("username") { 65 user, err = user_model.GetUserByName(ctx, c.String("username")) 66 } else { 67 user, err = user_model.GetUserByID(ctx, c.Int64("id")) 68 } 69 if err != nil { 70 return err 71 } 72 if c.IsSet("username") && user.LowerName != strings.ToLower(strings.TrimSpace(c.String("username"))) { 73 return fmt.Errorf("The user %s who has email %s does not match the provided username %s", user.Name, c.String("email"), c.String("username")) 74 } 75 76 if c.IsSet("id") && user.ID != c.Int64("id") { 77 return fmt.Errorf("The user %s does not match the provided id %d", user.Name, c.Int64("id")) 78 } 79 80 return user_service.DeleteUser(ctx, user, c.Bool("purge")) 81 }