Skip to content

Commit 80b2110

Browse files
authored
Bugfix: Read multiline secrets (#13)
* Read all the lines of the result. In this way, we enable proper reading of multiline secrets. * Add test for multiline secret case
1 parent ffafb62 commit 80b2110

File tree

3 files changed

+51
-1
lines changed

3 files changed

+51
-1
lines changed

src/main/java/com/onepassword/jenkins/plugins/OnePasswordAccessor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.nio.charset.StandardCharsets;
2424
import java.util.*;
2525
import java.util.function.Supplier;
26+
import java.util.stream.Collectors;
2627

2728
public class OnePasswordAccessor implements Serializable {
2829

@@ -126,7 +127,7 @@ public static Map<String, String> retrieveSecrets(Run<?, ?> run, PrintStream log
126127
Process pr = pb.command(commands).start();
127128
BufferedReader stdInput = new BufferedReader(new InputStreamReader(pr.getInputStream(), StandardCharsets.UTF_8));
128129
BufferedReader stdError = new BufferedReader(new InputStreamReader(pr.getErrorStream(), StandardCharsets.UTF_8));
129-
String secretValue = stdInput.readLine();
130+
String secretValue = stdInput.lines().collect(Collectors.joining(System.lineSeparator()));
130131
if (StringUtils.isBlank(secretValue)) {
131132
String s;
132133
StringBuilder errorMessage = new StringBuilder();

src/test/java/com/onepassword/jenkins/plugins/OnePasswordWithSecretsTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,20 @@ public void testSecretsPipeline() throws Exception {
6666
j.assertLogNotContains(TEST_FAILURE, build);
6767
}
6868

69+
@Test
70+
public void testSecretsMultiline() throws Exception {
71+
WorkflowJob project = j.createProject(WorkflowJob.class);
72+
project.setDefinition(new CpsFlowDefinition(readFile(basePath + "testSecretsMultiline.groovy",
73+
Charset.defaultCharset())
74+
.replace("OP_HOST", TEST_CONNECT_HOST)
75+
.replace("OP_CLI_URL",OP_CLI_URL),
76+
true));
77+
78+
WorkflowRun build = j.buildAndAssertSuccess(project);
79+
j.assertLogContains(TEST_SUCCESS, build);
80+
j.assertLogNotContains(TEST_FAILURE, build);
81+
}
82+
6983
@Test
7084
public void testSecretsFromEnv() throws Exception {
7185
WorkflowJob project = j.createProject(WorkflowJob.class);
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
def config = [
2+
connectHost: "OP_HOST",
3+
connectCredentialId: "connect-credential-id"
4+
]
5+
6+
def secrets = [
7+
[envVar: 'MULTILINE_SECRET', secretRef: 'op://acceptance-tests/multiline-secret/notesPlain'],
8+
]
9+
10+
node {
11+
sh 'curl -sSfLo op.zip OP_CLI_URL && unzip -o op.zip && rm op.zip'
12+
withSecrets(config: config, secrets: secrets) {
13+
sh '''
14+
if [ "$MULTILINE_SECRET" = "$(cat << EOF
15+
-----BEGIN PRIVATE KEY-----
16+
RGVhciBzZWN1cml0eSByZXNlYXJjaGVyLApXaGls
17+
ZSB3ZSBkZWVwbHkgYXBwcmVjaWF0ZSB5b3VyIHZp
18+
Z2lsYW5jZSBhbmQgZWZmb3J0cyB0byBtYWtlIHRo
19+
ZSB3b3JsZCBtb3JlIHNlY3VyZSwgSSdtIGFmcmFp
20+
ZCBJIG11c3QgdGVsbCB5b3UgdGhhdCB0aGlzIHZh
21+
bHVlIGlzIG5vdCBhIGFjdHVhbCBwcml2YXRlIGtl
22+
eS4gCkl0J3MgYSBqdXN0IGEgZHVtbXkgc2VjcmV0
23+
IHRoYXQgd2UgdXNlIHRvIHRlc3QgdmFyaW91cyAx
24+
UGFzc3dvcmQgc2VjcmV0cyBpbnRlZ3JhdGlvbnMu
25+
IApTbyBwbGVhc2UgZG9uJ3QgcmVwb3J0IGl0IQo=
26+
-----END PRIVATE KEY-----
27+
EOF
28+
)" ]; then
29+
echo "Strings are equal."
30+
else
31+
echo "Strings are not equal."
32+
fi
33+
'''
34+
}
35+
}

0 commit comments

Comments
 (0)