diff --git a/pixelapi/pixelapi.go b/pixelapi/pixelapi.go index a0522fe..f045e06 100644 --- a/pixelapi/pixelapi.go +++ b/pixelapi/pixelapi.go @@ -22,8 +22,8 @@ type PixelAPI struct { } // New creates a new Pixeldrain API client to query the Pixeldrain API with -func New(apiEndpoint, apiKey string) *PixelAPI { - return &PixelAPI{apiEndpoint, apiKey, ""} +func New(apiEndpoint string) *PixelAPI { + return &PixelAPI{apiEndpoint: apiEndpoint} } // Error is either an error that occurred during the API request diff --git a/webcontroller/ad_click.go b/webcontroller/ad_click.go index 196179b..c78da32 100644 --- a/webcontroller/ad_click.go +++ b/webcontroller/ad_click.go @@ -3,7 +3,6 @@ package webcontroller import ( "net/http" - "fornaxian.com/pixeldrain-api/util" "github.com/Fornaxian/log" "github.com/julienschmidt/httprouter" ) @@ -14,7 +13,6 @@ func (wc *WebController) serveAdClick(w http.ResponseWriter, r *http.Request, p // Get a view token td := wc.newTemplateData(w, r) - td.PixelAPI.RealIP = util.RemoteAddress(r) vt := viewTokenOrBust(td.PixelAPI) // Log a view on the file diff --git a/webcontroller/file_preview.go b/webcontroller/file_preview.go index a8e87a8..8c89710 100644 --- a/webcontroller/file_preview.go +++ b/webcontroller/file_preview.go @@ -23,9 +23,10 @@ func (wc *WebController) serveFilePreview(w http.ResponseWriter, r *http.Request return } - apikey, _ := wc.getAPIKey(r) - api := pixelapi.New(wc.apiURLInternal, apikey) + api := pixelapi.New(wc.apiURLInternal) + api.APIKey, _ = wc.getAPIKey(r) api.RealIP = util.RemoteAddress(r) + file, err := api.GetFileInfo(p.ByName("id")) // TODO: Error handling if err != nil { wc.serveNotFound(w, r) diff --git a/webcontroller/templates.go b/webcontroller/templates.go index e5c3c17..df38a58 100644 --- a/webcontroller/templates.go +++ b/webcontroller/templates.go @@ -43,20 +43,27 @@ type TemplateData struct { Form Form } -func (wc *WebController) newTemplateData(w http.ResponseWriter, r *http.Request) *TemplateData { - var t = &TemplateData{ +func (wc *WebController) newTemplateData(w http.ResponseWriter, r *http.Request) (t *TemplateData) { + t = &TemplateData{ Authenticated: false, Username: "", UserAgent: r.UserAgent(), Style: userStyle(r), UserStyle: template.CSS(userStyle(r).String()), APIEndpoint: template.URL(wc.apiURLExternal), + PixelAPI: pixelapi.New(wc.apiURLInternal), Hostname: template.HTML(wc.hostname), URLQuery: r.URL.Query(), } + // Use the user's IP address for making requests + t.PixelAPI.RealIP = util.RemoteAddress(r) + + // If the user is authenticated we'll indentify him and put the user info + // into the templatedata. This is used for putting the username in the menu + // and stuff like that if key, err := wc.getAPIKey(r); err == nil { - t.PixelAPI = pixelapi.New(wc.apiURLInternal, key) + t.PixelAPI.APIKey = key // Use the user's API key for all requests uinf, err := t.PixelAPI.UserInfo() if err != nil { // This session key doesn't work, or the backend is down, user @@ -91,8 +98,6 @@ func (wc *WebController) newTemplateData(w http.ResponseWriter, r *http.Request) t.Authenticated = true t.Username = uinf.Username t.Email = uinf.Email - } else { - t.PixelAPI = pixelapi.New(wc.apiURLInternal, "") } return t diff --git a/webcontroller/user_account.go b/webcontroller/user_account.go index b1ee23d..eb10591 100644 --- a/webcontroller/user_account.go +++ b/webcontroller/user_account.go @@ -16,7 +16,8 @@ func (wc *WebController) serveLogout( p httprouter.Params, ) { if key, err := wc.getAPIKey(r); err == nil { - var api = pixelapi.New(wc.apiURLInternal, key) + var api = pixelapi.New(wc.apiURLInternal) + api.APIKey = key if err = api.UserSessionDestroy(key); err != nil { log.Warn("logout failed for session '%s': %s", key, err) } diff --git a/webcontroller/user_settings.go b/webcontroller/user_settings.go index b566027..0435234 100644 --- a/webcontroller/user_settings.go +++ b/webcontroller/user_settings.go @@ -133,7 +133,9 @@ func (wc *WebController) serveEmailConfirm( ) { var status string if key, err := wc.getAPIKey(r); err == nil { - err = pixelapi.New(wc.apiURLInternal, key).UserEmailResetConfirm(r.FormValue("key")) + api := pixelapi.New(wc.apiURLInternal) + api.APIKey = key + err = api.UserEmailResetConfirm(r.FormValue("key")) if err != nil && err.Error() == "not_found" { status = "not_found" } else if err != nil { diff --git a/webcontroller/web_controller.go b/webcontroller/web_controller.go index 4f2c720..611e32e 100644 --- a/webcontroller/web_controller.go +++ b/webcontroller/web_controller.go @@ -241,7 +241,7 @@ func (wc *WebController) getAPIKey(r *http.Request) (key string, err error) { func (wc *WebController) captchaKey() string { // This only runs on the first request if wc.captchaSiteKey == "" { - var api = pixelapi.New(wc.apiURLInternal, "") + var api = pixelapi.New(wc.apiURLInternal) capt, err := api.GetRecaptcha() if err != nil { log.Error("Error getting recaptcha key: %s", err)