add oauth pass thru logic to api/ds/query (#41352)

This commit is contained in:
Will Browne 2021-11-05 14:07:04 +00:00 committed by GitHub
parent 3a6b8535b1
commit 14742ea44a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,7 +1,9 @@
package api package api
import ( import (
"context"
"errors" "errors"
"fmt"
"net/http" "net/http"
"time" "time"
@ -84,7 +86,7 @@ func (hs *HTTPServer) QueryMetricsV2(c *models.ReqContext, reqDTO dtos.MetricReq
return response.Error(http.StatusForbidden, "Access denied", err) return response.Error(http.StatusForbidden, "Access denied", err)
} }
req, err := hs.createRequest(ds, request) req, err := hs.createRequest(c.Req.Context(), ds, request)
if err != nil { if err != nil {
return response.Error(http.StatusBadRequest, "Request formation error", err) return response.Error(http.StatusBadRequest, "Request formation error", err)
} }
@ -224,12 +226,24 @@ func (hs *HTTPServer) QueryMetrics(c *models.ReqContext, reqDto dtos.MetricReque
} }
// nolint:staticcheck // plugins.DataQueryResponse deprecated // nolint:staticcheck // plugins.DataQueryResponse deprecated
func (hs *HTTPServer) createRequest(ds *models.DataSource, query plugins.DataQuery) (*backend.QueryDataRequest, error) { func (hs *HTTPServer) createRequest(ctx context.Context, ds *models.DataSource,
query plugins.DataQuery) (*backend.QueryDataRequest, error) {
instanceSettings, err := adapters.ModelToInstanceSettings(ds, hs.decryptSecureJsonDataFn()) instanceSettings, err := adapters.ModelToInstanceSettings(ds, hs.decryptSecureJsonDataFn())
if err != nil { if err != nil {
return nil, err return nil, err
} }
if query.Headers == nil {
query.Headers = make(map[string]string)
}
if hs.OAuthTokenService.IsOAuthPassThruEnabled(ds) {
if token := hs.OAuthTokenService.GetCurrentOAuthToken(ctx, query.User); token != nil {
delete(query.Headers, "Authorization")
query.Headers["Authorization"] = fmt.Sprintf("%s %s", token.Type(), token.AccessToken)
}
}
req := &backend.QueryDataRequest{ req := &backend.QueryDataRequest{
PluginContext: backend.PluginContext{ PluginContext: backend.PluginContext{
OrgID: ds.OrgId, OrgID: ds.OrgId,