From 395fb41d23d25881203ad16d740cf9c9b6160f15 Mon Sep 17 00:00:00 2001 From: Marco Descher Date: Tue, 29 Aug 2017 14:42:14 +0200 Subject: [PATCH] Provide means to transfer files #162 add deleteOnExit --- hook/hook.go | 8 +++++--- webhook.go | 22 ++++++++++++++-------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/hook/hook.go b/hook/hook.go index 0727911..0f42478 100644 --- a/hook/hook.go +++ b/hook/hook.go @@ -270,6 +270,7 @@ type Argument struct { EnvName string `json:"envname,omitempty"` FileName string `json:"filename,omitempty"` Base64Decode bool `json:"base64decode,omitempty"` + DeleteOnExit bool `json:"deleteOnExit,omitempty"` } // Get Argument method returns the value for the Argument's key name @@ -496,8 +497,9 @@ func (h *Hook) ExtractCommandArgumentsForEnv(headers, query, payload *map[string // FileParameter describes a pass-file-to-command instance to be stored as file type FileParameter struct { - Filename string - Data []byte + Filename string + Data []byte + DeleteOnExit bool } // ExtractCommandArgumentsForFile creates a list of arguments in key=value @@ -526,7 +528,7 @@ func (h *Hook) ExtractCommandArgumentsForFile(headers, query, payload *map[strin fileContent = []byte(arg) } - args = append(args, FileParameter{Filename: h.PassFileToCommand[i].FileName, Data: fileContent}) + args = append(args, FileParameter{Filename: h.PassFileToCommand[i].FileName, Data: fileContent, DeleteOnExit: h.PassFileToCommand[i].DeleteOnExit}) } else { errors = append(errors, &ArgumentError{h.PassFileToCommand[i]}) diff --git a/webhook.go b/webhook.go index 671794a..939b430 100644 --- a/webhook.go +++ b/webhook.go @@ -343,18 +343,14 @@ func handleHook(h *hook.Hook, headers, query, payload *map[string]interface{}, b } for i := range files { - var filename string if h.CommandWorkingDirectory != "" { - filename = h.CommandWorkingDirectory + "/" + files[i].Filename - } else { - filename = files[i].Filename + files[i].Filename = h.CommandWorkingDirectory + "/" + files[i].Filename } - log.Printf("writing file %s", filename) - - err := ioutil.WriteFile(filename, files[i].Data, 0644) + log.Printf("writing file %s", files[i].Filename) + err := ioutil.WriteFile(files[i].Filename, files[i].Data, 0644) if err != nil { - log.Printf("error writing file %s [%s]", filename, err) + log.Printf("error writing file %s [%s]", files[i].Filename, err) } } @@ -368,6 +364,16 @@ func handleHook(h *hook.Hook, headers, query, payload *map[string]interface{}, b log.Printf("error occurred: %+v\n", err) } + for i := range files { + if files[i].DeleteOnExit { + log.Printf("removing file: %s\n", files[i].Filename) + err := os.Remove(files[i].Filename) + if err != nil { + log.Printf("error removing file %s [%s]", files[i].Filename, err) + } + } + } + log.Printf("finished handling %s\n", h.ID) return string(out), err