[actions/remove_files] init
This commit is contained in:
@@ -121,6 +121,7 @@ func GetAllActions() []DocumentedAction {
|
||||
return []DocumentedAction{
|
||||
Command{},
|
||||
Printer{},
|
||||
RemoveFiles{},
|
||||
ShellScript{},
|
||||
Shutdown{},
|
||||
SendMatrix{},
|
||||
|
||||
130
actions/remove_files.go
Normal file
130
actions/remove_files.go
Normal file
@@ -0,0 +1,130 @@
|
||||
package actions
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os/exec"
|
||||
|
||||
"github.com/k4lipso/gokill/internal"
|
||||
)
|
||||
|
||||
type RemoveFiles struct {
|
||||
Files []string `json:"files"`
|
||||
Directories []string `json:"directories"`
|
||||
ActionChan ActionResultChan
|
||||
}
|
||||
|
||||
func (c RemoveFiles) getRemoveCommand() string {
|
||||
command := "srm"
|
||||
isAvailable := isCommandAvailable(command)
|
||||
|
||||
if !isAvailable {
|
||||
internal.LogDoc(c).Warningf("Command %s not found, falling back to 'rm'", command)
|
||||
command = "rm"
|
||||
}
|
||||
|
||||
return command
|
||||
}
|
||||
|
||||
func (c RemoveFiles) DryExecute() {
|
||||
internal.LogDoc(c).Infof("Test Execute")
|
||||
|
||||
command := c.getRemoveCommand()
|
||||
internal.LogDoc(c).Info("The following commands would have been executed:")
|
||||
|
||||
for _, file := range c.Files {
|
||||
internal.LogDoc(c).Noticef("%s -f %s", command, file)
|
||||
}
|
||||
|
||||
for _, dir := range c.Directories {
|
||||
internal.LogDoc(c).Noticef("%s -rf %s", command, dir)
|
||||
}
|
||||
|
||||
c.ActionChan <- nil
|
||||
}
|
||||
|
||||
func (c RemoveFiles) Execute() {
|
||||
internal.LogDoc(c).Infof("Execute")
|
||||
|
||||
command := c.getRemoveCommand()
|
||||
|
||||
for _, file := range c.Files {
|
||||
cmd := exec.Command(command, "-fv", file)
|
||||
|
||||
stdout, err := cmd.Output()
|
||||
|
||||
if err != nil {
|
||||
internal.LogDoc(c).Errorf("%s", err.Error())
|
||||
}
|
||||
|
||||
internal.LogDoc(c).Notice(string(stdout))
|
||||
}
|
||||
|
||||
for _, dir := range c.Directories {
|
||||
cmd := exec.Command(command, "-rfv", dir)
|
||||
|
||||
stdout, err := cmd.Output()
|
||||
|
||||
if err != nil {
|
||||
internal.LogDoc(c).Errorf("%s", err.Error())
|
||||
}
|
||||
|
||||
internal.LogDoc(c).Notice(string(stdout))
|
||||
}
|
||||
|
||||
c.ActionChan <- nil
|
||||
}
|
||||
|
||||
func CreateRemoveFiles(config internal.ActionConfig, c ActionResultChan) (RemoveFiles, error) {
|
||||
result := RemoveFiles{}
|
||||
|
||||
err := json.Unmarshal(config.Options, &result)
|
||||
|
||||
if err != nil {
|
||||
return RemoveFiles{}, fmt.Errorf("Error parsing RemoveFiles: %s", err)
|
||||
}
|
||||
|
||||
result.ActionChan = c
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (cc RemoveFiles) Create(config internal.ActionConfig, c ActionResultChan) (Action, error) {
|
||||
return CreateRemoveFiles(config, c)
|
||||
}
|
||||
|
||||
func (p RemoveFiles) GetName() string {
|
||||
return "RemoveFiles"
|
||||
}
|
||||
|
||||
func (p RemoveFiles) GetDescription() string {
|
||||
return `
|
||||
RemoveFiles deletes the given files and directories.
|
||||
If available "srm" is used, otherwise RemoveFiles falls back to "rm"
|
||||
`
|
||||
}
|
||||
|
||||
func (p RemoveFiles) GetExample() string {
|
||||
return `
|
||||
{
|
||||
"type": "RemoveFiles",
|
||||
"options": {
|
||||
"files": [
|
||||
"/home/user/secrets.txt"
|
||||
],
|
||||
"directories": [
|
||||
"/home/user/.gpg",
|
||||
"/home/user/.ssh",
|
||||
"/home/user/.thunderbird"
|
||||
]
|
||||
}
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
func (p RemoveFiles) GetOptions() []internal.ConfigOption {
|
||||
return []internal.ConfigOption{
|
||||
{"files", "[]string", "list of absolute paths of files that should be deleted.", ""},
|
||||
{"directories", "[]string", "list of absolute paths of directories that should be deleted.", ""},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user