Select Git revision
-
Theo S Schult authoredTheo S Schult authored
create.go 3.04 KiB
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)")
CreateCmd.Flags().StringP("status", "a", "Free", "User status (Blocked/Free)")
// 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
}
userStatus, err := cmd.Flags().GetString("status")
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]"),
Status: userStatus,
}
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
}