Skip to content

Commit b79d418

Browse files
sboardwelljetersen
andauthored
Add SystemPropertyLookup resolver to resolve java system properties (#2064)
Co-authored-by: Joseph Petersen <josephp90@gmail.com>
1 parent bf985b8 commit b79d418

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

plugin/src/main/java/io/jenkins/plugins/casc/SecretSourceResolver.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public SecretSourceResolver(ConfigurationContext configurationContext) {
4646
map.put("readFileBase64", FileBase64Lookup.INSTANCE);
4747
map.put("file", FileStringLookup.INSTANCE);
4848
map.put("readFile", FileStringLookup.INSTANCE);
49+
map.put("sysProp", SystemPropertyLookup.INSTANCE);
4950
map.put("decodeBase64", DecodeBase64Lookup.INSTANCE);
5051
map.put("json", JsonLookup.INSTANCE);
5152
map = Collections.unmodifiableMap(map);
@@ -147,6 +148,21 @@ public String lookup(String key) {
147148
}
148149
}
149150

151+
static class SystemPropertyLookup implements StringLookup {
152+
153+
static final SystemPropertyLookup INSTANCE = new SystemPropertyLookup();
154+
155+
@Override
156+
public String lookup(@NonNull final String key) {
157+
final String output = System.getProperty(key);
158+
if (output == null) {
159+
LOGGER.log(Level.WARNING, String.format("Configuration import: System Properties did not contain the specified key '%s'. Will default to empty string.", key));
160+
return "";
161+
}
162+
return output;
163+
}
164+
}
165+
150166
static class FileStringLookup implements StringLookup {
151167

152168
static final FileStringLookup INSTANCE = new FileStringLookup();

plugin/src/test/java/io/jenkins/plugins/casc/SecretSourceResolverTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.jenkins.plugins.casc.SecretSourceResolver.Base64Lookup;
44
import io.jenkins.plugins.casc.SecretSourceResolver.FileBase64Lookup;
55
import io.jenkins.plugins.casc.SecretSourceResolver.FileStringLookup;
6+
import io.jenkins.plugins.casc.SecretSourceResolver.SystemPropertyLookup;
67
import java.io.File;
78
import java.net.URISyntaxException;
89
import java.nio.file.Files;
@@ -46,6 +47,7 @@ public class SecretSourceResolverTest {
4647
public static final StringLookup DECODE = StringLookupFactory.INSTANCE.base64DecoderStringLookup();
4748
public static final StringLookup FILE = FileStringLookup.INSTANCE;
4849
public static final StringLookup BINARYFILE = FileBase64Lookup.INSTANCE;
50+
public static final StringLookup SYSPROP = SystemPropertyLookup.INSTANCE;
4951

5052
@Before
5153
public void initLogging() {
@@ -348,6 +350,24 @@ public void resolve_BinaryFileBase64() throws Exception {
348350
assertThat(actualBytes, equalTo(expectedBytes));
349351
}
350352

353+
@Test
354+
public void resolve_SystemProperty() throws Exception {
355+
String input = "java.version";
356+
String expected = System.getProperty(input);
357+
String output = resolve("${sysProp:" + input + "}");
358+
assertThat(output, equalTo(SYSPROP.lookup(input)));
359+
assertThat(output, equalTo(expected));
360+
}
361+
362+
@Test
363+
public void resolve_SystemPropertyNotFound() throws Exception {
364+
String input = "java.version.non-existent";
365+
String expected = "";
366+
String output = resolve("${sysProp:" + input + "}");
367+
assertThat(output, equalTo(SYSPROP.lookup(input)));
368+
assertThat(output, equalTo(expected));
369+
}
370+
351371
@Test
352372
public void resolve_Json() {
353373
String input = "{ \"a\": 1, \"b\": 2 }";

0 commit comments

Comments
 (0)