From 272593329a09641f2ede1ebf931316ecf4cd8f99 Mon Sep 17 00:00:00 2001 From: Tit Petric Date: Wed, 3 Apr 2019 13:49:57 +0200 Subject: [PATCH] add(internal): store file upload utilities --- internal/store/util.go | 54 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 internal/store/util.go diff --git a/internal/store/util.go b/internal/store/util.go new file mode 100644 index 000000000..2bb90ed89 --- /dev/null +++ b/internal/store/util.go @@ -0,0 +1,54 @@ +package store + +import ( + "io" + + "mime/multipart" + "net/url" + + "github.com/pkg/errors" + + "github.com/crusttech/crust/internal/config" + "github.com/crusttech/crust/internal/http" +) + +func FromURL(fileURL string) (io.ReadCloser, error) { + if u, err := url.ParseRequestURI(fileURL); err != nil { + return nil, errors.WithStack(err) + } else if u.Scheme != "https" { + return nil, errors.New("Only HTTPS is supported for file uploads") + } + + client, err := http.New(&config.HTTPClient{ + Timeout: 10, + }) + if err != nil { + return nil, errors.WithStack(err) + } + + req, err := client.Get(fileURL) + if err != nil { + return nil, err + } + + resp, err := client.Do(req) + if err != nil { + return nil, err + } + return resp.Body, nil +} + +func FromMultipartFile(file *multipart.FileHeader) (io.ReadCloser, error) { + reader, err := file.Open() + if err != nil { + return nil, errors.WithStack(err) + } + return reader, nil +} + +func FromAny(file *multipart.FileHeader, url string) (io.ReadCloser, error) { + if file != nil { + return FromMultipartFile(file) + } + return FromURL(url) +}