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"}