Provide means to transfer files #162 add deleteOnExit

This commit is contained in:
Marco Descher 2017-08-29 14:42:14 +02:00
parent 34c4b1c166
commit 395fb41d23
2 changed files with 19 additions and 11 deletions

View file

@ -270,6 +270,7 @@ type Argument struct {
EnvName string `json:"envname,omitempty"` EnvName string `json:"envname,omitempty"`
FileName string `json:"filename,omitempty"` FileName string `json:"filename,omitempty"`
Base64Decode bool `json:"base64decode,omitempty"` Base64Decode bool `json:"base64decode,omitempty"`
DeleteOnExit bool `json:"deleteOnExit,omitempty"`
} }
// Get Argument method returns the value for the Argument's key name // Get Argument method returns the value for the Argument's key name
@ -498,6 +499,7 @@ func (h *Hook) ExtractCommandArgumentsForEnv(headers, query, payload *map[string
type FileParameter struct { type FileParameter struct {
Filename string Filename string
Data []byte Data []byte
DeleteOnExit bool
} }
// ExtractCommandArgumentsForFile creates a list of arguments in key=value // 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) 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 { } else {
errors = append(errors, &ArgumentError{h.PassFileToCommand[i]}) errors = append(errors, &ArgumentError{h.PassFileToCommand[i]})

View file

@ -343,18 +343,14 @@ func handleHook(h *hook.Hook, headers, query, payload *map[string]interface{}, b
} }
for i := range files { for i := range files {
var filename string
if h.CommandWorkingDirectory != "" { if h.CommandWorkingDirectory != "" {
filename = h.CommandWorkingDirectory + "/" + files[i].Filename files[i].Filename = h.CommandWorkingDirectory + "/" + files[i].Filename
} else {
filename = files[i].Filename
} }
log.Printf("writing file %s", filename) log.Printf("writing file %s", files[i].Filename)
err := ioutil.WriteFile(files[i].Filename, files[i].Data, 0644)
err := ioutil.WriteFile(filename, files[i].Data, 0644)
if err != nil { 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) 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) log.Printf("finished handling %s\n", h.ID)
return string(out), err return string(out), err