From 4af5aef417950dddd3ed7046ad95d7fe315eb12c Mon Sep 17 00:00:00 2001 From: Gabriel MABILLE Date: Tue, 6 Feb 2024 16:26:17 +0100 Subject: [PATCH] id forwarding: transfer Grafana id token to app plugins (#81967) * id forwarding: allow for app plugins as well * Add test --- .../clientmiddleware/forward_id_middleware.go | 4 ++-- .../forward_id_middleware_test.go | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/pkg/services/pluginsintegration/clientmiddleware/forward_id_middleware.go b/pkg/services/pluginsintegration/clientmiddleware/forward_id_middleware.go index 7c6ca3ee581..71989ebe867 100644 --- a/pkg/services/pluginsintegration/clientmiddleware/forward_id_middleware.go +++ b/pkg/services/pluginsintegration/clientmiddleware/forward_id_middleware.go @@ -28,8 +28,8 @@ type ForwardIDMiddleware struct { func (m *ForwardIDMiddleware) applyToken(ctx context.Context, pCtx backend.PluginContext, req backend.ForwardHTTPHeaders) error { reqCtx := contexthandler.FromContext(ctx) - // if request not for a datasource or no HTTP request context skip middleware - if req == nil || reqCtx == nil || reqCtx.SignedInUser == nil || pCtx.DataSourceInstanceSettings == nil { + // no HTTP request context => skip middleware + if req == nil || reqCtx == nil || reqCtx.SignedInUser == nil { return nil } diff --git a/pkg/services/pluginsintegration/clientmiddleware/forward_id_middleware_test.go b/pkg/services/pluginsintegration/clientmiddleware/forward_id_middleware_test.go index a7397c300aa..2972c612a92 100644 --- a/pkg/services/pluginsintegration/clientmiddleware/forward_id_middleware_test.go +++ b/pkg/services/pluginsintegration/clientmiddleware/forward_id_middleware_test.go @@ -51,4 +51,24 @@ func TestForwardIDMiddleware(t *testing.T) { require.Len(t, cdt.CallResourceReq.Headers[forwardIDHeaderName], 0) }) + + pluginContext = backend.PluginContext{ + AppInstanceSettings: &backend.AppInstanceSettings{}, + } + + t.Run("Should set forwarded id header to app plugin if present", func(t *testing.T) { + cdt := clienttest.NewClientDecoratorTest(t, clienttest.WithMiddlewares(NewForwardIDMiddleware())) + + ctx := context.WithValue(context.Background(), ctxkey.Key{}, &contextmodel.ReqContext{ + Context: &web.Context{Req: &http.Request{}}, + SignedInUser: &user.SignedInUser{IDToken: "some-token"}, + }) + + err := cdt.Decorator.CallResource(ctx, &backend.CallResourceRequest{ + PluginContext: pluginContext, + }, nopCallResourceSender) + require.NoError(t, err) + + require.Equal(t, "some-token", cdt.CallResourceReq.Headers[forwardIDHeaderName][0]) + }) }