summaryrefslogtreecommitdiffstats
path: root/netlify-pr.go
diff options
context:
space:
mode:
Diffstat (limited to 'netlify-pr.go')
-rw-r--r--netlify-pr.go66
1 files changed, 66 insertions, 0 deletions
diff --git a/netlify-pr.go b/netlify-pr.go
new file mode 100644
index 0000000..afdd292
--- /dev/null
+++ b/netlify-pr.go
@@ -0,0 +1,66 @@
+package main
+
+// Path netlify.toml file for Netlify Deploy Preview to allow some
+// violation for CSP header.
+
+import (
+ "fmt"
+ "io/ioutil"
+ "log"
+ "regexp"
+ "strings"
+)
+
+const netlifyConfig = "netlify.toml"
+
+func main() {
+ input, err := ioutil.ReadFile(netlifyConfig)
+ if err != nil {
+ log.Fatalln(err)
+ }
+
+ lines := strings.Split(string(input), "\n")
+ for i, line := range lines {
+ newStr := line
+
+ // -> default-src 'self';
+ // <- default-src 'self' blob:;
+ reStr := regexp.MustCompile("(default-src) ('self')(;)")
+ repStr := "${1} ${2} blob:${3}"
+ newStr = reStr.ReplaceAllString(newStr, repStr)
+
+ // -> style-src 'self';
+ // <- style-src 'self' 'unsafe-inline';
+ reStr = regexp.MustCompile("(style-src) ('self')(;)")
+ repStr = "${1} ${2} 'unsafe-inline'${3}"
+ newStr = reStr.ReplaceAllString(newStr, repStr)
+
+ // -> media-src 'self';
+ // <- media-src 'self' blob: https://app.netlify.com;
+ reStr = regexp.MustCompile("(media-src) ('self')(;)")
+ repStr = "${1} ${2} blob: https://app.netlify.com${3}"
+ newStr = reStr.ReplaceAllString(newStr, repStr)
+
+ // -> frame-src 'none';
+ // <- frame-src app.netlify.com;
+ reStr = regexp.MustCompile("(frame-src) ('none')(;)")
+ repStr = "${1} app.netlify.com${3}"
+ newStr = reStr.ReplaceAllString(newStr, repStr)
+
+ // -> script-src 'self' *.googletagmanager.com;
+ // <- script-src 'self' *.googletagmanager.com netlify-cdp-loader.netlify.app;
+ reStr = regexp.MustCompile(`(script-src) ('self' \*\.googletagmanager.com)(;)`)
+ repStr = "${1} ${2} netlify-cdp-loader.netlify.app${3}"
+ newStr = reStr.ReplaceAllString(newStr, repStr)
+
+ lines[i] = newStr
+ }
+
+ output := strings.Join(lines, "\n")
+ err = ioutil.WriteFile(netlifyConfig, []byte(output), 0644)
+ if err != nil {
+ log.Fatalln(err)
+ }
+
+ fmt.Println("Done")
+}