From aee1effb79ec7ed50c13ab9e9e8932b0b759b13e Mon Sep 17 00:00:00 2001 From: AlteredCoder Date: Fri, 22 May 2020 17:30:37 +0200 Subject: [PATCH] add_utils --- cmd/crowdsec-cli/utils.go | 69 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 cmd/crowdsec-cli/utils.go diff --git a/cmd/crowdsec-cli/utils.go b/cmd/crowdsec-cli/utils.go new file mode 100644 index 000000000..1e7910527 --- /dev/null +++ b/cmd/crowdsec-cli/utils.go @@ -0,0 +1,69 @@ +package cscli + +import ( + "fmt" + "io/ioutil" + "net/http" + "os" + "path" + + log "github.com/sirupsen/logrus" +) + +type dataSource struct { + SourceURL string `yaml:"source_url"` + DestPath string `yaml:"dest_file"` +} + +func downloadFile(url string, destPath string) error { + log.Debugf("downloading %s in %s", url, destPath) + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return err + } + + resp, err := http.DefaultClient.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return err + } + + if resp.StatusCode != 200 { + return fmt.Errorf("download response 'HTTP %d' : %s", resp.StatusCode, string(body)) + } + + file, err := os.OpenFile(destPath, os.O_RDWR|os.O_CREATE, 0644) + if err != nil { + return err + } + + _, err = file.WriteString(string(body)) + if err != nil { + return err + } + + err = file.Sync() + if err != nil { + return err + } + + return nil +} + +func getData(data []*dataSource, dataDir string) error { + for _, dataS := range data { + destPath := path.Join(dataDir, dataS.DestPath) + log.Infof("downloading data '%s' in '%s'", dataS.SourceURL, destPath) + err := downloadFile(dataS.SourceURL, destPath) + if err != nil { + return err + } + } + + return nil +}