From 782aba9d22d412ad8fc0f58bbed55475dfd7698b Mon Sep 17 00:00:00 2001 From: Uncled1023 Date: Sun, 28 Jan 2018 02:43:12 -0800 Subject: [PATCH] Modified tracking to not pass in any volatile objects. --- Teknik/Filters/TrackDownload.cs | 20 +++++++++++++++++--- Teknik/Filters/TrackLink.cs | 20 +++++++++++++++++--- Utilities/Piwik/Tracking.cs | 33 ++++++++++++++++++--------------- 3 files changed, 52 insertions(+), 21 deletions(-) diff --git a/Teknik/Filters/TrackDownload.cs b/Teknik/Filters/TrackDownload.cs index 9f3cedf..93971ae 100644 --- a/Teknik/Filters/TrackDownload.cs +++ b/Teknik/Filters/TrackDownload.cs @@ -26,16 +26,30 @@ namespace Teknik.Filters if (config.PiwikConfig.Enabled) { HttpRequestBase request = filterContext.HttpContext.Request; + + string doNotTrack = request.Headers["DNT"]; + bool dnt = (string.IsNullOrEmpty(doNotTrack) || doNotTrack != "1"); + + string userAgent = request.UserAgent; + + string ipAddress = request.ClientIPFromRequest(true); + + string urlReferrer = request.UrlReferrer?.ToString(); + + string url = string.Empty; + if (request.Url != null) + url = request.Url.ToString(); + // Fire and forget. Don't need to wait for it. - Task.Run(() => AsyncTrackDownload(request, config, request.Url?.ToString())); + Task.Run(() => AsyncTrackDownload(dnt, config.PiwikConfig.SiteId, config.PiwikConfig.Url, userAgent, ipAddress, config.PiwikConfig.TokenAuth, url, urlReferrer)); } base.OnActionExecuted(filterContext); } - private void AsyncTrackDownload(HttpRequestBase request, Config config, string url) + private void AsyncTrackDownload(bool dnt, int siteId, string siteUrl, string userAgent, string clientIp, string token, string url, string urlReferrer) { - Tracking.TrackDownload(request, config, url); + Tracking.TrackDownload(dnt, siteId, siteUrl, userAgent, clientIp, token, url, urlReferrer); } } } diff --git a/Teknik/Filters/TrackLink.cs b/Teknik/Filters/TrackLink.cs index 82da190..66de1c4 100644 --- a/Teknik/Filters/TrackLink.cs +++ b/Teknik/Filters/TrackLink.cs @@ -7,6 +7,7 @@ using System.Web; using System.Web.Mvc; using Teknik.Configuration; using Teknik.Piwik; +using Teknik.Utilities; namespace Teknik.Filters { @@ -25,16 +26,29 @@ namespace Teknik.Filters { HttpRequestBase request = filterContext.HttpContext.Request; + string doNotTrack = request.Headers["DNT"]; + bool dnt = (string.IsNullOrEmpty(doNotTrack) || doNotTrack != "1"); + + string userAgent = request.UserAgent; + + string ipAddress = request.ClientIPFromRequest(true); + + string urlReferrer = request.UrlReferrer?.ToString(); + + string url = string.Empty; + if (request.Url != null) + url = request.Url.ToString(); + // Fire and forget. Don't need to wait for it. - Task.Run(() => AsyncTrackLink(request, config, request.Url?.ToString())); + Task.Run(() => AsyncTrackLink(dnt, config.PiwikConfig.SiteId, config.PiwikConfig.Url, userAgent, ipAddress, config.PiwikConfig.TokenAuth, url, urlReferrer)); } base.OnActionExecuted(filterContext); } - private void AsyncTrackLink(HttpRequestBase request, Config config, string url) + private void AsyncTrackLink(bool dnt, int siteId, string siteUrl, string userAgent, string clientIp, string token, string url, string urlReferrer) { - Tracking.TrackLink(request, config, url); + Tracking.TrackLink(dnt, siteId, siteUrl, userAgent, clientIp, token, url, urlReferrer); } } } diff --git a/Utilities/Piwik/Tracking.cs b/Utilities/Piwik/Tracking.cs index f8e6623..92a251f 100644 --- a/Utilities/Piwik/Tracking.cs +++ b/Utilities/Piwik/Tracking.cs @@ -51,6 +51,9 @@ namespace Teknik.Piwik if (request.UrlReferrer != null) tracker.SetUrlReferrer(request.UrlReferrer.ToString()); + if (request.Url != null) + tracker.SetUrl(request.Url.ToString()); + // Send the tracking request tracker.DoTrackPageView(string.Format("{0}/{1}", sub, title)); } @@ -61,36 +64,36 @@ namespace Teknik.Piwik } } - public static void TrackDownload(HttpRequestBase request, Config config, string url) + public static void TrackDownload(bool dnt, int siteId, string siteUrl, string userAgent, string clientIp, string token, string url, string urlReferrer) { - TrackAction(request, config, url, ActionType.Download); + TrackAction(ActionType.Download, dnt, siteId, siteUrl, userAgent, clientIp, token, url, urlReferrer); } - public static void TrackLink(HttpRequestBase request, Config config, string url) + public static void TrackLink(bool dnt, int siteId, string siteUrl, string userAgent, string clientIp, string token, string url, string urlReferrer) { - TrackAction(request, config, url, ActionType.Link); + TrackAction(ActionType.Link, dnt, siteId, siteUrl, userAgent, clientIp, token, url, urlReferrer); } - private static void TrackAction(HttpRequestBase request, Config config, string url, ActionType type) + private static void TrackAction(ActionType type, bool dnt, int siteId, string siteUrl, string userAgent, string clientIp, string token, string url, string urlReferrer) { try { // Follow Do Not Track - string doNotTrack = request.Headers["DNT"]; - if (string.IsNullOrEmpty(doNotTrack) || doNotTrack != "1") + if (dnt) { - PiwikTracker tracker = new PiwikTracker(config.PiwikConfig.SiteId, config.PiwikConfig.Url); + PiwikTracker tracker = new PiwikTracker(siteId, siteUrl); - tracker.SetUserAgent(request.UserAgent); + tracker.SetUserAgent(userAgent); - string ipAddress = request.ClientIPFromRequest(true); - - tracker.SetIp(ipAddress); - tracker.SetTokenAuth(config.PiwikConfig.TokenAuth); + tracker.SetIp(clientIp); + tracker.SetTokenAuth(token); // Get Referral - if (request.UrlReferrer != null) - tracker.SetUrlReferrer(request.UrlReferrer.ToString()); + if (!string.IsNullOrEmpty(urlReferrer)) + tracker.SetUrlReferrer(urlReferrer); + + if (!string.IsNullOrEmpty(url)) + tracker.SetUrl(url); tracker.DoTrackAction(url, type); }