package org.jenkinsci.plugins.ghprb;
import hudson.EnvVars;
import hudson.Extension;
import hudson.model.EnvironmentContributor;
import hudson.model.ParameterValue;
import hudson.model.ParametersAction;
import hudson.model.Run;
import hudson.model.TaskListener;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;
import javax.annotation.Nonnull;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@Restricted(NoExternalUse.class)
public class GhprbParametersAction extends ParametersAction {
private List<ParameterValue> parameters;
public GhprbParametersAction(List<ParameterValue> parameters) {
super(parameters);
this.parameters = parameters;
}
public GhprbParametersAction(ParameterValue... parameters) {
this(Arrays.asList(parameters));
}
@Override
public List<ParameterValue> getParameters() {
return Collections.unmodifiableList(parameters);
}
@Override
public ParameterValue getParameter(String name) {
for (ParameterValue parameter : parameters) {
if (parameter != null && parameter.getName().equals(name)) {
return parameter;
}
}
return null;
}
@Extension
public static final class GhprbAdditionalParameterEnvironmentContributor extends EnvironmentContributor {
// See SECURITY-170
@Override
@SuppressWarnings("rawtypes")
public void buildEnvironmentFor(@Nonnull Run run,
@Nonnull EnvVars envs,
@Nonnull TaskListener listener) throws IOException, InterruptedException {
GhprbParametersAction gpa = run.getAction(GhprbParametersAction.class);
if (gpa != null) {
for (ParameterValue p : gpa.getParameters()) {
envs.put(p.getName(), String.valueOf(p.getValue()));
}
}
super.buildEnvironmentFor(run, envs, listener);
}
}
}