mirror of
https://github.com/grafana/grafana.git
synced 2025-02-20 11:48:34 -06:00
During the review of the initial PR adding this (#59506) I removed a new global variable from the setting package, but forgot to update the reference to the new setting, so the API URL wasn't actually being used. This PR updates the proxy endpoint to use the API URL correctly. Aside: I'm not a huge fan of how the error is being ignored when parsing the URL, but I think that should be addressed in a separate PR if anyone has a suggestion for how we should handle it. (Should we check that the URL is valid when parsing config?)
54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
package api
|
|
|
|
import (
|
|
"net"
|
|
"net/http"
|
|
"net/http/httputil"
|
|
"net/url"
|
|
"time"
|
|
|
|
"github.com/grafana/grafana/pkg/infra/log"
|
|
"github.com/grafana/grafana/pkg/models"
|
|
"github.com/grafana/grafana/pkg/util"
|
|
"github.com/grafana/grafana/pkg/util/proxyutil"
|
|
"github.com/grafana/grafana/pkg/web"
|
|
)
|
|
|
|
var grafanaComProxyTransport = &http.Transport{
|
|
Proxy: http.ProxyFromEnvironment,
|
|
DialContext: (&net.Dialer{
|
|
Timeout: 30 * time.Second,
|
|
KeepAlive: 30 * time.Second,
|
|
}).DialContext,
|
|
TLSHandshakeTimeout: 10 * time.Second,
|
|
}
|
|
|
|
func ReverseProxyGnetReq(logger log.Logger, proxyPath string, version string, grafanaComUrl string) *httputil.ReverseProxy {
|
|
url, _ := url.Parse(grafanaComUrl)
|
|
|
|
director := func(req *http.Request) {
|
|
req.URL.Scheme = url.Scheme
|
|
req.URL.Host = url.Host
|
|
req.Host = url.Host
|
|
|
|
req.URL.Path = util.JoinURLFragments(url.Path+"/api", proxyPath)
|
|
|
|
// clear cookie headers
|
|
req.Header.Del("Cookie")
|
|
req.Header.Del("Set-Cookie")
|
|
req.Header.Del("Authorization")
|
|
|
|
// send the current Grafana version for each request proxied to GCOM
|
|
req.Header.Add("grafana-version", version)
|
|
}
|
|
|
|
return proxyutil.NewReverseProxy(logger, director)
|
|
}
|
|
|
|
func (hs *HTTPServer) ProxyGnetRequest(c *models.ReqContext) {
|
|
proxyPath := web.Params(c.Req)["*"]
|
|
proxy := ReverseProxyGnetReq(c.Logger, proxyPath, hs.Cfg.BuildVersion, hs.Cfg.GrafanaComAPIURL)
|
|
proxy.Transport = grafanaComProxyTransport
|
|
proxy.ServeHTTP(c.Resp, c.Req)
|
|
}
|