Skip to content
Snippets Groups Projects
Select Git revision
  • main default protected
  • refactor/folder-structure
2 results

create.go

Blame
  • 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
    }