From ffa8b2c33661bb97e99efc4e1fa4bacecaa22525 Mon Sep 17 00:00:00 2001 From: eugen-keeper Date: Tue, 22 Jul 2025 01:49:34 +0000 Subject: [PATCH] GUACAMOLE-2030: Show the Keeper notation warning only once. --- .../guacamole/vault/ksm/secret/KsmClient.java | 7 ++++-- .../vault/ksm/secret/KsmSecretService.java | 22 +++++++++---------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/extensions/guacamole-vault/modules/guacamole-vault-ksm/src/main/java/org/apache/guacamole/vault/ksm/secret/KsmClient.java b/extensions/guacamole-vault/modules/guacamole-vault-ksm/src/main/java/org/apache/guacamole/vault/ksm/secret/KsmClient.java index c9a74e59b..fd31efa24 100644 --- a/extensions/guacamole-vault/modules/guacamole-vault-ksm/src/main/java/org/apache/guacamole/vault/ksm/secret/KsmClient.java +++ b/extensions/guacamole-vault/modules/guacamole-vault-ksm/src/main/java/org/apache/guacamole/vault/ksm/secret/KsmClient.java @@ -656,14 +656,17 @@ public class KsmClient { // There is no way to differentiate if an error is caused by // a non-existing record or a pure parse failure. catch (Error | Exception e) { - logger.warn("Keeper notation \"{}\" could not be resolved " - + "to a record: {}", notation, e.getMessage()); logger.debug("Retrieval of record by Keeper notation failed.", e); // If the secret is not found, invoke the fallback function if (fallbackFunction != null) return fallbackFunction.get(); + // Show the warning only if there is no fallback function + // and this was the last attempt + logger.warn("Keeper notation \"{}\" could not be resolved " + + "to a record: {}", notation, e.getMessage()); + return CompletableFuture.completedFuture(null); } finally { diff --git a/extensions/guacamole-vault/modules/guacamole-vault-ksm/src/main/java/org/apache/guacamole/vault/ksm/secret/KsmSecretService.java b/extensions/guacamole-vault/modules/guacamole-vault-ksm/src/main/java/org/apache/guacamole/vault/ksm/secret/KsmSecretService.java index 717a125e3..632d597fa 100644 --- a/extensions/guacamole-vault/modules/guacamole-vault-ksm/src/main/java/org/apache/guacamole/vault/ksm/secret/KsmSecretService.java +++ b/extensions/guacamole-vault/modules/guacamole-vault-ksm/src/main/java/org/apache/guacamole/vault/ksm/secret/KsmSecretService.java @@ -152,21 +152,21 @@ public class KsmSecretService implements VaultSecretService { // Attempt to find a KSM config for this connection or group String ksmConfig = getConnectionGroupKsmConfig(userContext, connectable); + // Get the user-supplied KSM config, if allowed by config and + // set by the user + String userKsmConfig = getUserKSMConfig(userContext, connectable); + + // If the user config is not defined or happens to be the same + // as admin-defined one, resolve without the fallback + if (userKsmConfig == null || Objects.equal(userKsmConfig, ksmConfig)) { + return getClient(ksmConfig).getSecret(name); + } + return getClient(ksmConfig).getSecret(name, new GuacamoleExceptionSupplier>() { @Override public Future get() throws GuacamoleException { - - // Get the user-supplied KSM config, if allowed by config and - // set by the user - String userKsmConfig = getUserKSMConfig(userContext, connectable); - - // If the user config happens to be the same as admin-defined one, - // don't bother trying again - if (userKsmConfig != null && !Objects.equal(userKsmConfig, ksmConfig)) - return getClient(userKsmConfig).getSecret(name); - - return CompletableFuture.completedFuture(null); + return getClient(userKsmConfig).getSecret(name); } });