Plugin proxy: Handle URL parsing errors (#29093)

Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
pull/29117/head
Arve Knudsen 5 years ago committed by GitHub
parent 113e288668
commit fbf0d2c086
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 7
      pkg/api/app_routes.go
  2. 10
      pkg/api/pluginproxy/pluginproxy.go
  3. 3
      pkg/api/pluginproxy/pluginproxy_test.go

@ -57,7 +57,12 @@ func AppPluginRoute(route *plugins.AppPluginRoute, appID string, hs *HTTPServer)
return func(c *models.ReqContext) {
path := c.Params("*")
proxy := pluginproxy.NewApiPluginProxy(c, path, route, appID, hs.Cfg)
proxy, err := pluginproxy.NewApiPluginProxy(c, path, route, appID, hs.Cfg)
if err != nil {
c.JsonApiErr(500, "Failed to create API plugin proxy", err)
return
}
proxy.Transport = pluginProxyTransport
proxy.ServeHTTP(c.Resp, c.Req.Request)
}

@ -56,8 +56,12 @@ func updateURL(route *plugins.AppPluginRoute, orgId int64, appID string) (string
}
// NewApiPluginProxy create a plugin proxy
func NewApiPluginProxy(ctx *models.ReqContext, proxyPath string, route *plugins.AppPluginRoute, appID string, cfg *setting.Cfg) *httputil.ReverseProxy {
targetURL, _ := url.Parse(route.URL)
func NewApiPluginProxy(ctx *models.ReqContext, proxyPath string, route *plugins.AppPluginRoute, appID string,
cfg *setting.Cfg) (*httputil.ReverseProxy, error) {
targetURL, err := url.Parse(route.URL)
if err != nil {
return nil, err
}
director := func(req *http.Request) {
req.URL.Scheme = targetURL.Scheme
@ -115,5 +119,5 @@ func NewApiPluginProxy(ctx *models.ReqContext, proxyPath string, route *plugins.
// log.Tracef("Proxying plugin request: %s", string(reqBytes))
}
return &httputil.ReverseProxy{Director: director}
return &httputil.ReverseProxy{Director: director}, nil
}

@ -140,7 +140,8 @@ func getPluginProxiedRequest(ctx *models.ReqContext, cfg *setting.Cfg, route *pl
ReqRole: models.ROLE_EDITOR,
}
}
proxy := NewApiPluginProxy(ctx, "", route, "", cfg)
proxy, err := NewApiPluginProxy(ctx, "", route, "", cfg)
So(err, ShouldBeNil)
req, err := http.NewRequest(http.MethodGet, route.URL, nil)
So(err, ShouldBeNil)

Loading…
Cancel
Save