From 203d63a5d0fec19914e30582f32f00a4e72d4693 Mon Sep 17 00:00:00 2001 From: Jaroslaw Rozanski Date: Tue, 18 Jan 2022 23:18:06 +0100 Subject: [PATCH] Support enabling finger print; fix prefetch --- readme.txt | 7 ++++++- types/WideAngleAttributes.php | 5 ++++- types/WideAngleGenerator.php | 15 +++++++++------ types/WideAngleHelpers.php | 8 ++++++++ views/admin_settings.php | 13 +++++++++++++ wide-angle-analytics.php | 16 ++++++++++++++-- 6 files changed, 54 insertions(+), 10 deletions(-) diff --git a/readme.txt b/readme.txt index 262f12e..1355cb2 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Tags: web analytics, tracking, web traffic, analytics, statistics, stats Requires at least: 5.2 Tested up to: 5.8.2 Requires PHP: 7.2 -Stable tag: 1.0.4 +Stable tag: 1.0.5 License: GPLv2 Easily add Wide Angle Analytics tracker script to your WordPress site. You can quickly configure your web analytics tracker script. @@ -60,3 +60,8 @@ We run a business around serving the needs of our customer. That's you. You will find most of your answers in the [Knowledge Base](https://wideangle.co/documentation). Should you require further assistance, please [get in touch](https://wideangle.co/support) with our team. +== Changelog == +V1.0.5 +- Support for `data-waa-fingerprint` toggle enabling optional browser fingerprinting. +- Fix the header generate to use valid `prefetch` attribute + diff --git a/types/WideAngleAttributes.php b/types/WideAngleAttributes.php index 9be391b..73e3699 100644 --- a/types/WideAngleAttributes.php +++ b/types/WideAngleAttributes.php @@ -2,17 +2,19 @@ class WideAngleAttributes { public $siteId; public $ignoreHash; + public $fingerprint; public $trackerDomain; public $exclusionString; public $includeParamsString; private $helpers; - public function __construct($siteId, $trackerDomain, $ignoreHash, $exclusionString, $includeParamsString) { + public function __construct($siteId, $trackerDomain, $ignoreHash, $exclusionString, $includeParamsString, $fingerprint) { $this->siteId = $siteId; $this->trackerDomain = $trackerDomain; $this->ignoreHash = $ignoreHash; $this->exclusionString = $exclusionString; $this->includeParamsString = $includeParamsString; + $this->fingerprint = $fingerprint; $this->helpers = new WideAngleHelpers(); } @@ -21,6 +23,7 @@ class WideAngleAttributes { 'site_id' => $this->siteId, 'tracker_domain' => $this->trackerDomain, 'ignore_hash' => $this->ignoreHash, + 'fingerprint' => $this->fingerprint, 'exclusion_paths' => $this->generateExclusionsAttribute(), 'include_params' => $this->generateIncludeParamsAttribute() ); diff --git a/types/WideAngleGenerator.php b/types/WideAngleGenerator.php index a0a49af..b5131e9 100644 --- a/types/WideAngleGenerator.php +++ b/types/WideAngleGenerator.php @@ -8,18 +8,19 @@ class WideAngleGenerator { public $includeParams; public function __construct($attributes) { - $this->siteId = $attributes['site_id']; - $this->trackerDomain = $attributes['tracker_domain']; - $this->ignoreHash = $attributes['ignore_hash']; - $this->exclusionPaths = $attributes['exclusion_paths']; - $this->includeParams = $attributes['include_params']; + $this->siteId = $attributes['site_id']; + $this->trackerDomain = $attributes['tracker_domain']; + $this->ignoreHash = $attributes['ignore_hash']; + $this->exclusionPaths = $attributes['exclusion_paths']; + $this->includeParams = $attributes['include_params']; + $this->fingerprint = $attributes['fingerprint']; } function generateHeaderScript() { $href = esc_attr("https://{$this->trackerDomain}/script/{$this->siteId}.js"); $script = << + EOD; return $script; } @@ -29,9 +30,11 @@ EOD; $pathExlusionsAttribute = $this->exclusionPaths != '' ? "data-waa-exc-paths=\"" . esc_attr($this->exclusionPaths) . "\"": ''; $includeParamsAttribute = $this->includeParams != '' ? "data-waa-inc-params=\"" . esc_attr($this->includeParams) . "\"": ''; $ignoreHashAttribute = $this->ignoreHash != '' ? "data-waa-ignore-hash=\"" . esc_attr($this->ignoreHash) . "\"": 'data-waa-ignore-hash="false"'; + $fingerprintAttribute = $this->fingerprint != '' ? "data-waa-fingerprint=\"" . esc_attr($this->fingerprint) . "\"": ''; $script = << diff --git a/types/WideAngleHelpers.php b/types/WideAngleHelpers.php index 8f9289f..e611eb6 100644 --- a/types/WideAngleHelpers.php +++ b/types/WideAngleHelpers.php @@ -29,6 +29,14 @@ class WideAngleHelpers { } } + function validateFingerprint($name, $fingerprint) { + if(filter_var($fingerprint, FILTER_VALIDATE_BOOLEAN)) { + return WideAngleValidated::createValid($name, $fingerprint, "true"); + } else { + return WideAngleValidated::createValid($name, $fingerprint, "false"); + } + } + function validateSiteId($name, $siteId) { if(preg_match("/^[a-zA-Z0-9]{10,24}$/", $siteId)) { return WideAngleValidated::createValid($name, $siteId, strtoupper(trim($siteId))); diff --git a/views/admin_settings.php b/views/admin_settings.php index 3ebb588..85fa48d 100644 --- a/views/admin_settings.php +++ b/views/admin_settings.php @@ -2,6 +2,7 @@ $siteId = wp_unslash($this->settings[self::WAA_CONF_SITE_ID]); $trackerDomain = wp_unslash($this->settings[self::WAA_CONF_TRACKER_DOMAIN]); $ignoreHash = filter_var($this->settings[self::WAA_CONF_IGNORE_HASH], FILTER_VALIDATE_BOOLEAN); +$fingerprint = filter_var($this->settings[self::WAA_CONF_FINGERPRINT], FILTER_VALIDATE_BOOLEAN); $parsedExclusions = $this->plugin->helpers->parseExclusionSetting(wp_unslash($this->settings[self::WAA_CONF_EXC_PATHS])); $parsedIncludeParams = $this->plugin->helpers->parseIncludeParamsSetting(wp_unslash($this->settings[self::WAA_CONF_INC_PARAMS])); $generator = new WideAngleGenerator($this->settings[self::WAA_CONF_ATTRIBUTES]); @@ -125,6 +126,18 @@ $generator = new WideAngleGenerator($this->settings[self::WAA_CONF_AT

By default, w URL Fragment/hash is trasmitted as part of the tracking event. You can disable this behaviour. The fragment will be stripped before sending an event.

+ + + +
+ Browser Fingerprinting + +
+

The tracker script will not attempt to fingerprint the browser by default. You can improve tracking qaulity by enabling more reliable browser fingerprinting. Enabling this feature might require collecting consent.

+ + plugin->name, $this->plugin->name . '_nonce' ); ?> diff --git a/wide-angle-analytics.php b/wide-angle-analytics.php index 25431ec..17bc167 100644 --- a/wide-angle-analytics.php +++ b/wide-angle-analytics.php @@ -5,7 +5,7 @@ Description: Easily enable and configure Wide Angle Analytics on your Wordpress site Author: Wide Angle Analytics by Input Objects GmbH Author URI: https://wideangle.co - Version: 1.0.4 + Version: 1.0.5 Requires at least: 5.2 Requires PHP: 7.2 License: GPL v2 @@ -17,6 +17,7 @@ class WideAngleAnalytics { const WAA_CONF_SITE_ID = "waa_site_id"; const WAA_CONF_TRACKER_DOMAIN = "waa_tracker_domain"; + const WAA_CONF_FINGERPRINT = "waa_fingerprint"; const WAA_CONF_EXC_PATHS = "waa_exc_path"; const WAA_CONF_INC_PARAMS = "waa_inc_params"; const WAA_CONF_IGNORE_HASH = "waa_ignore_hash"; @@ -115,6 +116,7 @@ class WideAngleAnalytics { $waaSiteId = $this->plugin->helpers->validateSiteId(self::WAA_CONF_SITE_ID, sanitize_text_field($_REQUEST['waa_site_id'])); $waaTrackerDomain = $this->plugin->helpers->validateTrackerDomain(self::WAA_CONF_TRACKER_DOMAIN, sanitize_text_field($_REQUEST['waa_tracker_domain'])); $waaIgnoreHash = $this->plugin->helpers->validateIgnoreHashFlag(self::WAA_CONF_IGNORE_HASH, sanitize_text_field($_REQUEST['waa_ignore_hash'])); + $waaFingerprint = $this->plugin->helpers->validateFingerprint(self::WAA_CONF_FINGERPRINT, sanitize_text_field($_REQUEST['waa_fingerprint'])); $waaIncParams = $this->plugin->helpers->validateIncludeParams(self::WAA_CONF_INC_PARAMS, $_REQUEST); $waaExclusionPaths = $this->plugin->helpers->validateExclusionPathsRequest(self::WAA_CONF_EXC_PATHS, $_REQUEST); @@ -128,12 +130,20 @@ class WideAngleAnalytics { } if(count($errors) === 0) { - $attributes = new WideAngleAttributes($waaSiteId->get_value(), $waaTrackerDomain->get_value(), $waaIgnoreHash->get_value(), $waaExclusionPaths->get_value(), $waaIncParams->get_value()); + $attributes = new WideAngleAttributes( + $waaSiteId->get_value(), + $waaTrackerDomain->get_value(), + $waaIgnoreHash->get_value(), + $waaExclusionPaths->get_value(), + $waaIncParams->get_value(), + $waaFingerprint->get_value() + ); update_option(self::WAA_CONF_SITE_ID, $waaSiteId->get_value()); update_option(self::WAA_CONF_TRACKER_DOMAIN, $waaTrackerDomain->get_value()); update_option(self::WAA_CONF_IGNORE_HASH, $waaIgnoreHash->get_value()); update_option(self::WAA_CONF_EXC_PATHS, $waaExclusionPaths->get_value()); update_option(self::WAA_CONF_INC_PARAMS, $waaIncParams->get_value()); + update_option(self::WAA_CONF_FINGERPRINT, $waaFingerprint->get_value()); update_option(self::WAA_CONF_ATTRIBUTES, $attributes->generateAttributes()); $this->message = __('Settings updated', $this->plugin->name); } else { @@ -147,6 +157,7 @@ class WideAngleAnalytics { self::WAA_CONF_INC_PARAMS => get_option(self::WAA_CONF_INC_PARAMS), self::WAA_CONF_TRACKER_DOMAIN => get_option(self::WAA_CONF_TRACKER_DOMAIN), self::WAA_CONF_IGNORE_HASH => get_option(self::WAA_CONF_IGNORE_HASH), + self::WAA_CONF_FINGERPRINT => get_option(self::WAA_CONF_FINGERPRINT), self::WAA_CONF_ATTRIBUTES => get_option(self::WAA_CONF_ATTRIBUTES) ); include_once( $this->plugin->folder . '/views/admin_settings.php' ); @@ -170,6 +181,7 @@ class WideAngleAnalytics { register_setting($this->plugin->name, self::WAA_CONF_INC_PARAMS); register_setting($this->plugin->name, self::WAA_CONF_TRACKER_DOMAIN, array('default' => 'stats.wideangle.co')); register_setting($this->plugin->name, self::WAA_CONF_IGNORE_HASH, array('default' => 'false')); + register_setting($this->plugin->name, self::WAA_CONF_FINGERPRINT, array('default' => 'false')); register_setting($this->plugin->name, self::WAA_CONF_ATTRIBUTES, array('type' => 'array')); }