Skip to content

Commit

Permalink
[FIXED JENKINS-24130] - Added an option to mask PasswordParameters
Browse files Browse the repository at this point in the history
This is a straightforward implementation, an additional re-factoring would be useful.
The option is enabled by default, but this behavior can be changed in order to prevent any compatibility issues.

Signed-off-by: Oleg Nenashev <o.v.nenashev@gmail.com>
  • Loading branch information
oleg-nenashev committed Aug 6, 2014
1 parent 13d5902 commit dcf5703
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 0 deletions.
Expand Up @@ -8,6 +8,9 @@
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.BuildListener;
import hudson.model.ParameterValue;
import hudson.model.ParametersAction;
import hudson.model.PasswordParameterValue;
import hudson.model.Run;
import hudson.tasks.BuildWrapper;
import hudson.tasks.BuildWrapperDescriptor;
Expand Down Expand Up @@ -43,6 +46,7 @@ public String apply(EnvInjectPasswordEntry envInjectPasswordEntry) {
};

private boolean injectGlobalPasswords;
private boolean maskPasswordParameters;
private EnvInjectPasswordEntry[] passwordEntries;

@DataBoundConstructor
Expand All @@ -53,10 +57,18 @@ public boolean isInjectGlobalPasswords() {
return injectGlobalPasswords;
}

public boolean isMaskPasswordParameters() {
return maskPasswordParameters;
}

public void setInjectGlobalPasswords(boolean injectGlobalPasswords) {
this.injectGlobalPasswords = injectGlobalPasswords;
}

public void setMaskPasswordParameters(boolean maskPasswordParameters) {
this.maskPasswordParameters = maskPasswordParameters;
}

public EnvInjectPasswordEntry[] getPasswordEntries() {
return passwordEntries;
}
Expand Down Expand Up @@ -106,6 +118,24 @@ public OutputStream decorateLogger(AbstractBuild build, OutputStream outputStrea
//--Decorate passwords
List<String> passwords2decorate = Lists.newArrayList(Lists.transform(getEnvInjectPasswordEntries(), PASSWORD_ENTRY_TO_VALUE));

//-- Decorate password parameters
if (isMaskPasswordParameters()) {
logger.info("Mask passwords passed as build parameters.");

ParametersAction parametersAction = build.getAction(ParametersAction.class);
if (parametersAction != null) {
List<ParameterValue> parameters = parametersAction.getParameters();
if (parameters != null) {
for (ParameterValue parameter : parameters) {
if (parameter instanceof PasswordParameterValue) {
PasswordParameterValue passwordParameterValue = ((PasswordParameterValue) parameter);
passwords2decorate.add(passwordParameterValue.getValue().getPlainText());
}
}
}
}
}

return new EnvInjectPasswordsOutputStream(outputStream, passwords2decorate);

} catch (EnvInjectException ee) {
Expand Down Expand Up @@ -221,6 +251,7 @@ public BuildWrapper newInstance(StaplerRequest req, JSONObject formData) throws

EnvInjectPasswordWrapper passwordWrapper = new EnvInjectPasswordWrapper();
passwordWrapper.setInjectGlobalPasswords(formData.getBoolean("injectGlobalPasswords"));
passwordWrapper.setMaskPasswordParameters(formData.getBoolean("maskPasswordParameters"));

//Envinject passowrds
List<EnvInjectPasswordEntry> passwordEntries = req.bindParametersToList(EnvInjectPasswordEntry.class, "envInjectPasswordEntry.");
Expand Down
Expand Up @@ -37,4 +37,11 @@

</f:entry>

<f:entry field="maskPasswordParameters"
title="${%Mask password parameters}"
help="/plugin/envinject/help-buildWrapperMaskPasswordParameters.html">
<f:checkbox
name="maskPasswordParameters"
checked="${instance.maskPasswordParameters}" default="${true}"/>
</f:entry>
</j:jelly>
5 changes: 5 additions & 0 deletions src/main/webapp/help-buildWrapperMaskPasswordParameters.html
@@ -0,0 +1,5 @@
<div>
<p>
Mask passwords provided by build parameters. <br/>
</p>
</div>

0 comments on commit dcf5703

Please sign in to comment.