From 9cfe675d1623d5a1eba5494adc6c2bc1ca8459dc Mon Sep 17 00:00:00 2001 From: Wim Brand Date: Fri, 21 Feb 2020 14:23:29 +0100 Subject: [PATCH] fix get viewtoken --- webcontroller/ad_click.go | 17 +++++++++++++---- webcontroller/file_viewer.go | 6 +++--- webcontroller/web_controller.go | 5 +++++ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/webcontroller/ad_click.go b/webcontroller/ad_click.go index c78da32..647b290 100644 --- a/webcontroller/ad_click.go +++ b/webcontroller/ad_click.go @@ -3,6 +3,10 @@ package webcontroller import ( "net/http" + "fornaxian.com/pixeldrain-api/util" + + "fornaxian.com/pixeldrain-web/pixelapi" + "github.com/Fornaxian/log" "github.com/julienschmidt/httprouter" ) @@ -11,12 +15,17 @@ func (wc *WebController) serveAdClick(w http.ResponseWriter, r *http.Request, p // Redirect the user to the target page http.Redirect(w, r, r.URL.Query().Get("target"), http.StatusTemporaryRedirect) - // Get a view token - td := wc.newTemplateData(w, r) - vt := viewTokenOrBust(td.PixelAPI) + api := pixelapi.New(wc.apiURLInternal) + + // Get the view token without authentication + vt := viewTokenOrBust(api) + + // Apply authentication and register the view + api.APIKey, _ = wc.getAPIKey(r) + api.RealIP = util.RemoteAddress(r) // Log a view on the file - if err := td.PixelAPI.PostFileView(p.ByName("id"), vt); err != nil { + if err := api.PostFileView(p.ByName("id"), vt); err != nil { log.Warn("Failed to log view") } } diff --git a/webcontroller/file_viewer.go b/webcontroller/file_viewer.go index 4155087..3fce5e2 100644 --- a/webcontroller/file_viewer.go +++ b/webcontroller/file_viewer.go @@ -68,7 +68,7 @@ func (wc *WebController) serveFileViewer(w http.ResponseWriter, r *http.Request, templateData.Other = viewerData{ Type: "list", CaptchaKey: wc.captchaKey(), - ViewToken: viewTokenOrBust(templateData.PixelAPI), + ViewToken: viewTokenOrBust(wc.systemPixelAPI), APIResponse: pixelapi.List{ Success: true, Title: "Multiple files", @@ -81,7 +81,7 @@ func (wc *WebController) serveFileViewer(w http.ResponseWriter, r *http.Request, templateData.Other = viewerData{ Type: "file", CaptchaKey: wc.captchaKey(), - ViewToken: viewTokenOrBust(templateData.PixelAPI), + ViewToken: viewTokenOrBust(wc.systemPixelAPI), APIResponse: finfo[0].FileInfo, } } @@ -143,7 +143,7 @@ func (wc *WebController) serveListViewer(w http.ResponseWriter, r *http.Request, templateData.Other = viewerData{ Type: "list", CaptchaKey: wc.captchaSiteKey, - ViewToken: viewTokenOrBust(templateData.PixelAPI), + ViewToken: viewTokenOrBust(wc.systemPixelAPI), APIResponse: list, } diff --git a/webcontroller/web_controller.go b/webcontroller/web_controller.go index 611e32e..9855e15 100644 --- a/webcontroller/web_controller.go +++ b/webcontroller/web_controller.go @@ -33,6 +33,10 @@ type WebController struct { captchaSiteKey string httpClient *http.Client + + // This API client should only be used for system functions like getting + // view tokens. It has no authentication and no IP forwarding + systemPixelAPI *pixelapi.PixelAPI } // New initializes a new WebController by registering all the request handlers @@ -54,6 +58,7 @@ func New( apiURLExternal: apiURLExternal, sessionCookieDomain: sessionCookieDomain, httpClient: &http.Client{Timeout: time.Minute * 10}, + systemPixelAPI: pixelapi.New(apiURLInternal), } wc.templates = NewTemplateManager(resourceDir, apiURLExternal, debugMode) wc.templates.ParseTemplates(false)