gnetproxy.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package api
  2. import (
  3. "crypto/tls"
  4. "net"
  5. "net/http"
  6. "net/http/httputil"
  7. "time"
  8. "github.com/grafana/grafana/pkg/middleware"
  9. "github.com/grafana/grafana/pkg/util"
  10. )
  11. var gNetProxyTransport = &http.Transport{
  12. TLSClientConfig: &tls.Config{InsecureSkipVerify: false},
  13. Proxy: http.ProxyFromEnvironment,
  14. Dial: (&net.Dialer{
  15. Timeout: 30 * time.Second,
  16. KeepAlive: 30 * time.Second,
  17. }).Dial,
  18. TLSHandshakeTimeout: 10 * time.Second,
  19. }
  20. func ReverseProxyGnetReq(proxyPath string) *httputil.ReverseProxy {
  21. director := func(req *http.Request) {
  22. req.URL.Scheme = "https"
  23. req.URL.Host = "grafana.net"
  24. req.Host = "grafana.net"
  25. req.URL.Path = util.JoinUrlFragments("https://grafana.net/api", proxyPath)
  26. // clear cookie headers
  27. req.Header.Del("Cookie")
  28. req.Header.Del("Set-Cookie")
  29. }
  30. return &httputil.ReverseProxy{Director: director}
  31. }
  32. func ProxyGnetRequest(c *middleware.Context) {
  33. proxyPath := c.Params("*")
  34. proxy := ReverseProxyGnetReq(proxyPath)
  35. proxy.Transport = gNetProxyTransport
  36. proxy.ServeHTTP(c.Resp, c.Req.Request)
  37. c.Resp.Header().Del("Set-Cookie")
  38. }