diff --git a/.gitea/workflows/security.yaml b/.gitea/workflows/security.yaml index 2f5dc31..bba8029 100644 --- a/.gitea/workflows/security.yaml +++ b/.gitea/workflows/security.yaml @@ -1,5 +1,5 @@ name: "code scans" -on: [push, pull_request] #runs on pushes to any branch +on: pull_request jobs: scans: diff --git a/README.md b/README.md index 992bf66..4899fae 100644 --- a/README.md +++ b/README.md @@ -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 ``` -
## Setup ### Configuring mctl @@ -75,6 +81,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 +98,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 +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 \ 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..5dd05de --- /dev/null +++ b/cmd/clear.go @@ -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) +} 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"}