summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/yaegashi/msgraph.go/msauth/storage.go
diff options
context:
space:
mode:
authorWim <wim@42.be>2020-07-18 17:27:41 +0200
committerGitHub <noreply@github.com>2020-07-18 17:27:41 +0200
commit23d8742f0d95096b92f11729fb47f86ac3b68d43 (patch)
tree7b8acb02b051ae06e5454fda4a9d5118428fe016 /vendor/github.com/yaegashi/msgraph.go/msauth/storage.go
parent3b6a8be07b9422714db30fb50977f342057febf3 (diff)
downloadmatterbridge-msglm-23d8742f0d95096b92f11729fb47f86ac3b68d43.tar.gz
matterbridge-msglm-23d8742f0d95096b92f11729fb47f86ac3b68d43.tar.bz2
matterbridge-msglm-23d8742f0d95096b92f11729fb47f86ac3b68d43.zip
Update dependencies for 1.18.0 release (#1175)
Diffstat (limited to 'vendor/github.com/yaegashi/msgraph.go/msauth/storage.go')
-rw-r--r--vendor/github.com/yaegashi/msgraph.go/msauth/storage.go70
1 files changed, 70 insertions, 0 deletions
diff --git a/vendor/github.com/yaegashi/msgraph.go/msauth/storage.go b/vendor/github.com/yaegashi/msgraph.go/msauth/storage.go
new file mode 100644
index 00000000..7d8db8ae
--- /dev/null
+++ b/vendor/github.com/yaegashi/msgraph.go/msauth/storage.go
@@ -0,0 +1,70 @@
+package msauth
+
+import (
+ "bytes"
+ "fmt"
+ "io/ioutil"
+ "net/http"
+ "net/url"
+ "os"
+ "strings"
+)
+
+// ReadLocation reads data from file with path or URL
+func ReadLocation(loc string) ([]byte, error) {
+ u, err := url.Parse(loc)
+ if err != nil {
+ return nil, err
+ }
+ switch u.Scheme {
+ case "", "file":
+ return ioutil.ReadFile(u.Path)
+ case "http", "https":
+ res, err := http.Get(loc)
+ if err != nil {
+ return nil, err
+ }
+ defer res.Body.Close()
+ if res.StatusCode != http.StatusOK {
+ return nil, fmt.Errorf("%s", res.Status)
+ }
+ b, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ return nil, err
+ }
+ return b, nil
+ }
+ return nil, fmt.Errorf("Unsupported location to load: %s", loc)
+}
+
+// WriteLocation writes data to file with path or URL
+func WriteLocation(loc string, b []byte, m os.FileMode) error {
+ u, err := url.Parse(loc)
+ if err != nil {
+ return err
+ }
+ switch u.Scheme {
+ case "", "file":
+ return ioutil.WriteFile(u.Path, b, m)
+ case "http", "https":
+ if strings.HasSuffix(u.Host, ".blob.core.windows.net") {
+ // Azure Blob Storage URL with SAS assumed here
+ cli := &http.Client{}
+ req, err := http.NewRequest(http.MethodPut, loc, bytes.NewBuffer(b))
+ if err != nil {
+ return err
+ }
+ req.Header.Set("x-ms-blob-type", "BlockBlob")
+ res, err := cli.Do(req)
+ if err != nil {
+ return err
+ }
+ defer res.Body.Close()
+ if res.StatusCode != http.StatusCreated {
+ return fmt.Errorf("%s", res.Status)
+ }
+ return nil
+ }
+ }
+ return fmt.Errorf("Unsupported location to save: %s", loc)
+}