/* Copyright © 2025 Jake jake.young.dev@gmail.com */ package server import ( "bufio" "encoding/base64" "fmt" "os" "strconv" "code.jakeyoungdev.com/jake/mctl/database" "code.jakeyoungdev.com/jake/mctl/model" "github.com/spf13/cobra" "golang.org/x/term" ) var addCmd = &cobra.Command{ Use: "add", Example: "mctl server add", Short: "Saves a new server configuration", Long: `Saves server address, alias, port, and password to the database.`, Run: func(cmd *cobra.Command, args []string) { scanner := bufio.NewScanner(os.Stdin) //get server information var cfgname string fmt.Printf("Server alias: ") if scanner.Scan() { cfgname = scanner.Text() } var cfgaddress string fmt.Printf("Server address: ") if scanner.Scan() { cfgaddress = scanner.Text() } var cfgport string fmt.Printf("Server port: ") if scanner.Scan() { cfgport = scanner.Text() } //read in password using term to keep it secure/hidden from bash history fmt.Printf("Password: ") ps, err := term.ReadPassword(int(os.Stdin.Fd())) cobra.CheckErr(err) fmt.Println() db, err := database.New() cobra.CheckErr(err) defer db.Close() fp, err := strconv.Atoi(cfgport) cobra.CheckErr(err) err = db.SaveServer(model.Server{ Name: cfgname, Server: cfgaddress, Port: fp, Password: base64.StdEncoding.EncodeToString(ps), }) cobra.CheckErr(err) }, } func init() { ServerCmd.AddCommand(addCmd) }