diff --git a/internal/httputil/httpapi.go b/internal/httputil/httpapi.go index 9c4ea59d4..c42a1dbd0 100644 --- a/internal/httputil/httpapi.go +++ b/internal/httputil/httpapi.go @@ -239,6 +239,9 @@ func MakeExternalAPI(metricsName string, f func(*http.Request) util.JSONResponse span := opentracing.StartSpan(metricsName) defer span.Finish() req = req.WithContext(opentracing.ContextWithSpan(req.Context(), span)) + if forwardedFor := req.Header.Get("X-Forwarded-For"); forwardedFor != "" { + req.RemoteAddr = forwardedFor + } h.ServeHTTP(nextWriter, req) } diff --git a/syncapi/storage/sqlite3/account_data_table.go b/syncapi/storage/sqlite3/account_data_table.go index d8967113a..de0e72dbd 100644 --- a/syncapi/storage/sqlite3/account_data_table.go +++ b/syncapi/storage/sqlite3/account_data_table.go @@ -105,7 +105,9 @@ func (s *accountDataStatements) SelectAccountDataInRange( filter.Senders, filter.NotSenders, filter.Types, filter.NotTypes, []string{}, nil, filter.Limit, FilterOrderAsc) - + if err != nil { + return + } rows, err := stmt.QueryContext(ctx, params...) if err != nil { return diff --git a/syncapi/sync/requestpool.go b/syncapi/sync/requestpool.go index 1733a15b0..57cd96871 100644 --- a/syncapi/sync/requestpool.go +++ b/syncapi/sync/requestpool.go @@ -191,6 +191,9 @@ func (rp *RequestPool) updateLastSeen(req *http.Request, device *userapi.Device) return } + if forwardedFor := req.Header.Get("X-Forwarded-For"); forwardedFor != "" { + req.RemoteAddr = forwardedFor + } remoteAddr := req.RemoteAddr if rp.cfg.RealIPHeader != "" { if header := req.Header.Get(rp.cfg.RealIPHeader); header != "" {