/* Copyright © 2025 Jake jake.young.dev@gmail.com */ package cmd import ( "bufio" "errors" "fmt" "os" "code.jakeyoungdev.com/jake/mctl/client" "code.jakeyoungdev.com/jake/mctl/database" "github.com/spf13/cobra" ) var ( name string ) // loginCmd represents the login command var loginCmd = &cobra.Command{ Use: "login", Example: "mctl login ", SilenceUsage: true, Short: "Login to server and send commands", Long: `Login to server using saved config and enter command loop sending commands to server and printing the response.`, Run: func(cmd *cobra.Command, args []string) { server := args[0] cli, err := client.New(server) cobra.CheckErr(err) defer cli.Close() //start command loop fmt.Println("Connected! Type 'mctl' to close") scanner := bufio.NewScanner(os.Stdin) db, err := database.New() cobra.CheckErr(err) defer db.Close() var runningCmd string for runningCmd != "mctl" { fmt.Printf("RCON@%s /> ", server) if scanner.Scan() { runningCmd = scanner.Text() if runningCmd == "" { continue } //mctl exits command terminal if runningCmd == "mctl" { break } if runningCmd == ".run" { } //hmm this gets weird af tbh dbcmd, err := db.GetCmd(runningCmd) res, err := cli.Command(runningCmd) cobra.CheckErr(err) fmt.Printf("\n%s\n", res) } } fmt.Printf("Disconnected from %s\n", server) }, PreRunE: func(cmd *cobra.Command, args []string) error { if len(args) == 0 { return errors.New("must specify which server to login to") } srv := args[0] db, err := database.New() if err != nil { return err } defer db.Close() server, err := db.GetServer(srv) if err != nil { return err } if server.Name == "" { return fmt.Errorf("server %s not found", server.Name) } return nil }, } func init() { rootCmd.AddCommand(loginCmd) }