From a58d9218e623d18fe7ed54be46518ac291ebf7d4 Mon Sep 17 00:00:00 2001 From: Wim Brand Date: Wed, 5 Jun 2019 00:12:00 +0200 Subject: [PATCH] Properly set remote user address --- pixelapi/pixelapi.go | 15 ++++++++++++++- webcontroller/file_preview.go | 5 ++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/pixelapi/pixelapi.go b/pixelapi/pixelapi.go index ab2ca91..5691bfe 100644 --- a/pixelapi/pixelapi.go +++ b/pixelapi/pixelapi.go @@ -17,11 +17,12 @@ var client = &http.Client{} type PixelAPI struct { apiEndpoint string apiKey string + RealIP string } // New creates a new Pixeldrain API client to query the Pixeldrain API with func New(apiEndpoint, apiKey string) *PixelAPI { - return &PixelAPI{apiEndpoint, apiKey} + return &PixelAPI{apiEndpoint, apiKey, ""} } // Error is either an error that occurred during the API request @@ -61,6 +62,9 @@ func (p *PixelAPI) jsonRequest(method, url string, target interface{}) error { if p.apiKey != "" { req.SetBasicAuth("", p.apiKey) } + if p.RealIP != "" { + req.Header.Set("X-Real-IP", p.RealIP) + } resp, err := client.Do(req) if err != nil { @@ -84,6 +88,9 @@ func (p *PixelAPI) getString(url string) (string, error) { if p.apiKey != "" { req.SetBasicAuth("", p.apiKey) } + if p.RealIP != "" { + req.Header.Set("X-Real-IP", p.RealIP) + } resp, err := client.Do(req) if err != nil { @@ -105,6 +112,9 @@ func (p *PixelAPI) getRaw(url string) (io.ReadCloser, error) { if p.apiKey != "" { req.SetBasicAuth("", p.apiKey) } + if p.RealIP != "" { + req.Header.Set("X-Real-IP", p.RealIP) + } resp, err := client.Do(req) if err != nil { @@ -133,6 +143,9 @@ func (p *PixelAPI) form( if p.apiKey != "" { req.SetBasicAuth("", p.apiKey) } + if p.RealIP != "" { + req.Header.Set("X-Real-IP", p.RealIP) + } req.Header.Set("Content-Type", "application/x-www-form-urlencoded") diff --git a/webcontroller/file_preview.go b/webcontroller/file_preview.go index f473b7e..ff1b60c 100644 --- a/webcontroller/file_preview.go +++ b/webcontroller/file_preview.go @@ -10,6 +10,7 @@ import ( "path/filepath" "strings" + "fornaxian.com/pixeldrain-api/util" "fornaxian.com/pixeldrain-web/pixelapi" "github.com/Fornaxian/log" @@ -23,7 +24,9 @@ func (wc *WebController) serveFilePreview(w http.ResponseWriter, r *http.Request serveFilePreviewDemo(w) // Required for a-ads.com quality check return } - var api = pixelapi.New(wc.conf.APIURLInternal, "") + apikey, _ := wc.getAPIKey(r) + var api = pixelapi.New(wc.conf.APIURLInternal, apikey) + api.RealIP = util.RemoteAddress(r) inf, err := api.GetFileInfo(p.ByName("id"), "?should_a_view_be_added=yes_gimme") // TODO: Error handling if err != nil { wc.serveNotFound(w, r)