From e4cb103966c087d01802960e13cf6de9e4b23b74 Mon Sep 17 00:00:00 2001 From: Dan Cech Date: Wed, 24 May 2017 04:39:40 -0700 Subject: [PATCH 1/3] remove X-Forwarded-* headers added by nginx when proxying data source & plugin requests (#8418) * remove X-Forwarded-* headers added by nginx when proxying data source & plugin requests * properly handle X-Forwarded-For --- pkg/api/dataproxy.go | 22 ++++++++++++++++++++++ pkg/api/pluginproxy/pluginproxy.go | 23 ++++++++++++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/pkg/api/dataproxy.go b/pkg/api/dataproxy.go index 612d013e802..965653c2501 100644 --- a/pkg/api/dataproxy.go +++ b/pkg/api/dataproxy.go @@ -3,6 +3,7 @@ package api import ( "bytes" "io/ioutil" + "net" "net/http" "net/http/httputil" "net/url" @@ -62,6 +63,27 @@ func NewReverseProxy(ds *m.DataSource, proxyPath string, targetUrl *url.URL) *ht // clear cookie headers req.Header.Del("Cookie") req.Header.Del("Set-Cookie") + + // clear X-Forwarded Host/Port/Proto headers + req.Header.Del("X-Forwarded-Host") + req.Header.Del("X-Forwarded-Port") + req.Header.Del("X-Forwarded-Proto") + + // set X-Forwarded-For header + if req.RemoteAddr != "" { + remoteAddr, _, err := net.SplitHostPort(req.RemoteAddr) + if err != nil { + remoteAddr = req.RemoteAddr + } + if req.Header.Get("X-Forwarded-For") != "" { + req.Header.Set("X-Forwarded-For", req.Header.Get("X-Forwarded-For")+", "+remoteAddr) + } else { + req.Header.Set("X-Forwarded-For", remoteAddr) + } + } + + // reqBytes, _ := httputil.DumpRequestOut(req, true); + // log.Trace("Proxying datasource request: %s", string(reqBytes)) } return &httputil.ReverseProxy{Director: director, FlushInterval: time.Millisecond * 200} diff --git a/pkg/api/pluginproxy/pluginproxy.go b/pkg/api/pluginproxy/pluginproxy.go index 21d40ecb948..a5139bb69f7 100644 --- a/pkg/api/pluginproxy/pluginproxy.go +++ b/pkg/api/pluginproxy/pluginproxy.go @@ -5,6 +5,7 @@ import ( "encoding/json" "errors" "fmt" + "net" "net/http" "net/http/httputil" "net/url" @@ -71,7 +72,25 @@ func NewApiPluginProxy(ctx *middleware.Context, proxyPath string, route *plugins req.Header.Del("Cookie") req.Header.Del("Set-Cookie") - //Create a HTTP header with the context in it. + // clear X-Forwarded Host/Port/Proto headers + req.Header.Del("X-Forwarded-Host") + req.Header.Del("X-Forwarded-Port") + req.Header.Del("X-Forwarded-Proto") + + // set X-Forwarded-For header + if req.RemoteAddr != "" { + remoteAddr, _, err := net.SplitHostPort(req.RemoteAddr) + if err != nil { + remoteAddr = req.RemoteAddr + } + if req.Header.Get("X-Forwarded-For") != "" { + req.Header.Set("X-Forwarded-For", req.Header.Get("X-Forwarded-For")+", "+remoteAddr) + } else { + req.Header.Set("X-Forwarded-For", remoteAddr) + } + } + + // Create a HTTP header with the context in it. ctxJson, err := json.Marshal(ctx.SignedInUser) if err != nil { ctx.JsonApiErr(500, "failed to marshal context to json.", err) @@ -93,6 +112,8 @@ func NewApiPluginProxy(ctx *middleware.Context, proxyPath string, route *plugins } } + // reqBytes, _ := httputil.DumpRequestOut(req, true); + // log.Trace("Proxying plugin request: %s", string(reqBytes)) } return &httputil.ReverseProxy{Director: director} From 812958162a69b24dff14e8dbb30758b1597c4de4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Wed, 31 May 2017 10:47:04 +0200 Subject: [PATCH 2/3] revert: removed lazy loading feature, closes #8500 --- public/app/features/panel/panel_ctrl.ts | 9 --------- public/app/features/panel/panel_directive.ts | 14 -------------- 2 files changed, 23 deletions(-) diff --git a/public/app/features/panel/panel_ctrl.ts b/public/app/features/panel/panel_ctrl.ts index 8de78291baa..83c79f4123b 100644 --- a/public/app/features/panel/panel_ctrl.ts +++ b/public/app/features/panel/panel_ctrl.ts @@ -35,8 +35,6 @@ export class PanelCtrl { containerHeight: any; events: Emitter; timing: any; - skippedLastRefresh: boolean; - isPanelVisible: any; constructor($scope, $injector) { this.$injector = $injector; @@ -77,13 +75,6 @@ export class PanelCtrl { } refresh() { - if (!this.isPanelVisible() && !this.dashboard.meta.soloMode && !this.dashboard.snapshot) { - this.skippedLastRefresh = true; - return; - } - - this.skippedLastRefresh = false; - this.events.emit('refresh', null); } diff --git a/public/app/features/panel/panel_directive.ts b/public/app/features/panel/panel_directive.ts index 63fdba693cb..11906ab7d8d 100644 --- a/public/app/features/panel/panel_directive.ts +++ b/public/app/features/panel/panel_directive.ts @@ -185,23 +185,9 @@ module.directive('grafanaPanel', function($rootScope, $document) { elem.on('mouseenter', mouseEnter); elem.on('mouseleave', mouseLeave); - ctrl.isPanelVisible = function () { - var position = panelContainer[0].getBoundingClientRect(); - return (0 < position.top) && (position.top < window.innerHeight); - }; - - const refreshOnScroll = function () { - if (ctrl.skippedLastRefresh) { - ctrl.refresh(); - } - }; - - $document.on('scroll', refreshOnScroll); - scope.$on('$destroy', function() { elem.off(); cornerInfoElem.off(); - $document.off('scroll', refreshOnScroll); if (infoDrop) { infoDrop.destroy(); From ed4d170bcce8697bda28a65a33c630a2628d989e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Wed, 31 May 2017 10:48:16 +0200 Subject: [PATCH 3/3] build: updated version to v4.3.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9f9a4364e33..5d028de93b0 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "company": "Coding Instinct AB" }, "name": "grafana", - "version": "4.3.1", + "version": "4.3.2", "repository": { "type": "git", "url": "http://github.com/grafana/grafana.git"