From 710142016b140538bfc11e48bb32d26fa685b2ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Mon, 21 May 2018 10:18:36 +0200 Subject: [PATCH] Add RespectDoNotTrack to GDPR privacy policy for Google Analytics See #4616 --- config/privacy/privacyConfig.go | 4 +++ config/privacy/privacyConfig_test.go | 2 ++ tpl/tplimpl/embedded/templates.autogen.go | 34 +++++++++++++------ .../embedded/templates/google_analytics.html | 25 ++++++++++---- .../templates/google_analytics_async.html | 9 +++-- 5 files changed, 54 insertions(+), 20 deletions(-) diff --git a/config/privacy/privacyConfig.go b/config/privacy/privacyConfig.go index c93137da4..0241b5704 100644 --- a/config/privacy/privacyConfig.go +++ b/config/privacy/privacyConfig.go @@ -44,6 +44,10 @@ type Disqus struct { // GoogleAnalytics holds the privacy configuration settings related to the Google Analytics template. type GoogleAnalytics struct { Service `mapstructure:",squash"` + + // Enabling this will make the GA templates respect the + // "Do Not Track" HTTP header. See https://www.paulfurley.com/google-analytics-dnt/. + RespectDoNotTrack bool } // Instagram holds the privacy configuration settings related to the Instagram shortcode. diff --git a/config/privacy/privacyConfig_test.go b/config/privacy/privacyConfig_test.go index 9b0d75e31..f8e2ebbd1 100644 --- a/config/privacy/privacyConfig_test.go +++ b/config/privacy/privacyConfig_test.go @@ -33,6 +33,7 @@ someOtherValue = "foo" disable = true [privacy.googleAnalytics] disable = true +respectDoNotTrack = true [privacy.instagram] disable = true [privacy.speakerDeck] @@ -54,6 +55,7 @@ noCookie = true assert.True(pc.Disqus.Disable) assert.True(pc.GoogleAnalytics.Disable) + assert.True(pc.GoogleAnalytics.RespectDoNotTrack) assert.True(pc.Instagram.Disable) assert.True(pc.SpeakerDeck.Disable) assert.True(pc.Tweet.Disable) diff --git a/tpl/tplimpl/embedded/templates.autogen.go b/tpl/tplimpl/embedded/templates.autogen.go index 8556c32c7..71a1fd14f 100644 --- a/tpl/tplimpl/embedded/templates.autogen.go +++ b/tpl/tplimpl/embedded/templates.autogen.go @@ -103,23 +103,37 @@ var EmbeddedTemplates = [][2]string{ {{- if not $pc.Disable -}} {{ with .Site.GoogleAnalytics }} {{ end }} +{{- end -}} +{{- define "__ga_js_set_doNotTrack" -}}{{/* This is also used in the async version. */}} +{{- $pc := .Site.PrivacyConfig.GoogleAnalytics -}} +{{- if not $pc.RespectDoNotTrack -}} +var doNotTrack = false; +{{- else -}} +var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack); +var doNotTrack = (dnt == "1" || dnt == "yes"); +{{- end -}} {{- end -}}`}, {`google_analytics_async.html`, `{{- $pc := .Site.PrivacyConfig.GoogleAnalytics -}} {{- if not $pc.Disable -}} {{ with .Site.GoogleAnalytics }} {{ end }} diff --git a/tpl/tplimpl/embedded/templates/google_analytics.html b/tpl/tplimpl/embedded/templates/google_analytics.html index 89c193240..8c7951b58 100755 --- a/tpl/tplimpl/embedded/templates/google_analytics.html +++ b/tpl/tplimpl/embedded/templates/google_analytics.html @@ -2,13 +2,24 @@ {{- if not $pc.Disable -}} {{ with .Site.GoogleAnalytics }} {{ end }} +{{- end -}} +{{- define "__ga_js_set_doNotTrack" -}}{{/* This is also used in the async version. */}} +{{- $pc := .Site.PrivacyConfig.GoogleAnalytics -}} +{{- if not $pc.RespectDoNotTrack -}} +var doNotTrack = false; +{{- else -}} +var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack); +var doNotTrack = (dnt == "1" || dnt == "yes"); +{{- end -}} {{- end -}} \ No newline at end of file diff --git a/tpl/tplimpl/embedded/templates/google_analytics_async.html b/tpl/tplimpl/embedded/templates/google_analytics_async.html index eb4fe9b88..48a24c1c0 100755 --- a/tpl/tplimpl/embedded/templates/google_analytics_async.html +++ b/tpl/tplimpl/embedded/templates/google_analytics_async.html @@ -2,9 +2,12 @@ {{- if not $pc.Disable -}} {{ with .Site.GoogleAnalytics }} {{ end }}