From 83fec73076ecbb35392f7d67a7b34a9da2e4292a Mon Sep 17 00:00:00 2001 From: jake Date: Sat, 10 May 2025 15:22:33 -0400 Subject: [PATCH] added clear command - clear command setup - clear command added to docs - config fields saved in model layer - config command code cleanup --- README.md | 17 ++++++++++++++++- cmd/clear.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ cmd/config.go | 3 +-- models/data.go | 4 ++++ 4 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 cmd/clear.go create mode 100644 models/data.go diff --git a/README.md b/README.md index 992bf66..c2b3812 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,13 @@ # 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 @@ -75,6 +82,13 @@ Commands can be deleted with: mctl delete ``` +### 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 +99,7 @@ mctl delete |view \|displays saved command| |delete \|deletes saved command| |run \ args...|runs saved command filling placeholders with supplied args| +|clear|clears config file| ### Flags #### config @@ -102,4 +117,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 \ No newline at end of file +this repo is currently in development and may encounter breaking changes, use a tag to prevent any surprises \ No newline at end of file diff --git a/cmd/clear.go b/cmd/clear.go new file mode 100644 index 0000000..b5125f9 --- /dev/null +++ b/cmd/clear.go @@ -0,0 +1,44 @@ +/* +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: `Removes the configuration file from the system. The + config command must be run before use after clearing.`, + 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) +} diff --git a/cmd/config.go b/cmd/config.go index d5dd723..25f500c 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -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", "") diff --git a/models/data.go b/models/data.go new file mode 100644 index 0000000..e282c91 --- /dev/null +++ b/models/data.go @@ -0,0 +1,4 @@ +package models + +//list of all fields kept in config file +var ConfigFields = [6]string{"customcmd", "device", "nonce", "port", "server", "password"}