privacyConfig.go (3648B)
1 // Copyright 2018 The Hugo Authors. All rights reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // http://www.apache.org/licenses/LICENSE-2.0 7 // 8 // Unless required by applicable law or agreed to in writing, software 9 // distributed under the License is distributed on an "AS IS" BASIS, 10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package privacy 15 16 import ( 17 "github.com/gohugoio/hugo/config" 18 "github.com/mitchellh/mapstructure" 19 ) 20 21 const privacyConfigKey = "privacy" 22 23 // Service is the common values for a service in a policy definition. 24 type Service struct { 25 Disable bool 26 } 27 28 // Config is a privacy configuration for all the relevant services in Hugo. 29 type Config struct { 30 Disqus Disqus 31 GoogleAnalytics GoogleAnalytics 32 Instagram Instagram 33 Twitter Twitter 34 Vimeo Vimeo 35 YouTube YouTube 36 } 37 38 // Disqus holds the privacy configuration settings related to the Disqus template. 39 type Disqus struct { 40 Service `mapstructure:",squash"` 41 } 42 43 // GoogleAnalytics holds the privacy configuration settings related to the Google Analytics template. 44 type GoogleAnalytics struct { 45 Service `mapstructure:",squash"` 46 47 // Enabling this will disable the use of Cookies and use Session Storage to Store the GA Client ID. 48 UseSessionStorage bool 49 50 // Enabling this will make the GA templates respect the 51 // "Do Not Track" HTTP header. See https://www.paulfurley.com/google-analytics-dnt/. 52 RespectDoNotTrack bool 53 54 // Enabling this will make it so the users' IP addresses are anonymized within Google Analytics. 55 AnonymizeIP bool 56 } 57 58 // Instagram holds the privacy configuration settings related to the Instagram shortcode. 59 type Instagram struct { 60 Service `mapstructure:",squash"` 61 62 // If simple mode is enabled, a static and no-JS version of the Instagram 63 // image card will be built. 64 Simple bool 65 } 66 67 // Twitter holds the privacy configuration settingsrelated to the Twitter shortcode. 68 type Twitter struct { 69 Service `mapstructure:",squash"` 70 71 // When set to true, the Tweet and its embedded page on your site are not used 72 // for purposes that include personalized suggestions and personalized ads. 73 EnableDNT bool 74 75 // If simple mode is enabled, a static and no-JS version of the Tweet will be built. 76 Simple bool 77 } 78 79 // Vimeo holds the privacy configuration settingsrelated to the Vimeo shortcode. 80 type Vimeo struct { 81 Service `mapstructure:",squash"` 82 83 // When set to true, the Vimeo player will be blocked from tracking any session data, 84 // including all cookies and stats. 85 EnableDNT bool 86 87 // If simple mode is enabled, only a thumbnail is fetched from i.vimeocdn.com and 88 // shown with a play button overlaid. If a user clicks the button, he/she will 89 // be taken to the video page on vimeo.com in a new browser tab. 90 Simple bool 91 } 92 93 // YouTube holds the privacy configuration settingsrelated to the YouTube shortcode. 94 type YouTube struct { 95 Service `mapstructure:",squash"` 96 97 // When you turn on privacy-enhanced mode, 98 // YouTube won’t store information about visitors on your website 99 // unless the user plays the embedded video. 100 PrivacyEnhanced bool 101 } 102 103 // DecodeConfig creates a privacy Config from a given Hugo configuration. 104 func DecodeConfig(cfg config.Provider) (pc Config, err error) { 105 if !cfg.IsSet(privacyConfigKey) { 106 return 107 } 108 109 m := cfg.GetStringMap(privacyConfigKey) 110 111 err = mapstructure.WeakDecode(m, &pc) 112 113 return 114 }