From b8e2d1de67636d2f5778d6f5d13abfdc7e446a6d Mon Sep 17 00:00:00 2001 From: cellarspoon Date: Sun, 19 Dec 2021 15:49:16 +0100 Subject: [PATCH] refactor: move function into web package --- cli/autocomplete.go | 31 ++----------------------------- pkg/web/web.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 29 deletions(-) diff --git a/cli/autocomplete.go b/cli/autocomplete.go index 12d6fcbf7..36fd36b02 100644 --- a/cli/autocomplete.go +++ b/cli/autocomplete.go @@ -3,43 +3,16 @@ package cli import ( "errors" "fmt" - "io" - "net/http" "os" "path" "coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/pkg/config" + "coopcloud.tech/abra/pkg/web" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" ) -// downloadFile downloads a file brah -func downloadFile(filepath string, url string) (err error) { - out, err := os.Create(filepath) - if err != nil { - return err - } - defer out.Close() - - resp, err := http.Get(url) - if err != nil { - return err - } - defer resp.Body.Close() - - if resp.StatusCode != http.StatusOK { - return fmt.Errorf("bad status: %s", resp.Status) - } - - _, err = io.Copy(out, resp.Body) - if err != nil { - return err - } - - return nil -} - // AutoCompleteCommand helps people set up auto-complete in their shells var AutoCompleteCommand = &cli.Command{ Name: "autocomplete", @@ -94,7 +67,7 @@ Supported shells are as follows: if _, err := os.Stat(autocompletionFile); err != nil && os.IsNotExist(err) { url := fmt.Sprintf("https://git.coopcloud.tech/coop-cloud/abra/raw/branch/main/scripts/autocomplete/%s", shellType) logrus.Infof("fetching %s", url) - if err := downloadFile(autocompletionFile, url); err != nil { + if err := web.GetFile(autocompletionFile, url); err != nil { logrus.Fatal(err) } } diff --git a/pkg/web/web.go b/pkg/web/web.go index 0fe567a7c..b1f871ab3 100644 --- a/pkg/web/web.go +++ b/pkg/web/web.go @@ -3,6 +3,10 @@ package web import ( "encoding/json" + "fmt" + "io" + "net/http" + "os" "time" ) @@ -20,3 +24,29 @@ func ReadJSON(url string, target interface{}) error { defer res.Body.Close() return json.NewDecoder(res.Body).Decode(target) } + +// GetFile downloads a file and saves it to a filepath +func GetFile(filepath string, url string) (err error) { + out, err := os.Create(filepath) + if err != nil { + return err + } + defer out.Close() + + resp, err := http.Get(url) + if err != nil { + return err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("bad status: %s", resp.Status) + } + + _, err = io.Copy(out, resp.Body) + if err != nil { + return err + } + + return nil +}