From 5d9504687a0591a2455ac28b5353abbf605003b5 Mon Sep 17 00:00:00 2001 From: mahesh bhatiya Date: Sun, 29 Jun 2025 16:00:53 +0530 Subject: [PATCH] feat(cli): add user delete command with support for flags like --remove-home - Added a new CLI command: `delete-user` to remove system users - Supports optional flags such as `--remove-home` to delete the user's home directory - Displays success and error messages for missing mail spool or home directory - Ensures clean user deletion with minimal error output --- cmd/delete_user.go | 56 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 cmd/delete_user.go diff --git a/cmd/delete_user.go b/cmd/delete_user.go new file mode 100644 index 0000000..d2e1a0a --- /dev/null +++ b/cmd/delete_user.go @@ -0,0 +1,56 @@ +package cmd + +import ( + "fmt" + "os" + "os/user" + + "github.com/spf13/cobra" + "stackroost/internal" + "stackroost/internal/logger" +) + +var deleteUserCmd = &cobra.Command{ + Use: "delete-user", + Short: "Delete a system user and optionally remove their home directory", + Run: func(cmd *cobra.Command, args []string) { + username, _ := cmd.Flags().GetString("user") + removeHome, _ := cmd.Flags().GetBool("remove-home") + + if internal.IsNilOrEmpty(username) { + logger.Error("Please provide a username using --user") + os.Exit(1) + } + + // Check if user exists + _, err := user.Lookup(username) + if err != nil { + logger.Warn(fmt.Sprintf("User '%s' does not exist", username)) + return + } + + logger.Info(fmt.Sprintf("Deleting user: %s", username)) + + // Build command args + cmdArgs := []string{"userdel"} + if removeHome { + cmdArgs = append(cmdArgs, "-r") + } + cmdArgs = append(cmdArgs, username) + + // Execute command + if err := internal.RunCommand("sudo", cmdArgs...); err != nil { + logger.Error(fmt.Sprintf("Failed to delete user %s: %v", username, err)) + os.Exit(1) + } + + logger.Success(fmt.Sprintf("User '%s' deleted", username)) + }, +} + +func init() { + rootCmd.AddCommand(deleteUserCmd) + deleteUserCmd.Flags().String("user", "", "Username to delete") + deleteUserCmd.Flags().Bool("remove-home", false, "Remove the user's home directory") + deleteUserCmd.MarkFlagRequired("user") +}