tpl: Add Do Not Track (dnt) option to Vimeo shortcode
authorJosh Gerdes <joshgerdes@gmail.com>
Fri, 2 Oct 2020 19:52:00 +0000 (14:52 -0500)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 2 Oct 2020 21:02:38 +0000 (23:02 +0200)
Added a Vimeo EnableDNT privacy option to the Hugo config. This will enable the Vimeo 'Do Not Track' flag when either Vimeo shortcode tempalte options are used. When enabled, it will force the Vimeo player to be blocked from tracking any session data, including all cookies and stats.

Fixes #7700

config/privacy/privacyConfig.go
config/privacy/privacyConfig_test.go
docs/content/en/about/hugo-and-gdpr.md
resources/page/page_marshaljson.autogen.go
tpl/tplimpl/embedded/templates.autogen.go
tpl/tplimpl/embedded/templates/shortcodes/vimeo.html
tpl/tplimpl/embedded/templates/shortcodes/vimeo_simple.html

index ea34563eb04324e139c65af6246064e8b04e6d47..a360463643f39a2370d807f89011744e5c7af91b 100644 (file)
@@ -80,6 +80,10 @@ type Twitter struct {
 type Vimeo struct {
        Service `mapstructure:",squash"`
 
+       // When set to true, the Vimeo player will be blocked from tracking any session data,
+       // including all cookies and stats.
+       EnableDNT bool
+
        // If simple mode is enabled, only a thumbnail is fetched from i.vimeocdn.com and
        // shown with a play button overlaid. If a user clicks the button, he/she will
        // be taken to the video page on vimeo.com in a new browser tab.
index d798721e1d19ead4bf4860480028fa90b56f4c24..a750ba2823c1d0beb05dd1130669d95f7f51704c 100644 (file)
@@ -45,6 +45,7 @@ enableDNT = true
 simple = true
 [privacy.vimeo]
 disable = true
+enableDNT = true
 simple = true
 [privacy.youtube]
 disable = true
@@ -63,7 +64,7 @@ simple = true
                pc.GoogleAnalytics.RespectDoNotTrack, pc.GoogleAnalytics.AnonymizeIP,
                pc.GoogleAnalytics.UseSessionStorage, pc.Instagram.Disable,
                pc.Instagram.Simple, pc.Twitter.Disable, pc.Twitter.EnableDNT,
-               pc.Twitter.Simple, pc.Vimeo.Disable, pc.Vimeo.Simple,
+               pc.Twitter.Simple, pc.Vimeo.Disable, pc.Vimeo.EnableDNT, pc.Vimeo.Simple,
                pc.YouTube.PrivacyEnhanced, pc.YouTube.Disable,
        }
 
index 7c1c9bed4452c1d617f53a22bb773a1c9ec3e8bc..df0234a3b71a1862a16cbe7d6a02e78e03cd3750 100644 (file)
@@ -51,6 +51,7 @@ enableDNT = false
 simple = false
 [privacy.vimeo]
 disable = false
+enableDNT = false
 simple = false
 [privacy.youtube]
 disable = false
@@ -128,6 +129,9 @@ privacyEnhanced
 
 ### Vimeo
 
+enableDNT
+: Enabling this for the vimeo shortcode, the Vimeo player will be blocked from tracking any session data, including all cookies and stats.
+
 simple
 : If simple mode is enabled, the video thumbnail is fetched from Vimeo's servers and it is overlayed with a play button. If the user clicks to play the video, it will open in a new tab directly on Vimeo's website.
 
index c01dceeaf23b17accf1b22b75126628e8e251a6f..2286f1e633f31ea1e02670512ef03d9c2be93e74 100644 (file)
@@ -21,6 +21,7 @@ import (
        "github.com/gohugoio/hugo/common/maps"
        "github.com/gohugoio/hugo/config"
        "github.com/gohugoio/hugo/hugofs/files"
+       "github.com/gohugoio/hugo/identity"
        "github.com/gohugoio/hugo/langs"
        "github.com/gohugoio/hugo/media"
        "github.com/gohugoio/hugo/navigation"
@@ -87,6 +88,7 @@ func MarshalPageToJSON(p Page) ([]byte, error) {
        isTranslated := p.IsTranslated()
        allTranslations := p.AllTranslations()
        translations := p.Translations()
+       getIdentity := p.GetIdentity()
 
        s := struct {
                Content                  interface{}
@@ -143,6 +145,7 @@ func MarshalPageToJSON(p Page) ([]byte, error) {
                IsTranslated             bool
                AllTranslations          Pages
                Translations             Pages
+               GetIdentity              identity.Identity
        }{
                Content:                  content,
                Plain:                    plain,
@@ -198,6 +201,7 @@ func MarshalPageToJSON(p Page) ([]byte, error) {
                IsTranslated:             isTranslated,
                AllTranslations:          allTranslations,
                Translations:             translations,
+               GetIdentity:              getIdentity,
        }
 
        return json.Marshal(&s)
index 6a684493339b4a9158c65e640b58968aaa27e17f..ccdc9197bde9bee6e79996811d4cd9b6746dedbd 100644 (file)
@@ -496,16 +496,19 @@ if (!doNotTrack) {
 {{ template "_internal/shortcodes/vimeo_simple.html" . }}
 {{- else -}}
 {{ if .IsNamedParams }}<div {{ if .Get "class" }}class="{{ .Get "class" }}"{{ else }}style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"{{ end }}>
-  <iframe src="https://player.vimeo.com/video/{{ .Get "id" }}" {{ if not (.Get "class") }}style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" {{ end }}{{ if .Get "title"}}title="{{ .Get "title" }}"{{ else }}title="vimeo video"{{ end }} webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
- </div>{{ else }}
+  <iframe src="https://player.vimeo.com/video/{{ .Get "id" }}{{- if $pc.EnableDNT -}}?dnt=1{{- end -}}" {{ if not (.Get "class") }}style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" {{ end }}{{ if .Get "title"}}title="{{ .Get "title" }}"{{ else }}title="vimeo video"{{ end }} webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
+</div>{{ else }}
 <div {{ if gt (len .Params) 1 }}class="{{ .Get 1 }}"{{ else }}style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"{{ end }}>
-  <iframe src="https://player.vimeo.com/video/{{ .Get 0 }}" {{ if len .Params | eq 1 }}style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" {{ end }}{{ if len .Params | eq 3 }}title="{{ .Get 2 }}"{{ else }}title="vimeo video"{{ end }} webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
- </div>
+  <iframe src="https://player.vimeo.com/video/{{ .Get 0 }}{{- if $pc.EnableDNT -}}?dnt=1{{- end -}}" {{ if len .Params | eq 1 }}style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" {{ end }}{{ if len .Params | eq 3 }}title="{{ .Get 2 }}"{{ else }}title="vimeo video"{{ end }} webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
+</div>
 {{ end }}
 {{- end -}}
 {{- end -}}`},
-       {`shortcodes/vimeo_simple.html`, `{{ $id := .Get "id" | default (.Get 0) }}
-{{- $item := getJSON "https://vimeo.com/api/oembed.json?url=https://vimeo.com/" $id -}}
+       {`shortcodes/vimeo_simple.html`, `{{- $pc := .Page.Site.Config.Privacy.Vimeo -}}
+{{- if not $pc.Disable -}}
+{{ $id := .Get "id" | default (.Get 0) }}
+{{ $dnt := cond (eq $pc.EnableDNT true) "?dnt=1" "" }}
+{{- $item := getJSON (print "https://vimeo.com/api/oembed.json?url=https://vimeo.com/" $id $dnt) -}}
 {{ $class := .Get "class" | default (.Get 1) }}
 {{ $hasClass := $class }}
 {{ $class := $class | default "__h_video" }}
@@ -522,7 +525,7 @@ if (!doNotTrack) {
 <img src="{{ $thumb }}" srcset="{{ $thumb }} 1x, {{ $original }} 2x" alt="{{ .title }}">
 <div class="play">{{ template "__h_simple_icon_play" $ }}</div></a></div>
 {{- end -}}
-`},
+{{- end -}}`},
        {`shortcodes/youtube.html`, `{{- $pc := .Page.Site.Config.Privacy.YouTube -}}
 {{- if not $pc.Disable -}}
 {{- $ytHost := cond $pc.PrivacyEnhanced  "www.youtube-nocookie.com" "www.youtube.com" -}}
index 1680c16948eee48ecc6efd8729f22310d8d86592..8ddad9b43b5bd1939b4363f4ccdfa6fa635fd0c6 100644 (file)
@@ -4,11 +4,11 @@
 {{ template "_internal/shortcodes/vimeo_simple.html" . }}
 {{- else -}}
 {{ if .IsNamedParams }}<div {{ if .Get "class" }}class="{{ .Get "class" }}"{{ else }}style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"{{ end }}>
-  <iframe src="https://player.vimeo.com/video/{{ .Get "id" }}" {{ if not (.Get "class") }}style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" {{ end }}{{ if .Get "title"}}title="{{ .Get "title" }}"{{ else }}title="vimeo video"{{ end }} webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
- </div>{{ else }}
+  <iframe src="https://player.vimeo.com/video/{{ .Get "id" }}{{- if $pc.EnableDNT -}}?dnt=1{{- end -}}" {{ if not (.Get "class") }}style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" {{ end }}{{ if .Get "title"}}title="{{ .Get "title" }}"{{ else }}title="vimeo video"{{ end }} webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
+</div>{{ else }}
 <div {{ if gt (len .Params) 1 }}class="{{ .Get 1 }}"{{ else }}style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"{{ end }}>
-  <iframe src="https://player.vimeo.com/video/{{ .Get 0 }}" {{ if len .Params | eq 1 }}style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" {{ end }}{{ if len .Params | eq 3 }}title="{{ .Get 2 }}"{{ else }}title="vimeo video"{{ end }} webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
- </div>
+  <iframe src="https://player.vimeo.com/video/{{ .Get 0 }}{{- if $pc.EnableDNT -}}?dnt=1{{- end -}}" {{ if len .Params | eq 1 }}style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" {{ end }}{{ if len .Params | eq 3 }}title="{{ .Get 2 }}"{{ else }}title="vimeo video"{{ end }} webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
+</div>
 {{ end }}
 {{- end -}}
 {{- end -}}
\ No newline at end of file
index 9a4fb794d1084dce3dd83ea9adc193a801ed4364..00080ab59033f46ca4fd4ab806b8536a9c33be64 100644 (file)
@@ -1,5 +1,8 @@
+{{- $pc := .Page.Site.Config.Privacy.Vimeo -}}
+{{- if not $pc.Disable -}}
 {{ $id := .Get "id" | default (.Get 0) }}
-{{- $item := getJSON "https://vimeo.com/api/oembed.json?url=https://vimeo.com/" $id -}}
+{{ $dnt := cond (eq $pc.EnableDNT true) "?dnt=1" "" }}
+{{- $item := getJSON (print "https://vimeo.com/api/oembed.json?url=https://vimeo.com/" $id $dnt) -}}
 {{ $class := .Get "class" | default (.Get 1) }}
 {{ $hasClass := $class }}
 {{ $class := $class | default "__h_video" }}
@@ -16,3 +19,4 @@
 <img src="{{ $thumb }}" srcset="{{ $thumb }} 1x, {{ $original }} 2x" alt="{{ .title }}">
 <div class="play">{{ template "__h_simple_icon_play" $ }}</div></a></div>
 {{- end -}}
+{{- end -}}
\ No newline at end of file