Skip to content

Commit 2c50187

Browse files
mawinter69balakine
authored andcommitted
CSP compliance
there have been many places where inline javascript is used, e.g. onchange, onclick or onblur attributes. Also script tags that directly included javascript All occurrences have been moved accordingly to dedicated js script files
1 parent 8d42778 commit 2c50187

File tree

8 files changed

+305
-195
lines changed

8 files changed

+305
-195
lines changed

src/main/resources/hudson/plugins/global_build_stats/GlobalBuildStatsPlugin/buildHistory.jelly

Lines changed: 41 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,17 @@
2222
<l:header>
2323
<link rel="stylesheet" href="${rootURL}/plugin/global-build-stats/css/global-build-stats.css" type="text/css"/>
2424
<script src="${rootURL}/plugin/global-build-stats/scripts/global-build-stats/standardFunctions.js"></script>
25-
<script>var startDate = ${searchCriteria.start}; var endDate = ${searchCriteria.end};</script>
26-
<script type="text/javascript">
27-
FIELD_FILTER_ALL = "${FIELD_FILTER_ALL}";
28-
FIELD_FILTER_REGEX = "${FIELD_FILTER_REGEX}";
29-
LAUNCHER_SYSTEM_REGEX = "${LAUNCHER_SYSTEM_REGEX}";
30-
NODE_MASTER_REGEX = "${NODE_MASTER_REGEX}";
31-
ESCAPED_JOB_FILTER = "${escapedJobFilter}";
32-
ESCAPED_NODE_FILTER = "${escapedNodeFilter}";
33-
ESCAPED_LAUNCHER_FILTER = "${escapedLauncherFilter}";
34-
</script>
25+
<script type="application/json" id="gbs-constants">
26+
{
27+
"FIELD_FILTER_ALL": "${FIELD_FILTER_ALL}",
28+
"FIELD_FILTER_REGEX": "${FIELD_FILTER_REGEX}",
29+
"LAUNCHER_SYSTEM_REGEX": "${LAUNCHER_SYSTEM_REGEX}",
30+
"NODE_MASTER_REGEX": "${NODE_MASTER_REGEX}",
31+
"ESCAPED_JOB_FILTER": "${escapedJobFilter}",
32+
"ESCAPED_NODE_FILTER": "${escapedNodeFilter}",
33+
"ESCAPED_LAUNCHER_FILTER": "${escapedLauncherFilter}"
34+
}
35+
</script>
3536
<script src="${rootURL}/plugin/global-build-stats/scripts/global-build-stats/buildHistory.js"></script>
3637
</l:header>
3738

@@ -69,62 +70,67 @@
6970
<div class="gbs-form-row">
7071
<span>${%Job filtering}:</span>
7172
<div class="jenkins-radio">
72-
<input type="radio" id="searchBuild_jobFilteringType_ALL" checked="checked" name="jobFilteringType" value="${FIELD_FILTER_ALL}" class="jenkins-radio__input"
73-
onchange="fieldFilterTypeSelected(this.value, 'searchBuild_jobNameRegex', 'searchBuild_jobFilter');" />
73+
<input type="radio" id="searchBuild_jobFilteringType_ALL" checked="checked" name="jobFilteringType" value="${FIELD_FILTER_ALL}"
74+
class="jenkins-radio__input gbs-fieldFilter" data-regex-field="searchBuild_jobNameRegex"
75+
data-hidden-field="searchBuild_jobFilter"/>
7476
<label for="searchBuild_jobFilteringType_ALL" class="jenkins-radio__label">${%ALL Jobs}</label>
7577
</div>
7678
<div class="jenkins-radio">
77-
<input type="radio" id="searchBuild_jobFilteringType_REGEX" name="jobFilteringType" value="${FIELD_FILTER_REGEX}" class="jenkins-radio__input"
78-
onchange="fieldFilterTypeSelected(this.value, 'searchBuild_jobNameRegex', 'searchBuild_jobFilter');" />
79+
<input type="radio" id="searchBuild_jobFilteringType_REGEX" name="jobFilteringType" value="${FIELD_FILTER_REGEX}"
80+
class="jenkins-radio__input gbs-fieldFilter" data-regex-field="searchBuild_jobNameRegex"
81+
data-hidden-field="searchBuild_jobFilter"/>
7982
<label for="searchBuild_jobFilteringType_REGEX" class="jenkins-radio__label">${%Job name regex}:</label>
8083
</div>
81-
<input type="text" id="searchBuild_jobNameRegex" class="jenkins-input"
82-
disabled="true" name="jobNameRegex" size="10"
83-
onblur="document.getElementById('searchBuild_jobFilter').value=FIELD_FILTER_REGEX+'('+this.value+')';"/>
84+
<input type="text" id="searchBuild_jobNameRegex" class="jenkins-input gbs-regex-blur"
85+
disabled="true" name="jobNameRegex" size="10" data-id="searchBuild_jobFilter"/>
8486
<input id="searchBuild_jobFilter" type="hidden" name="jobFilter" value="${escapedJobFilter}" />
8587
</div>
8688
<div class="gbs-form-row">
8789
<span>${%Node filtering}:</span>
8890
<div class="jenkins-radio">
89-
<input type="radio" id="searchBuild_nodeFilteringType_ALL" checked="checked" name="nodeFilteringType" value="${FIELD_FILTER_ALL}" class="jenkins-radio__input"
90-
onchange="fieldFilterTypeSelected(this.value, 'searchBuild_nodeNameRegex', 'searchBuild_nodeFilter');" />
91+
<input type="radio" id="searchBuild_nodeFilteringType_ALL" checked="checked" name="nodeFilteringType" value="${FIELD_FILTER_ALL}"
92+
class="jenkins-radio__input gbs-fieldFilter" data-regex-field="searchBuild_nodeNameRegex"
93+
data-hidden-field="searchBuild_nodeFilter"/>
9194
<label for="searchBuild_nodeFilteringType_ALL" class="jenkins-radio__label">${%ALL Nodes}</label>
9295
</div>
9396
<div class="jenkins-radio">
94-
<input type="radio" id="searchBuild_nodeFilteringType_REGEXMASTER" name="nodeFilteringType" value="${NODE_MASTER_REGEX}" class="jenkins-radio__input"
95-
onchange="fieldFilterTypeSelected(this.value, 'searchBuild_nodeNameRegex', 'searchBuild_nodeFilter');" />
97+
<input type="radio" id="searchBuild_nodeFilteringType_REGEXMASTER" name="nodeFilteringType" value="${NODE_MASTER_REGEX}"
98+
class="jenkins-radio__input gbs-fieldFilter" data-regex-field="searchBuild_nodeNameRegex"
99+
data-hidden-field="searchBuild_nodeFilter"/>
96100
<label for="searchBuild_nodeFilteringType_REGEXMASTER" class="jenkins-radio__label">${%Controller only}</label>
97101
</div>
98102
<div class="jenkins-radio">
99-
<input type="radio" id="searchBuild_nodeFilteringType_REGEX" name="nodeFilteringType" value="${FIELD_FILTER_REGEX}" class="jenkins-radio__input"
100-
onchange="fieldFilterTypeSelected(this.value, 'searchBuild_nodeNameRegex', 'searchBuild_nodeFilter');" />
103+
<input type="radio" id="searchBuild_nodeFilteringType_REGEX" name="nodeFilteringType" value="${FIELD_FILTER_REGEX}"
104+
class="jenkins-radio__input gbs-fieldFilter" data-regex-field="searchBuild_nodeNameRegex"
105+
data-hidden-field="searchBuild_nodeFilter"/>
101106
<label for="searchBuild_nodeFilteringType_REGEX" class="jenkins-radio__label">${%Node name regex}:</label>
102107
</div>
103-
<input type="text" id="searchBuild_nodeNameRegex" class="jenkins-input"
104-
disabled="true" name="nodeNameRegex" size="10"
105-
onblur="document.getElementById('searchBuild_nodeFilter').value=FIELD_FILTER_REGEX+'('+this.value+')';"/>
108+
<input type="text" id="searchBuild_nodeNameRegex" class="jenkins-input gbs-regex-blur"
109+
disabled="true" name="nodeNameRegex" size="10" data-id="searchBuild_nodeFilter"/>
106110
<input id="searchBuild_nodeFilter" type="hidden" name="nodeFilter" value="${escapedNodeFilter}" />
107111
</div>
108112
<div class="gbs-form-row">
109113
${%Launcher filtering}:
110114
<div class="jenkins-radio">
111-
<input type="radio" id="searchBuild_launcherFilteringType_ALL" checked="checked" name="launcherFilteringType" value="${FIELD_FILTER_ALL}" class="jenkins-radio__input"
112-
onchange="fieldFilterTypeSelected(this.value, 'searchBuild_launcherNameRegex', 'searchBuild_launcherFilter');" />
115+
<input type="radio" id="searchBuild_launcherFilteringType_ALL" checked="checked" name="launcherFilteringType" value="${FIELD_FILTER_ALL}"
116+
class="jenkins-radio__input gbs-fieldFilter" data-regex-field="searchBuild_launcherNameRegex"
117+
data-hidden-field="searchBuild_launcherFilter"/>
113118
<label for="searchBuild_launcherFilteringType_ALL" class="jenkins-radio__label">${%ALL Users}</label>
114119
</div>
115120
<div class="jenkins-radio">
116-
<input type="radio" id="searchBuild_launcherFilteringType_REGEXSYSTEM" name="launcherFilteringType" value="${LAUNCHER_SYSTEM_REGEX}" class="jenkins-radio__input"
117-
onchange="fieldFilterTypeSelected(this.value, 'searchBuild_launcherNameRegex', 'searchBuild_launcherFilter');" />
121+
<input type="radio" id="searchBuild_launcherFilteringType_REGEXSYSTEM" name="launcherFilteringType" value="${LAUNCHER_SYSTEM_REGEX}"
122+
class="jenkins-radio__input gbs-fieldFilter" data-regex-field="searchBuild_launcherNameRegex"
123+
data-hidden-field="searchBuild_launcherFilter"/>
118124
<label for="searchBuild_launcherFilteringType_REGEXSYSTEM" class="jenkins-radio__label">${%System only}</label>
119125
</div>
120126
<div class="jenkins-radio">
121-
<input type="radio" id="searchBuild_launcherFilteringType_REGEX" name="launcherFilteringType" value="${FIELD_FILTER_REGEX}" class="jenkins-radio__input"
122-
onchange="fieldFilterTypeSelected(this.value, 'searchBuild_launcherNameRegex', 'searchBuild_launcherFilter');" />
127+
<input type="radio" id="searchBuild_launcherFilteringType_REGEX" name="launcherFilteringType" value="${FIELD_FILTER_REGEX}"
128+
class="jenkins-radio__input gbs-fieldFilter" data-regex-field="searchBuild_launcherNameRegex"
129+
data-hidden-field="searchBuild_launcherFilter"/>
123130
<label for="searchBuild_launcherFilteringType_REGEX" class="jenkins-radio__label">${%Username regex}:</label>
124131
</div>
125-
<input type="text" id="searchBuild_launcherNameRegex" class="jenkins-input"
126-
disabled="true" name="launcherNameRegex" size="10"
127-
onblur="document.getElementById('searchBuild_launcherFilter').value=FIELD_FILTER_REGEX+'('+this.value+')';"/>
132+
<input type="text" id="searchBuild_launcherNameRegex" class="jenkins-input gbs-regex-blur"
133+
disabled="true" name="launcherNameRegex" size="10" data-id="searchBuild_launcherFilter"/>
128134
<input id="searchBuild_launcherFilter" type="hidden" name="launcherFilter" value="${escapedLauncherFilter}" />
129135
</div>
130136
<div class="gbs-form-row">
@@ -137,43 +143,6 @@
137143
</div>
138144
</div>
139145
</f:entry>
140-
<script type="text/javascript"><![CDATA[
141-
if(document.getElementById('searchBuild_jobFilter').value.indexOf(FIELD_FILTER_REGEX) != -1){
142-
document.getElementById('searchBuild_jobFilteringType_REGEX').checked = 'checked';
143-
initializeRegexField('searchBuild_jobNameRegex', ESCAPED_JOB_FILTER);
144-
document.getElementById('searchBuild_jobFilteringType_REGEX').onchange();
145-
document.getElementById('searchBuild_jobNameRegex').disabled = false;
146-
} else if(document.getElementById('searchBuild_jobFilter').value.indexOf(FIELD_FILTER_ALL) != -1){
147-
document.getElementById('searchBuild_jobFilteringType_ALL').checked = 'checked';
148-
document.getElementById('searchBuild_jobFilteringType_ALL').onchange();
149-
}
150-
if(document.getElementById('searchBuild_nodeFilter').value.indexOf(NODE_MASTER_REGEX) != -1){
151-
document.getElementById('searchBuild_nodeFilteringType_REGEXMASTER').checked = 'checked';
152-
document.getElementById('searchBuild_nodeFilteringType_REGEXMASTER').onchange();
153-
document.getElementById('searchBuild_nodeNameRegex').disabled = true;
154-
} else if(document.getElementById('searchBuild_nodeFilter').value.indexOf(FIELD_FILTER_REGEX) != -1){
155-
document.getElementById('searchBuild_nodeFilteringType_REGEX').checked = 'checked';
156-
initializeRegexField('searchBuild_nodeNameRegex', ESCAPED_NODE_FILTER);
157-
document.getElementById('searchBuild_nodeFilteringType_REGEX').onchange();
158-
document.getElementById('searchBuild_nodeNameRegex').disabled = false;
159-
} else if(document.getElementById('searchBuild_nodeFilter').value.indexOf(FIELD_FILTER_ALL) != -1){
160-
document.getElementById('searchBuild_nodeFilteringType_ALL').checked = 'checked';
161-
document.getElementById('searchBuild_nodeFilteringType_ALL').onchange();
162-
}
163-
if(document.getElementById('searchBuild_launcherFilter').value.indexOf(LAUNCHER_SYSTEM_REGEX) != -1){
164-
document.getElementById('searchBuild_launcherFilteringType_REGEXSYSTEM').checked = 'checked';
165-
document.getElementById('searchBuild_launcherFilteringType_REGEXSYSTEM').onchange();
166-
document.getElementById('searchBuild_launcherNameRegex').disabled = true;
167-
} else if(document.getElementById('searchBuild_launcherFilter').value.indexOf(FIELD_FILTER_REGEX) != -1){
168-
document.getElementById('searchBuild_launcherFilteringType_REGEX').checked = 'checked';
169-
initializeRegexField('searchBuild_launcherNameRegex', ESCAPED_LAUNCHER_FILTER);
170-
document.getElementById('searchBuild_launcherFilteringType_REGEX').onchange();
171-
document.getElementById('searchBuild_launcherNameRegex').disabled = false;
172-
} else if(document.getElementById('searchBuild_launcherFilter').value.indexOf(FIELD_FILTER_ALL) != -1){
173-
document.getElementById('searchBuild_launcherFilteringType_ALL').checked = 'checked';
174-
document.getElementById('searchBuild_launcherFilteringType_ALL').onchange();
175-
}
176-
]]></script>
177146
<f:submit value="${%Search}" name="Submit"/>
178147
</f:form>
179148
</f:section>

0 commit comments

Comments
 (0)