From 1c440307390685fbad531a48789cadd2dcb929ec Mon Sep 17 00:00:00 2001 From: "brian.mulier" Date: Mon, 3 Jul 2023 17:13:16 +0200 Subject: [PATCH] fix(core): add secrets cache closes #1679 --- .../io/kestra/core/secret/SecretService.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/io/kestra/core/secret/SecretService.java b/core/src/main/java/io/kestra/core/secret/SecretService.java index d903ea56b76..794b33b59f4 100644 --- a/core/src/main/java/io/kestra/core/secret/SecretService.java +++ b/core/src/main/java/io/kestra/core/secret/SecretService.java @@ -4,14 +4,31 @@ import jakarta.inject.Singleton; import java.util.Base64; +import java.util.HashMap; +import java.util.Map; import java.util.Optional; @Singleton public class SecretService { + private Map decodedSecrets; + public String findSecret(String key) throws IllegalVariableEvaluationException { - String environmentVariable = Optional.ofNullable(System.getenv("SECRETS_" + key.toUpperCase())) - .orElseThrow(() -> new IllegalVariableEvaluationException("Unable to find secret '" + key + "'. " + - "You should add it in your environment variables as 'SECRETS_" + key.toUpperCase()+"' with base64-encoded value.")); - return new String(Base64.getDecoder().decode(environmentVariable)); + if(decodedSecrets == null) { + decodedSecrets = new HashMap<>(); + } + + String decodedSecret = decodedSecrets.computeIfAbsent( + key, + (k) -> Optional.ofNullable(System.getenv("SECRETS_" + k.toUpperCase())) + .map(environmentVariable -> new String(Base64.getDecoder().decode(environmentVariable))) + .orElse(null) + ); + + if(decodedSecret == null){ + throw new IllegalVariableEvaluationException("Unable to find secret '" + key + "'. " + + "You should add it in your environment variables as 'SECRETS_" + key.toUpperCase()+"' with base64-encoded value."); + } + + return decodedSecret; } }