@@ -32,6 +32,8 @@ class ContentSecurityPolicyHeaderWriter implements HeaderWriter {
32
32
private static final String COLLECTION_INFO_PAGE_PATTERN =
33
33
Url .INFO_COLLECTION_PAGE .replace ("{slug}" , "" );
34
34
35
+ private static final String TOGGLZ_PAGES_PATTERN = Url .TOGGLZ_CONSOLE_PAGE + '/' ;
36
+
35
37
// default policy prevents loading resources from any source
36
38
private static final String DEFAULT_SRC = "default-src 'none'" ;
37
39
@@ -56,11 +58,16 @@ class ContentSecurityPolicyHeaderWriter implements HeaderWriter {
56
58
+ " 'sha256-DpmxvnMJIlwkpmmAANZYNzmyfnX2PQCBDO4CB2BFjzU='" ;
57
59
58
60
// - 'https://www.gstatic.com' is required by Google Charts
59
- // - 'sha256-/kX...' is required for 'overflow: hidden;' inline CSS that is using
60
- // by Google Charts.
61
+ // - 'sha256-/kX...' is required for 'overflow: hidden;' inline CSS for Google Charts.
61
62
private static final String STYLE_COLLECTION_INFO =
62
63
" https://www.gstatic.com 'sha256-/kXZODfqoc2myS1eI6wr0HH8lUt+vRhW8H/oL+YJcMg='" ;
63
64
65
+ // - 'sha256-biL...' is required for 'display: none;' inline CSS for Togglz
66
+ // - 'sha256-zQD...' is required for 'width: 100%; text-align: center;' inline CSS for Togglz
67
+ private static final String STYLE_TOGGLZ =
68
+ " 'sha256-biLFinpqYMtWHmXfkA1BPeCY0/fNt46SAZ+BBk5YUog='"
69
+ + " 'sha256-zQDRfdePzsm4666fPPtpna61v74bryIt2Xu5qx2rn4A='" ;
70
+
64
71
// - 'self' is required for our own JS files
65
72
// - 'unsafe-inline' is required by jquery.min.js (that is using code inside of
66
73
// event handlers. We can't use hashing algorithms because they aren't supported
@@ -109,7 +116,11 @@ private static String constructDirectives(HttpServletRequest request) {
109
116
110
117
if (onCollectionInfoPage ) {
111
118
sb .append (STYLE_COLLECTION_INFO );
119
+
120
+ } else if (request .getRequestURI ().startsWith (TOGGLZ_PAGES_PATTERN )) {
121
+ sb .append (STYLE_TOGGLZ );
112
122
}
123
+
113
124
sb .append (SEPARATOR )
114
125
.append (SCRIPT_SRC );
115
126
0 commit comments