You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

admin_user_delete.go 2.0KB

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