2 Commits

Author SHA1 Message Date
f8282c3676 new/clear-command (#8)
Reviewed-on: #8
Co-authored-by: jake <jake.young.dev@gmail.com>
Co-committed-by: jake <jake.young.dev@gmail.com>
2025-05-11 04:27:47 +00:00
386a766185 Update .gitea/workflows/security.yaml (#7)
All checks were successful
code scans / scans (push) Successful in 1m15s
Reviewed-on: #7
2025-05-10 05:37:49 +00:00
5 changed files with 69 additions and 23 deletions

View File

@@ -1,25 +1,11 @@
name: "code scans"
on: [push, pull_request] #runs on pushes to any branch
on: pull_request
jobs:
scans:
runs-on: smoke-test
runs-on: test
steps:
- name: "clone code"
uses: actions/checkout@v4
- name: "install go"
uses: https://code.jakeyoungdev.com/actions/install-go@v0.1.3
with:
commands: |
golang.org/x/vuln/cmd/govulncheck@latest
- uses: actions/checkout@v4
- name: "dependency and stdlib scan"
uses: https://code.jakeyoungdev.com/actions/report-vulns@master
with:
manager: go
- name: "static code analysis"
uses: securego/gosec@master
with:
args: ./...
- name: "dependency scan and static code analysis"
uses: https://code.jakeyoungdev.com/actions/donotpassgo@v1.0.0

View File

@@ -1,12 +1,18 @@
# mctl
mctl is a terminal-friendly remote console client
## Index
1. [Installation](#installation)
2. [Setup](#setup)
3. [Documentation](#documentation)
4. [Security](#security)
5. [Development](#development)
## Installation
Install mctl using golang
```bash
go install code.jakeyoungdev.com/jake/mctl@main #it is recommended to use a tagged version
```
<br />
## Setup
### Configuring mctl
@@ -75,6 +81,13 @@ Commands can be deleted with:
mctl delete <name>
```
### Clear configuration file
To clear all fields from the configuration file use:
```bash
#CAUTION: If the config file is cleared all data previously saved will be lost forever
mctl clear
```
## Documentation
### Commands
|Command|Description|
@@ -85,6 +98,7 @@ mctl delete <name>
|view \<name>|displays saved command|
|delete \<name>|deletes saved command|
|run \<name> args...|runs saved command filling placeholders with supplied args|
|clear|clears config file|
### Flags
#### config
@@ -102,4 +116,4 @@ RCon is an inherently insecure protocol, passwords are sent in plaintext and, if
mctl utilizes [govulncheck](https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck) and [gosec](https://github.com/securego/gosec) in workflows to ensure quality, secure code is being pushed. These workflow steps must pass before a PR will be accepted
## Development
this repo is currently in heavy development and may encounter breaking changes, use a tag to prevent any surprises
this repo is currently in development and may encounter breaking changes, use a tag to prevent any surprises

43
cmd/clear.go Normal file
View File

@@ -0,0 +1,43 @@
/*
Copyright © 2025 Jake jake.young.dev@gmail.com
*/
package cmd
import (
"fmt"
"os"
"code.jakeyoungdev.com/jake/mctl/models"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
// clearCmd represents the clear command
var clearCmd = &cobra.Command{
Use: "clear",
Short: "Clear config file",
Long: `Clears all configuration values for mctl, all server configuration will be lost`,
Run: func(cmd *cobra.Command, args []string) {
home, err := os.UserHomeDir()
cobra.CheckErr(err)
viper.AddConfigPath(home)
viper.SetConfigType("yaml")
viper.SetConfigName(".mctl")
err = viper.ReadInConfig()
if err == nil {
//clear values if file exists
for _, v := range models.ConfigFields {
viper.Set(v, "")
}
err := viper.WriteConfig()
cobra.CheckErr(err)
fmt.Println("Config file cleared, use 'config' command to re-populate it")
}
},
}
func init() {
rootCmd.AddCommand(clearCmd)
}

View File

@@ -76,9 +76,8 @@ func initConfig() {
viper.SetConfigName(".mctl")
viper.AutomaticEnv()
err = viper.ReadInConfig()
cobra.CheckErr(err)
if err := viper.ReadInConfig(); err != nil {
if err != nil {
//file does not exist, create it
viper.Set("server", cfgserver)
viper.Set("password", "")

4
models/data.go Normal file
View File

@@ -0,0 +1,4 @@
package models
//list of all fields kept in config file
var ConfigFields = [6]string{"customcmd", "device", "nonce", "port", "server", "password"}