100 lines
1.9 KiB
Go
100 lines
1.9 KiB
Go
/*
|
|
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 <name>",
|
|
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)
|
|
}
|