diff --git a/.changes/1.0.7.md b/.changes/1.0.7.md
new file mode 100644
index 0000000..3865213
--- /dev/null
+++ b/.changes/1.0.7.md
@@ -0,0 +1,4 @@
+## 1.0.7 - 2024-04-10
+### 🐛 Bug Fix
+
+- Fixed the Jenkins job output masking issue.
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 01b220f..61a6e74 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
and is generated by [Changie](https://github.com/miniscruff/changie).
+## 1.0.7 - 2024-04-10
+### 🐛 Bug Fix
+
+- Fixed the Jenkins job output masking issue.
## 1.0.6 - 2024-01-10
### 🐛 Bug Fix
diff --git a/Taskfile.yml b/Taskfile.yml
index 16fa582..cc3435d 100644
--- a/Taskfile.yml
+++ b/Taskfile.yml
@@ -18,7 +18,7 @@ tasks:
bump:
desc: bump the version using changie
cmds:
- - changie batch 1.0.6
+ - changie batch 1.0.7
- changie merge
- git add .changes/*
- git add CHANGELOG.md
diff --git a/pom.xml b/pom.xml
index 331dab7..1035b6e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
io.jenkins.plugins
thycotic-secret-server
- 1.0.6
+ 1.0.7
hpi
diff --git a/src/main/java/com/thycotic/secrets/jenkins/ServerBuildWrapper.java b/src/main/java/com/thycotic/secrets/jenkins/ServerBuildWrapper.java
index ec995cf..7d2dc96 100644
--- a/src/main/java/com/thycotic/secrets/jenkins/ServerBuildWrapper.java
+++ b/src/main/java/com/thycotic/secrets/jenkins/ServerBuildWrapper.java
@@ -5,7 +5,6 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.Objects;
import com.thycotic.secrets.server.spring.Secret;
import com.thycotic.secrets.server.spring.SecretServer;
@@ -29,8 +28,6 @@
import hudson.model.TaskListener;
import hudson.tasks.BuildWrapperDescriptor;
import jenkins.tasks.SimpleBuildWrapper;
-import org.jenkinsci.plugins.credentialsbinding.masking.SecretPatterns;
-import java.util.stream.Collectors;
public class ServerBuildWrapper extends SimpleBuildWrapper {
private static final String USERNAME_PROPERTY = "secret_server.oauth2.username";
@@ -57,8 +54,7 @@ public void setSecrets(final List secrets) {
@Override
public ConsoleLogFilter createLoggerDecorator(final Run, ?> build) {
- List values = valuesToMask.stream().filter(Objects::nonNull).collect(Collectors.toList());
- return new ServerConsoleLogFilter(build.getCharset().name(), !values.isEmpty() ? SecretPatterns.getAggregateSecretPattern(values) : null);
+ return new ServerConsoleLogFilter(build.getCharset().name(), valuesToMask);
}
@Override
diff --git a/src/main/java/com/thycotic/secrets/jenkins/ServerConsoleLogFilter.java b/src/main/java/com/thycotic/secrets/jenkins/ServerConsoleLogFilter.java
index ac49ac8..5f69cfc 100644
--- a/src/main/java/com/thycotic/secrets/jenkins/ServerConsoleLogFilter.java
+++ b/src/main/java/com/thycotic/secrets/jenkins/ServerConsoleLogFilter.java
@@ -6,23 +6,44 @@
import java.io.OutputStream;
import java.io.Serializable;
import java.io.IOException;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
import java.util.regex.Pattern;
import org.jenkinsci.plugins.credentialsbinding.masking.SecretPatterns;
+import java.util.regex.PatternSyntaxException;
// borrowed from https://github.com/jenkinsci/azure-keyvault-plugin/blob/master/src/main/java/org/jenkinsci/plugins/azurekeyvaultplugin/MaskingConsoleLogFilter.java
public class ServerConsoleLogFilter extends ConsoleLogFilter implements Serializable {
private static final long serialVersionUID = 1L;
private final String charsetName;
- private final Pattern valuesToMask;
+ private final List valuesToMask;
- public ServerConsoleLogFilter(final String charsetName, final Pattern valuesToMask) {
+ public ServerConsoleLogFilter(final String charsetName, final List valuesToMask) {
this.charsetName = charsetName;
this.valuesToMask = valuesToMask;
}
@Override
public OutputStream decorateLogger(Run run, final OutputStream logger) throws IOException, InterruptedException {
- return new SecretPatterns.MaskingOutputStream(logger, () -> valuesToMask, charsetName);
+ return new SecretPatterns.MaskingOutputStream(logger, () -> {
+ List values = valuesToMask.stream().filter(Objects::nonNull).collect(Collectors.toList());
+ if (!values.isEmpty()) {
+ return ServerConsoleLogFilter.getAggregateSecretPattern(values);
+ } else {
+ return null;
+ }
+ },charsetName);
+ }
+
+ public static Pattern getAggregateSecretPattern(List patterns) {
+ String aggregatedPattern = String.join("|", patterns);
+ try {
+ return Pattern.compile(aggregatedPattern);
+ } catch (PatternSyntaxException e) {
+ System.err.println("Error compiling pattern: " + e.getMessage());
+ return null;
+ }
}
}