package user import ( "bufio" "fmt" "os" "strings" "github.com/spf13/cobra" "gitlab.c3sl.ufpr.br/tss24/useradm/model" ) var CreateCmd = &cobra.Command{ Use: "create", Short: "Create new user", RunE: createUserFunc, } func init() { // Possible Flags CreateCmd.Flags().StringP("grr", "r", "", "User GRR, required for ini type") CreateCmd.Flags().StringP("type", "t", "ini", "Type of auto-generated login: ini, first or last") CreateCmd.Flags().StringP("path", "w", "", "Path to webdir (e.g. path/login)") CreateCmd.Flags().StringP("name", "n", "", "User full name (use quotes for spaces)") CreateCmd.Flags().StringP("login", "l", "", "User login name (auto-generated if empty)") CreateCmd.Flags().StringP("group", "g", "", "User initial group") CreateCmd.Flags().StringP("shell", "s", "/bin/bash", "Full path to shell ") CreateCmd.Flags().StringP("homedir", "d", "", "Home directory path (/home/group/login if empty)") CreateCmd.Flags().StringP("password", "p", "", "User password (auto-generated if empty)") // Required Flags CreateCmd.MarkFlagRequired("name") CreateCmd.MarkFlagRequired("type") CreateCmd.MarkFlagRequired("group") CreateCmd.Flags().BoolP("confirm", "y", false, "Skip confirmation prompt") } func createUserFunc(cmd *cobra.Command, args []string) error { confirm, err := cmd.Flags().GetBool("confirm") if err != nil { return err } userName, err := cmd.Flags().GetString("name") if err != nil { return err } userType, err := cmd.Flags().GetString("type") if err != nil { return err } userGroup, err := cmd.Flags().GetString("group") if err != nil { return err } userGRR, err := cmd.Flags().GetString("grr") if err != nil { return err } userPath, err := cmd.Flags().GetString("path") if err != nil { return err } userLogin, err := cmd.Flags().GetString("login") if err != nil { return err } userShell, err := cmd.Flags().GetString("shell") if err != nil { return err } userHomedir, err := cmd.Flags().GetString("homedir") if err != nil { return err } userPassword, err := cmd.Flags().GetString("password") if err != nil { return err } user := model.User{ Name: userName, Ltype: userType, Group: userGroup, GRR: userGRR, Path: userPath, Login: ifThenElse(userLogin != "", userLogin, "[auto-generate]"), Shell: userShell, Homedir: userHomedir, Password: ifThenElse(userPassword != "", "[set]", "[auto-generate]"), } fmt.Println(user.ToString()) if !confirm { fmt.Print("Proceed with user creation? [y/N] ") reader := bufio.NewReader(os.Stdin) response, _ := reader.ReadString('\n') if strings.TrimSpace(strings.ToLower(response)) != "y" { fmt.Fprintln(os.Stderr, "Aborted.") os.Exit(1) } } fmt.Println("Done!") return nil } func ifThenElse(condition bool, a string, b string) string { if condition { return a } return b }