Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,14 @@
*.class

target
work/

# Package Files #
*.jar
*.war
*.ear

# Eclipse Files #
.classpath
.project
.settings/
Original file line number Diff line number Diff line change
@@ -1,17 +1,27 @@
package org.jenkinsci.plugins.buildwithparameters;

import hudson.model.BooleanParameterValue;
import hudson.model.ParameterValue;
import hudson.model.BooleanParameterValue;
import hudson.model.PasswordParameterValue;
import hudson.model.StringParameterValue;

public class BuildParameter {
private String name, description, value;
private static final String JOB_DEFAULT_PASSWORD_PLACEHOLDER = "job_default_password";
private String name, description, value;
private boolean isPasswordParam;

public BuildParameter(String name, String description) {
this.name = name;
this.description = description;
}

public static boolean isDefaultPasswordPlaceholder(String candidate) {
if(candidate == null) {
return false;
}
return JOB_DEFAULT_PASSWORD_PLACEHOLDER.equals(candidate);
}

public String getName() {
return name;
}
Expand All @@ -29,7 +39,17 @@ public void setValue(ParameterValue parameterValue) {
this.value = ((StringParameterValue) parameterValue).value;
} else if (parameterValue instanceof BooleanParameterValue) {
this.value = String.valueOf(((BooleanParameterValue) parameterValue).value);
} else if (parameterValue instanceof PasswordParameterValue) {
this.value = JOB_DEFAULT_PASSWORD_PLACEHOLDER;
}
}

public void setPasswordParam(boolean isPasswordParam) {
this.isPasswordParam = isPasswordParam;
}

public boolean isPasswordParam() {
return isPasswordParam;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
import hudson.model.ParameterValue;
import hudson.model.ParametersAction;
import hudson.model.ParametersDefinitionProperty;
import hudson.model.PasswordParameterDefinition;
import hudson.model.PasswordParameterValue;
import hudson.util.Secret;
import net.sf.json.JSONObject;
import org.kohsuke.stapler.Stapler;
import org.kohsuke.stapler.StaplerRequest;
Expand Down Expand Up @@ -43,6 +46,7 @@ public List<BuildParameter> getAvailableParameters() {

for (ParameterDefinition parameterDefinition : getParameterDefinitions()) {
BuildParameter buildParameter = new BuildParameter(parameterDefinition.getName(), parameterDefinition.getDescription());
buildParameter.setPasswordParam(parameterDefinition.getClass().isAssignableFrom(PasswordParameterDefinition.class));

try {
buildParameter.setValue(parameterDefinition.createValue(Stapler.getCurrentRequest()));
Expand Down Expand Up @@ -83,9 +87,20 @@ public void doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOExc
JSONObject formData = req.getSubmittedForm();
if (!formData.isEmpty()) {
for (ParameterDefinition parameterDefinition : getParameterDefinitions()) {
ParameterValue parameterValue = parameterDefinition.createValue(req);
if(parameterValue.getClass().isAssignableFrom(PasswordParameterValue.class)) {
Secret secret = ((PasswordParameterValue) parameterValue).getValue();
String jobPassword = Secret.toString(secret);
if(BuildParameter.isDefaultPasswordPlaceholder(jobPassword)) {
secret = ((PasswordParameterValue) parameterDefinition.getDefaultParameterValue()).getValue();
String jobDefaultPassword = Secret.toString(secret);
ParameterValue passwordParameterValue = new PasswordParameterValue(parameterValue.getName(), jobDefaultPassword);
parameterValue = passwordParameterValue;
}
}
// This will throw an exception if the provided value is not a valid option for the parameter.
// This is the desired behavior, as we want to ensure valid submissions.
values.add(parameterDefinition.createValue(req));
values.add(parameterValue);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,14 @@
<j:forEach var="parameter" items="${it.availableParameters}">
<f:entry title="${parameter.name}" description="${parameter.description}">
<div>
<f:textbox name="${parameter.name}" value="${parameter.value}"/>
<j:choose>
<j:when test="${!parameter.passwordParam}">
<f:textbox name="${parameter.name}" value="${parameter.value}"/>
</j:when>
<j:otherwise>
<f:password name="${parameter.name}" value="${parameter.value}"/>
</j:otherwise>
</j:choose>
</div>
</f:entry>
</j:forEach>
Expand Down