mirror of
https://github.com/grafana/grafana.git
synced 2024-12-25 08:21:46 -06:00
5ff94e528b
The old GrafanaComURL setting didn't have the /api suffix so needed it adding on by the proxy director, but the new GrafanaComAPIURL setting is assumed to already point directly to the API and doesn't need an additional suffix. This is the only place in the codebase that GrafanaComAPIURL is used.
54 lines
1.5 KiB
Go
54 lines
1.5 KiB
Go
package api
|
|
|
|
import (
|
|
"net"
|
|
"net/http"
|
|
"net/http/httputil"
|
|
"net/url"
|
|
"time"
|
|
|
|
"github.com/grafana/grafana/pkg/infra/log"
|
|
contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model"
|
|
"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, grafanaComAPIUrl string) *httputil.ReverseProxy {
|
|
url, _ := url.Parse(grafanaComAPIUrl)
|
|
|
|
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, 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 *contextmodel.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)
|
|
}
|