5 Commits

Author SHA1 Message Date
210e574f51 [ci] Adding gosec scans
All checks were successful
code scans / scans (push) Successful in 31s
2025-11-25 20:28:06 -05:00
0c68e1de9d [ci] runner image changes
Some checks failed
code scans / scans (push) Failing after 35s
- go no longer installed out of the gates
2025-11-25 20:23:09 -05:00
1768a1ecd3 [ci] runner update
Some checks failed
code scans / scans (push) Failing after 31s
2025-11-25 20:19:23 -05:00
7a09123677 server view command flags
Some checks failed
code scans / scans (push) Has been cancelled
- adding decode flag to server view command
- more idiomatic naming for db funcs
2025-11-25 20:18:01 -05:00
0e50a4908b readme update
All checks were successful
code scans / scans (push) Successful in 38s
2025-06-23 11:17:31 -04:00
7 changed files with 70 additions and 26 deletions

View File

@@ -1,17 +1,18 @@
name: "code scans" name: "code scans"
on: on:
push: push:
branches:
- main
tags:
- v*
pull_request: pull_request:
jobs: jobs:
scans: scans:
runs-on: fire runs-on: wind
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: "dependency scan and static code analysis" - name: "install go"
uses: https://code.jakeyoungdev.com/actions/donotpassgo@v1.1.0 uses: https://code.jakeyoungdev.com/actions/install-go@v0.1.3
- name: "static code analysis"
uses: securego/gosec@v2.22.10
with:
args: ./...

View File

@@ -82,7 +82,7 @@ Command: kill %s
``` ```
```bash ```bash
#runs the 'kill' command on 'player' #runs the 'kill' command on 'player'
mctl command run placeholder kill player mctl command run placeholder player
``` ```
Running the placeholder command with the arg 'player' will run 'kill player' on the server Running the placeholder command with the arg 'player' will run 'kill player' on the server

View File

@@ -32,12 +32,12 @@ func New(name string) (*Client, error) {
var srv model.Server var srv model.Server
if name != "" { if name != "" {
srv, err = db.GetServer(name) srv, err = db.Server(name)
if err != nil { if err != nil {
return nil, err return nil, err
} }
} else { } else {
srv, err = db.GetActiveServer() srv, err = db.ActiveServer()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -32,7 +32,7 @@ var runCmd = &cobra.Command{
} }
defer db.Close() defer db.Close()
crun, err := db.GetCmd(cname) crun, err := db.Cmd(cname)
if err != nil { if err != nil {
if err.Error() == ErrInit { if err.Error() == ErrInit {
fmt.Println(ErrInitRsp) fmt.Println(ErrInitRsp)

View File

@@ -20,7 +20,7 @@ var viewCmd = &cobra.Command{
cobra.CheckErr(err) cobra.CheckErr(err)
defer db.Close() defer db.Close()
ts, err := db.GetAllCmds() ts, err := db.AllCmds()
if err != nil { if err != nil {
if err.Error() == ErrInit { if err.Error() == ErrInit {
fmt.Println(ErrInitRsp) fmt.Println(ErrInitRsp)

View File

@@ -4,12 +4,15 @@ Copyright © 2025 Jake jake.young.dev@gmail.com
package server package server
import ( import (
"encoding/base64"
"fmt" "fmt"
"code.jakeyoungdev.com/jake/mctl/database" "code.jakeyoungdev.com/jake/mctl/database"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
var decode bool
var viewCmd = &cobra.Command{ var viewCmd = &cobra.Command{
Use: "view", Use: "view",
Example: "mctl server view", Example: "mctl server view",
@@ -17,29 +20,69 @@ var viewCmd = &cobra.Command{
SilenceUsage: true, SilenceUsage: true,
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
db, err := database.New() db, err := database.New()
cobra.CheckErr(err) if err != nil {
fmt.Println(err)
return
}
defer db.Close() defer db.Close()
ts, err := db.GetAllServers() if len(args) > 0 {
srvName := args[0]
s, err := db.Server(srvName)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("-----")
fmt.Printf("Name: %s\n", s.Name)
fmt.Printf("Address: %s\n", s.Server)
fmt.Printf("Port: %d\n", s.Port)
if decode {
pwb, err := base64.StdEncoding.DecodeString(s.Password)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("Password: %s\n", string(pwb))
} else {
fmt.Println("Password: [REDACTED]")
}
fmt.Printf("Default: %t\n", s.Active)
return
}
ts, err := db.AllServers()
if err != nil { if err != nil {
if err.Error() == ErrInit { if err.Error() == ErrInit {
fmt.Println(ErrInitRsp) fmt.Println(ErrInitRsp)
return return
} else {
fmt.Println(err)
return
} }
} }
cobra.CheckErr(err)
for _, s := range ts { for _, s := range ts {
fmt.Println("-----") fmt.Println("-----")
fmt.Printf("Name: %s\n", s.Name) fmt.Printf("Name: %s\n", s.Name)
fmt.Printf("Address: %s\n", s.Server) fmt.Printf("Address: %s\n", s.Server)
fmt.Printf("Port: %d\n", s.Port) fmt.Printf("Port: %d\n", s.Port)
fmt.Println("Password: [REDACTED]") if decode {
pwb, err := base64.StdEncoding.DecodeString(s.Password)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("Password: %s\n", string(pwb))
} else {
fmt.Println("Password: [REDACTED]")
}
fmt.Printf("Default: %t\n", s.Active) fmt.Printf("Default: %t\n", s.Active)
} }
}, },
} }
func init() { func init() {
viewCmd.Flags().BoolVarP(&decode, "decode", "d", false, "decodes server passwords")
ServerCmd.AddCommand(viewCmd) ServerCmd.AddCommand(viewCmd)
} }

View File

@@ -33,15 +33,15 @@ type Database interface {
//internals //internals
timeout() (context.Context, context.CancelFunc) timeout() (context.Context, context.CancelFunc)
//command methods //command methods
GetCmd(name string) (string, error) Cmd(name string) (string, error)
GetAllCmds() ([]model.Command, error) AllCmds() ([]model.Command, error)
SaveCmd(name, cmd string) error SaveCmd(name, cmd string) error
UpdateCmd(name, cmd string) error UpdateCmd(name, cmd string) error
DeleteCmd(name string) error DeleteCmd(name string) error
//server methods //server methods
GetServer(name string) (model.Server, error) Server(name string) (model.Server, error)
GetActiveServer() (model.Server, error) ActiveServer() (model.Server, error)
GetAllServers() ([]model.Server, error) AllServers() ([]model.Server, error)
SetActiveServer(name string) error SetActiveServer(name string) error
SaveServer(srv model.Server) error SaveServer(srv model.Server) error
UpdateServer(name, password string) error UpdateServer(name, password string) error
@@ -110,7 +110,7 @@ func (d *database) timeout() (context.Context, context.CancelFunc) {
} }
// gets command using name // gets command using name
func (d *database) GetCmd(name string) (string, error) { func (d *database) Cmd(name string) (string, error) {
query := ` query := `
SELECT SELECT
command command
@@ -135,7 +135,7 @@ func (d *database) GetCmd(name string) (string, error) {
} }
// gets all saved commands // gets all saved commands
func (d *database) GetAllCmds() ([]model.Command, error) { func (d *database) AllCmds() ([]model.Command, error) {
query := ` query := `
SELECT SELECT
name, name,
@@ -208,7 +208,7 @@ func (d *database) DeleteCmd(name string) error {
return err return err
} }
func (d *database) GetServer(name string) (model.Server, error) { func (d *database) Server(name string) (model.Server, error) {
query := ` query := `
SELECT SELECT
name, name,
@@ -235,7 +235,7 @@ func (d *database) GetServer(name string) (model.Server, error) {
return s, nil return s, nil
} }
func (d *database) GetActiveServer() (model.Server, error) { func (d *database) ActiveServer() (model.Server, error) {
query := ` query := `
SELECT SELECT
name, name,
@@ -259,7 +259,7 @@ func (d *database) GetActiveServer() (model.Server, error) {
return s, err return s, err
} }
func (d *database) GetAllServers() ([]model.Server, error) { func (d *database) AllServers() ([]model.Server, error) {
query := ` query := `
SELECT SELECT
name, name,