1
0
mirror of https://git.teknik.io/Teknikode/Teknik.git synced 2023-08-02 14:16:22 +02:00

Modified tracking to not pass in any volatile objects.

This commit is contained in:
Uncled1023 2018-01-28 02:43:12 -08:00
parent 3b17dd9e76
commit 782aba9d22
3 changed files with 52 additions and 21 deletions

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -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);
}