From 6d9e8bd147db4024c13911b5fb7963bb041b2764 Mon Sep 17 00:00:00 2001 From: fir4 Date: Thu, 23 Mar 2017 16:23:46 +0100 Subject: [PATCH] webdav: allow specification of a different public_url than upload url --- conf/defaults.ini | 1 + conf/sample.ini | 1 + docs/sources/installation/configuration.md | 3 +++ pkg/components/imguploader/imguploader.go | 3 ++- pkg/components/imguploader/webdavuploader.go | 25 ++++++++++++------- .../imguploader/webdavuploader_test.go | 2 +- 6 files changed, 24 insertions(+), 11 deletions(-) diff --git a/conf/defaults.ini b/conf/defaults.ini index 9955c22ca17..85384d5b2f4 100644 --- a/conf/defaults.ini +++ b/conf/defaults.ini @@ -444,3 +444,4 @@ secret_key = url = username = password = +public_url = diff --git a/conf/sample.ini b/conf/sample.ini index 87505221790..0d74bcd56f1 100644 --- a/conf/sample.ini +++ b/conf/sample.ini @@ -399,5 +399,6 @@ [external_image_storage.webdav] ;url = +;public_url = ;username = ;password = diff --git a/docs/sources/installation/configuration.md b/docs/sources/installation/configuration.md index 176f843e86b..85a8999eab5 100644 --- a/docs/sources/installation/configuration.md +++ b/docs/sources/installation/configuration.md @@ -644,6 +644,9 @@ Secret key. e.g. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ### url Url to where Grafana will send PUT request with images +### public_url +Url to send to users in notifications, directly appended with the resulting uploaded file name + ### username basic auth username diff --git a/pkg/components/imguploader/imguploader.go b/pkg/components/imguploader/imguploader.go index ae5c89a0049..883ef8eefda 100644 --- a/pkg/components/imguploader/imguploader.go +++ b/pkg/components/imguploader/imguploader.go @@ -47,10 +47,11 @@ func NewImageUploader() (ImageUploader, error) { return nil, fmt.Errorf("Could not find url key for image.uploader.webdav") } + public_url := webdavSec.Key("public_url").String() username := webdavSec.Key("username").String() password := webdavSec.Key("password").String() - return NewWebdavImageUploader(url, username, password) + return NewWebdavImageUploader(url, username, password, public_url) } return NopImageUploader{}, nil diff --git a/pkg/components/imguploader/webdavuploader.go b/pkg/components/imguploader/webdavuploader.go index 93b3f9d2efa..250b76165fe 100644 --- a/pkg/components/imguploader/webdavuploader.go +++ b/pkg/components/imguploader/webdavuploader.go @@ -14,9 +14,10 @@ import ( ) type WebdavUploader struct { - url string - username string - password string + url string + username string + password string + public_url string } var netTransport = &http.Transport{ @@ -33,7 +34,8 @@ var netClient = &http.Client{ func (u *WebdavUploader) Upload(pa string) (string, error) { url, _ := url.Parse(u.url) - url.Path = path.Join(url.Path, util.GetRandomString(20)+".png") + filename := util.GetRandomString(20) + ".png" + url.Path = path.Join(url.Path, filename) imgData, err := ioutil.ReadFile(pa) req, err := http.NewRequest("PUT", url.String(), bytes.NewReader(imgData)) @@ -53,13 +55,18 @@ func (u *WebdavUploader) Upload(pa string) (string, error) { return "", fmt.Errorf("Failed to upload image. Returned statuscode %v body %s", res.StatusCode, body) } - return url.String(), nil + if u.public_url != "" { + return (u.public_url + filename), nil + } else { + return url.String(), nil + } } -func NewWebdavImageUploader(url, username, passwrod string) (*WebdavUploader, error) { +func NewWebdavImageUploader(url, username, password, public_url string) (*WebdavUploader, error) { return &WebdavUploader{ - url: url, - username: username, - password: passwrod, + url: url, + username: username, + password: password, + public_url: public_url, }, nil } diff --git a/pkg/components/imguploader/webdavuploader_test.go b/pkg/components/imguploader/webdavuploader_test.go index 273cd1c2a86..93813791de5 100644 --- a/pkg/components/imguploader/webdavuploader_test.go +++ b/pkg/components/imguploader/webdavuploader_test.go @@ -7,7 +7,7 @@ import ( ) func TestUploadToWebdav(t *testing.T) { - webdavUploader, _ := NewWebdavImageUploader("http://localhost:9998/dav/", "username", "password") + webdavUploader, _ := NewWebdavImageUploader("http://localhost:9998/dav/", "username", "password", "") SkipConvey("[Integration test] for external_image_store.webdav", t, func() { path, err := webdavUploader.Upload("../../../public/img/logo_transparent_400x.png")