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  }