Skip to content

Commit 261d240

Browse files
authored
Merge pull request #159 from KostyaSha/suckurity-170
Whitelist parameters for security-170
2 parents 7555e67 + 83b9f98 commit 261d240

2 files changed

Lines changed: 51 additions & 9 deletions

File tree

github-pullrequest-plugin/src/main/java/com/github/kostyasha/github/integration/branch/trigger/JobRunnerForBranchCause.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,12 @@
1919
import org.slf4j.LoggerFactory;
2020

2121
import java.io.IOException;
22+
import java.lang.reflect.Constructor;
23+
import java.lang.reflect.InvocationTargetException;
24+
import java.util.Collection;
25+
import java.util.HashSet;
2226
import java.util.List;
27+
import java.util.Set;
2328

2429
import static com.cloudbees.jenkins.GitHubWebHook.getJenkinsInstance;
2530
import static com.github.kostyasha.github.integration.branch.data.GitHubBranchEnv.CAUSE_SKIP;
@@ -111,8 +116,9 @@ private static boolean cancelQueuedBuildByBranchName(final String branch) {
111116
}
112117

113118
private QueueTaskFuture<?> startJob(GitHubBranchCause cause) {
114-
List<ParameterValue> values = getDefaultParametersValues(job);
115-
values.addAll(asList(
119+
ParametersAction parametersAction;
120+
List<ParameterValue> parameters = getDefaultParametersValues(job);
121+
final List<ParameterValue> pluginParameters = asList(
116122
//GitHubBranchEnv
117123
NAME.param(cause.getBranchName()),
118124
SHORT_DESC.param(cause.getShortDescription()),
@@ -124,14 +130,27 @@ private QueueTaskFuture<?> startJob(GitHubBranchCause cause) {
124130
//GitHubRepoEnv
125131
GIT_URL.param(cause.getGitUrl()),
126132
SSH_URL.param(cause.getSshUrl())
127-
));
133+
);
134+
parameters.addAll(pluginParameters);
135+
136+
try {
137+
Constructor<ParametersAction> constructor = ParametersAction.class.getConstructor(List.class, Collection.class);
138+
Set<String> names = new HashSet<>();
139+
for (ParameterValue param : parameters) {
140+
names.add(param.getName());
141+
}
142+
parametersAction = constructor.newInstance(parameters, names);
143+
} catch (NoSuchMethodException | IllegalAccessException | InstantiationException
144+
| InvocationTargetException ex) {
145+
parametersAction = new ParametersAction(parameters);
146+
}
128147

129148
GitHubBranchBadgeAction gitHubBadgeAction = new GitHubBranchBadgeAction(cause);
130149

131150
//TODO no way to get quietPeriod, so temporary ignore it
132151
return asParameterizedJobMixIn(job).scheduleBuild2(0,
133152
new CauseAction(cause),
134-
new ParametersAction(values),
153+
parametersAction,
135154
gitHubBadgeAction);
136155
}
137156

github-pullrequest-plugin/src/main/java/org/jenkinsci/plugins/github/pullrequest/trigger/JobRunnerForCause.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,12 @@
3232
import org.slf4j.LoggerFactory;
3333

3434
import java.io.IOException;
35+
import java.lang.reflect.Constructor;
36+
import java.lang.reflect.InvocationTargetException;
3537
import java.util.Collection;
38+
import java.util.HashSet;
3639
import java.util.List;
40+
import java.util.Set;
3741

3842
import static com.cloudbees.jenkins.GitHubWebHook.getJenkinsInstance;
3943
import static com.google.common.base.Predicates.instanceOf;
@@ -257,8 +261,9 @@ public int cancelQueuedBuildByPrNumber(final int id) {
257261
}
258262

259263
private QueueTaskFuture<?> startJob(GitHubPRCause cause) {
260-
List<ParameterValue> values = getDefaultParametersValues(job);
261-
values.addAll(asList(
264+
ParametersAction parametersAction;
265+
List<ParameterValue> parameters = getDefaultParametersValues(job);
266+
final List<ParameterValue> pluginParameters = asList(
262267
TRIGGER_SENDER_AUTHOR.param(cause.getTriggerSenderName()),
263268
TRIGGER_SENDER_EMAIL.param(cause.getTriggerSenderEmail()),
264269
COMMIT_AUTHOR_NAME.param(cause.getCommitAuthorName()),
@@ -275,7 +280,21 @@ private QueueTaskFuture<?> startJob(GitHubPRCause cause) {
275280
CAUSE_SKIP.param(cause.isSkip()),
276281
NUMBER.param(String.valueOf(cause.getNumber())),
277282
STATE.param(String.valueOf(cause.getState()))
278-
));
283+
);
284+
parameters.addAll(pluginParameters);
285+
286+
try {
287+
Constructor<ParametersAction> constructor = ParametersAction.class.getConstructor(List.class, Collection.class);
288+
Set<String> names = new HashSet<>();
289+
for (ParameterValue param : pluginParameters) {
290+
names.add(param.getName());
291+
}
292+
parametersAction = constructor.newInstance(parameters, names);
293+
} catch (NoSuchMethodException | IllegalAccessException | InstantiationException
294+
| InvocationTargetException ex) {
295+
parametersAction = new ParametersAction(parameters);
296+
}
297+
279298
GitHubPRBadgeAction gitHubPRBadgeAction = new GitHubPRBadgeAction(cause);
280299

281300
ParameterizedJobMixIn parameterizedJobMixIn = asParameterizedJobMixIn(job);
@@ -290,8 +309,12 @@ private QueueTaskFuture<?> startJob(GitHubPRCause cause) {
290309
LOGGER.error("Couldn't extract quiet period, falling back to {}", quietPeriod, e);
291310
}
292311

293-
return parameterizedJobMixIn.scheduleBuild2(quietPeriod, new CauseAction(cause), new ParametersAction(values),
294-
gitHubPRBadgeAction);
312+
return parameterizedJobMixIn.scheduleBuild2(
313+
quietPeriod,
314+
new CauseAction(cause),
315+
parametersAction,
316+
gitHubPRBadgeAction
317+
);
295318
}
296319

297320
protected static class CausesFromAction implements Function<Action, Iterable<Cause>> {

0 commit comments

Comments
 (0)