From 9b47ee27ef0e7fc72962a95b031be4d9bbb381d4 Mon Sep 17 00:00:00 2001 From: Danny van Kooten Date: Thu, 28 Jun 2018 10:37:02 +0200 Subject: [PATCH] parse hostname from client instead of relying on http header. fixes #79 --- assets/src/js/tracker.js | 14 ++++++++++---- pkg/api/collect.go | 11 +---------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/assets/src/js/tracker.js b/assets/src/js/tracker.js index 778c059..48c1938 100644 --- a/assets/src/js/tracker.js +++ b/assets/src/js/tracker.js @@ -68,17 +68,22 @@ function trackPageview() { return; } - // get the path or canonical - let path = location.pathname + location.search; + let req = window.location; - // parse path from canonical, if page has one + // parse canonical, if page has one let canonical = document.querySelector('link[rel="canonical"][href]'); if(canonical) { let a = document.createElement('a'); a.href = canonical.href; - path = a.pathname; + + // use parsed canonical as location object + req = a; } + // get path and pathname from location or canonical + let path = req.pathname + req.search; + let hostname = req.protocol + "//" + req.hostname; + // if parsing path failed, default to main page if(!path) { path = '/'; @@ -94,6 +99,7 @@ function trackPageview() { const d = { sid: data.sid, p: path, + h: hostname, t: document.title, r: referrer, u: data.pagesViewed.indexOf(path) == -1 ? 1 : 0, diff --git a/pkg/api/collect.go b/pkg/api/collect.go index 06c75dd..40963da 100644 --- a/pkg/api/collect.go +++ b/pkg/api/collect.go @@ -25,10 +25,6 @@ func shouldCollect(r *http.Request) bool { return false } - if r.Referer() == "" { - return false - } - return true } @@ -79,15 +75,10 @@ func (api *API) NewCollectHandler() http.Handler { q := r.URL.Query() now := time.Now() - hostname := parseHostname(r.Referer()) - if hostname == "" { - return nil - } - // get pageview details pageview := &models.Pageview{ SessionID: q.Get("sid"), - Hostname: hostname, + Hostname: parseHostname(q.Get("h")), Pathname: parsePathname(q.Get("p")), IsNewVisitor: q.Get("nv") == "1", IsNewSession: q.Get("ns") == "1",