summaryrefslogtreecommitdiffstats
path: root/hugolib
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-05-04 10:18:45 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-05-21 00:41:42 +0200
commit0bbdef986d8eecf4fabe9a372e33626dbdfeb36b (patch)
tree72e52401c9bf5503e0581a0f522a350311e29a0e /hugolib
parent9bd4236e1b3bee332439eef50e12d4481340c3eb (diff)
config: Add the foundation for GDPR privacy configuration
See #4616
Diffstat (limited to 'hugolib')
-rw-r--r--hugolib/config_test.go22
-rw-r--r--hugolib/hugo_sites_build.go4
-rw-r--r--hugolib/site.go21
-rw-r--r--hugolib/site_url_test.go2
4 files changed, 44 insertions, 5 deletions
diff --git a/hugolib/config_test.go b/hugolib/config_test.go
index 441bcf541..8bf7ea8b3 100644
--- a/hugolib/config_test.go
+++ b/hugolib/config_test.go
@@ -365,3 +365,25 @@ map[string]interface {}{
}`, got["menu"])
}
+
+func TestPrivacyConfig(t *testing.T) {
+ t.Parallel()
+
+ assert := require.New(t)
+
+ tomlConfig := `
+
+someOtherValue = "foo"
+
+[privacy]
+[privacy.youtube]
+noCookie = true
+`
+
+ b := newTestSitesBuilder(t)
+ b.WithConfigFile("toml", tomlConfig)
+ b.Build(BuildCfg{SkipRender: true})
+
+ assert.True(b.H.Sites[0].Info.PrivacyConfig.YouTube.NoCookie)
+
+}
diff --git a/hugolib/hugo_sites_build.go b/hugolib/hugo_sites_build.go
index e1e4a6056..e22aabfc5 100644
--- a/hugolib/hugo_sites_build.go
+++ b/hugolib/hugo_sites_build.go
@@ -168,7 +168,9 @@ func (h *HugoSites) assemble(config *BuildCfg) error {
if len(h.Sites) > 1 {
// The first is initialized during process; initialize the rest
for _, site := range h.Sites[1:] {
- site.initializeSiteInfo()
+ if err := site.initializeSiteInfo(); err != nil {
+ return err
+ }
}
}
diff --git a/hugolib/site.go b/hugolib/site.go
index 989238bed..0ee0db4a7 100644
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -27,6 +27,8 @@ import (
"strings"
"time"
+ "github.com/gohugoio/hugo/config/privacy"
+
"github.com/gohugoio/hugo/resource"
"golang.org/x/sync/errgroup"
@@ -386,6 +388,12 @@ type SiteInfo struct {
preserveTaxonomyNames bool
Data *map[string]interface{}
+ // This contains all privacy related settings that can be used to
+ // make the YouTube template etc.GDPR compliant.
+ // It is mostly in use by Hugo's built-in, but is also available
+ // for end users with {{ .Site.PrivacyConfig.YouTube.NoCookie }} etc.
+ PrivacyConfig privacy.Config
+
owner *HugoSites
s *Site
multilingual *Multilingual
@@ -1028,14 +1036,13 @@ func (s *Site) Initialise() (err error) {
}
func (s *Site) initialize() (err error) {
- defer s.initializeSiteInfo()
s.Menus = Menus{}
if err = s.checkDirectories(); err != nil {
return err
}
- return
+ return s.initializeSiteInfo()
}
// HomeAbsURL is a convenience method giving the absolute URL to the home page.
@@ -1058,7 +1065,7 @@ func (s *SiteInfo) SitemapAbsURL() string {
return p
}
-func (s *Site) initializeSiteInfo() {
+func (s *Site) initializeSiteInfo() error {
var (
lang = s.Language
languages helpers.Languages
@@ -1113,6 +1120,11 @@ func (s *Site) initializeSiteInfo() {
}
}
+ privacyConfig, err := privacy.DecodeConfig(lang)
+ if err != nil {
+ return err
+ }
+
s.Info = SiteInfo{
Title: lang.GetString("title"),
Author: lang.GetStringMap("author"),
@@ -1139,6 +1151,7 @@ func (s *Site) initializeSiteInfo() {
Data: &s.Data,
owner: s.owner,
s: s,
+ PrivacyConfig: privacyConfig,
}
rssOutputFormat, found := s.outputFormats[KindHome].GetByName(output.RSSFormat.Name)
@@ -1146,6 +1159,8 @@ func (s *Site) initializeSiteInfo() {
if found {
s.Info.RSSLink = s.permalink(rssOutputFormat.BaseFilename())
}
+
+ return nil
}
func (s *Site) dataDir() string {
diff --git a/hugolib/site_url_test.go b/hugolib/site_url_test.go
index 2be615963..5b9d19e0d 100644
--- a/hugolib/site_url_test.go
+++ b/hugolib/site_url_test.go
@@ -55,7 +55,7 @@ func TestShouldNotAddTrailingSlashToBaseURL(t *testing.T) {
d := deps.DepsCfg{Cfg: cfg, Fs: fs}
s, err := NewSiteForCfg(d)
require.NoError(t, err)
- s.initializeSiteInfo()
+ require.NoError(t, s.initializeSiteInfo())
if s.Info.BaseURL() != template.URL(this.expected) {
t.Errorf("[%d] got %s expected %s", i, s.Info.BaseURL(), this.expected)