data source with token auth is starting to work, #9078

This commit is contained in:
Torkel Ödegaard 2017-08-24 11:07:37 +02:00
parent 3c9798bec9
commit 71c9582944
3 changed files with 17 additions and 8 deletions

View File

@ -5,7 +5,6 @@ import (
"encoding/json"
"errors"
"fmt"
"html/template"
"io/ioutil"
"net"
"net/http"
@ -13,6 +12,7 @@ import (
"net/url"
"strconv"
"strings"
"text/template"
"time"
"github.com/grafana/grafana/pkg/api/cloudwatch"
@ -30,6 +30,7 @@ var (
Timeout: time.Second * 30,
Transport: &http.Transport{Proxy: http.ProxyFromEnvironment},
}
tokenCache = map[int64]*jwtToken{}
)
type jwtToken struct {
@ -270,9 +271,18 @@ func (proxy *DataSourceProxy) applyRoute(req *http.Request) {
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", token))
}
}
logger.Info("Requesting", "url", req.URL.String())
}
func (proxy *DataSourceProxy) getAccessToken(data templateData) (string, error) {
if cachedToken, found := tokenCache[proxy.ds.Id]; found {
if cachedToken.ExpiresOn.After(time.Now().Add(time.Second * 10)) {
logger.Info("Using token from cache")
return cachedToken.AccessToken, nil
}
}
urlInterpolated, err := interpolateString(proxy.route.TokenAuth.Url, data)
if err != nil {
return "", err
@ -299,8 +309,6 @@ func (proxy *DataSourceProxy) getAccessToken(data templateData) (string, error)
}
defer resp.Body.Close()
respData, err := ioutil.ReadAll(resp.Body)
logger.Info("Resp", "resp", string(respData))
var token jwtToken
if err := json.NewDecoder(resp.Body).Decode(&token); err != nil {
@ -309,9 +317,10 @@ func (proxy *DataSourceProxy) getAccessToken(data templateData) (string, error)
expiresOnEpoch, _ := strconv.ParseInt(token.ExpiresOnString, 10, 64)
token.ExpiresOn = time.Unix(expiresOnEpoch, 0)
tokenCache[proxy.ds.Id] = &token
logger.Debug("Got new access token", "ExpiresOn", token.ExpiresOn)
return "", nil
logger.Info("Got new access token", "ExpiresOn", token.ExpiresOn)
return token.AccessToken, nil
}
func interpolateString(text string, data templateData) (string, error) {

View File

@ -152,13 +152,13 @@ func TestDSRouteRule(t *testing.T) {
Convey("When interpolating string", func() {
data := templateData{
SecureJsonData: map[string]string{
"Test": "0+0a0sdasd00+++",
"Test": "0asd+asd",
},
}
interpolated, err := interpolateString("{{.SecureJsonData.Test}}", data)
So(err, ShouldBeNil)
So(interpolated, ShouldEqual, "0+0a0sdasd00+++")
So(interpolated, ShouldEqual, "0asd+asd")
})
})

View File

@ -7,7 +7,7 @@
{
"path": "tokenTest",
"method": "*",
"url": "http://localhost:3333/query",
"url": "https://management.azure.com",
"tokenAuth": {
"url": "https://login.microsoftonline.com/{{.JsonData.tenantId}}/oauth2/token",
"params": {