From 0ed4744a33fb2a3c6052d437fabd1a222480b61c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Fri, 7 Aug 2015 11:01:59 +0200 Subject: [PATCH] influxdb(auth): fixed issue with using basic auth and influxdb, fixes #2455 --- pkg/api/dataproxy.go | 5 +- .../plugins/datasource/influxdb/datasource.js | 95 ++++++++----------- 2 files changed, 43 insertions(+), 57 deletions(-) diff --git a/pkg/api/dataproxy.go b/pkg/api/dataproxy.go index 11075294b66..a6b71af491f 100644 --- a/pkg/api/dataproxy.go +++ b/pkg/api/dataproxy.go @@ -42,9 +42,10 @@ func NewReverseProxy(ds *m.DataSource, proxyPath string) *httputil.ReverseProxy } else if ds.Type == m.DS_INFLUXDB { req.URL.Path = util.JoinUrlFragments(target.Path, proxyPath) reqQueryVals.Add("db", ds.Database) - reqQueryVals.Add("u", ds.User) - reqQueryVals.Add("p", ds.Password) req.URL.RawQuery = reqQueryVals.Encode() + if !ds.BasicAuth { + req.Header.Add("Authorization", util.GetBasicAuthHeader(ds.User, ds.Password)) + } } else { req.URL.Path = util.JoinUrlFragments(target.Path, proxyPath) } diff --git a/public/app/plugins/datasource/influxdb/datasource.js b/public/app/plugins/datasource/influxdb/datasource.js index 58d7ae7d253..09bd2e0916d 100644 --- a/public/app/plugins/datasource/influxdb/datasource.js +++ b/public/app/plugins/datasource/influxdb/datasource.js @@ -114,25 +114,6 @@ function (angular, _, kbn, InfluxSeries, InfluxQueryBuilder) { }); }; - function retry(deferred, callback, delay) { - return callback().then(undefined, function(reason) { - if (reason.status !== 0 || reason.status >= 300) { - if (reason.data && reason.data.error) { - reason.message = 'InfluxDB Error Response: ' + reason.data.error; - } - else { - reason.message = 'InfluxDB Error: ' + reason.message; - } - deferred.reject(reason); - } - else { - setTimeout(function() { - return retry(deferred, callback, Math.min(delay * 2, 30000)); - }, delay); - } - }); - } - InfluxDatasource.prototype._seriesQuery = function(query) { return this._influxRequest('GET', '/query', {q: query, epoch: 'ms'}); }; @@ -145,46 +126,50 @@ function (angular, _, kbn, InfluxSeries, InfluxQueryBuilder) { InfluxDatasource.prototype._influxRequest = function(method, url, data) { var self = this; - var deferred = $q.defer(); - retry(deferred, function() { - var currentUrl = self.urls.shift(); - self.urls.push(currentUrl); + var currentUrl = self.urls.shift(); + self.urls.push(currentUrl); - var params = { - u: self.username, - p: self.password, - }; + var params = { + u: self.username, + p: self.password, + }; - if (self.database) { - params.db = self.database; + if (self.database) { + params.db = self.database; + } + + if (method === 'GET') { + _.extend(params, data); + data = null; + } + + var options = { + method: method, + url: currentUrl + url, + params: params, + data: data, + precision: "ms", + inspect: { type: 'influxdb' }, + }; + + options.headers = options.headers || {}; + if (self.basicAuth) { + options.headers.Authorization = self.basicAuth; + } + + return $http(options).then(function(result) { + return result.data; + }, function(reason) { + if (reason.status !== 0 || reason.status >= 300) { + if (reason.data && reason.data.error) { + throw { message: 'InfluxDB Error Response: ' + reason.data.error }; + } + else { + throw { messsage: 'InfluxDB Error: ' + reason.message }; + } } - - if (method === 'GET') { - _.extend(params, data); - data = null; - } - - var options = { - method: method, - url: currentUrl + url, - params: params, - data: data, - precision: "ms", - inspect: { type: 'influxdb' }, - }; - - options.headers = options.headers || {}; - if (self.basicAuth) { - options.headers.Authorization = self.basicAuth; - } - - return $http(options).success(function (data) { - deferred.resolve(data); - }); - }, 10); - - return deferred.promise; + }); }; function getTimeFilter(options) {