From afe71a81504d474d423b27459d13561409372872 Mon Sep 17 00:00:00 2001 From: Paul Latzelsperger Date: Fri, 16 Jun 2023 11:39:06 +0200 Subject: [PATCH] chore: remove in-mem vault --- .../edc-runtime-memory/build.gradle.kts | 1 + .../edc/vault/memory/InMemoryVault.java | 53 ------------------ ...Extension.java => VaultSeedExtension.java} | 21 +++---- ...rg.eclipse.edc.spi.system.ServiceExtension | 2 +- .../edc/vault/memory/InMemoryVaultTest.java | 56 ------------------- ...nTest.java => VaultSeedExtensionTest.java} | 24 +++++--- 6 files changed, 27 insertions(+), 130 deletions(-) delete mode 100644 edc-controlplane/edc-runtime-memory/src/main/java/org/eclipse/tractusx/edc/vault/memory/InMemoryVault.java rename edc-controlplane/edc-runtime-memory/src/main/java/org/eclipse/tractusx/edc/vault/memory/{VaultMemoryExtension.java => VaultSeedExtension.java} (66%) delete mode 100644 edc-controlplane/edc-runtime-memory/src/test/java/org/eclipse/tractusx/edc/vault/memory/InMemoryVaultTest.java rename edc-controlplane/edc-runtime-memory/src/test/java/org/eclipse/tractusx/edc/vault/memory/{VaultMemoryExtensionTest.java => VaultSeedExtensionTest.java} (61%) diff --git a/edc-controlplane/edc-runtime-memory/build.gradle.kts b/edc-controlplane/edc-runtime-memory/build.gradle.kts index 1df3d6915..191e11d67 100644 --- a/edc-controlplane/edc-runtime-memory/build.gradle.kts +++ b/edc-controlplane/edc-runtime-memory/build.gradle.kts @@ -30,6 +30,7 @@ dependencies { } runtimeOnly(project(":edc-dataplane:edc-dataplane-base")) runtimeOnly(libs.edc.core.controlplane) + testImplementation(libs.edc.junit) } tasks.withType { diff --git a/edc-controlplane/edc-runtime-memory/src/main/java/org/eclipse/tractusx/edc/vault/memory/InMemoryVault.java b/edc-controlplane/edc-runtime-memory/src/main/java/org/eclipse/tractusx/edc/vault/memory/InMemoryVault.java deleted file mode 100644 index 9b92a83c0..000000000 --- a/edc-controlplane/edc-runtime-memory/src/main/java/org/eclipse/tractusx/edc/vault/memory/InMemoryVault.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - * - * This program and the accompanying materials are made available under the - * terms of the Apache License, Version 2.0 which is available at - * https://www.apache.org/licenses/LICENSE-2.0 - * - * SPDX-License-Identifier: Apache-2.0 - * - * Contributors: - * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation - * - */ - -package org.eclipse.tractusx.edc.vault.memory; - -import org.eclipse.edc.spi.monitor.Monitor; -import org.eclipse.edc.spi.result.Result; -import org.eclipse.edc.spi.security.Vault; -import org.jetbrains.annotations.Nullable; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -public class InMemoryVault implements Vault { - private final Map secrets = new ConcurrentHashMap<>(); - private final Monitor monitor; - - public InMemoryVault(Monitor monitor) { - this.monitor = monitor; - } - - @Override - public @Nullable String resolveSecret(String s) { - monitor.debug("resolving secret " + s); - return secrets.getOrDefault(s, null); - } - - @Override - public Result storeSecret(String s, String s1) { - monitor.debug("storing secret " + s); - secrets.put(s, s1); - return Result.success(); - } - - @Override - public Result deleteSecret(String s) { - monitor.debug("deleting secret " + s); - return secrets.remove(s) == null ? - Result.failure("Secret with key " + s + " does not exist") : - Result.success(); - } -} diff --git a/edc-controlplane/edc-runtime-memory/src/main/java/org/eclipse/tractusx/edc/vault/memory/VaultMemoryExtension.java b/edc-controlplane/edc-runtime-memory/src/main/java/org/eclipse/tractusx/edc/vault/memory/VaultSeedExtension.java similarity index 66% rename from edc-controlplane/edc-runtime-memory/src/main/java/org/eclipse/tractusx/edc/vault/memory/VaultMemoryExtension.java rename to edc-controlplane/edc-runtime-memory/src/main/java/org/eclipse/tractusx/edc/vault/memory/VaultSeedExtension.java index 434e7886f..67c64bfa6 100644 --- a/edc-controlplane/edc-runtime-memory/src/main/java/org/eclipse/tractusx/edc/vault/memory/VaultMemoryExtension.java +++ b/edc-controlplane/edc-runtime-memory/src/main/java/org/eclipse/tractusx/edc/vault/memory/VaultSeedExtension.java @@ -13,27 +13,27 @@ */ package org.eclipse.tractusx.edc.vault.memory; +import org.eclipse.edc.runtime.metamodel.annotation.BaseExtension; import org.eclipse.edc.runtime.metamodel.annotation.Extension; +import org.eclipse.edc.runtime.metamodel.annotation.Inject; import org.eclipse.edc.runtime.metamodel.annotation.Provider; -import org.eclipse.edc.runtime.metamodel.annotation.Provides; import org.eclipse.edc.runtime.metamodel.annotation.Setting; -import org.eclipse.edc.spi.security.CertificateResolver; -import org.eclipse.edc.spi.security.PrivateKeyResolver; import org.eclipse.edc.spi.security.Vault; -import org.eclipse.edc.spi.security.VaultCertificateResolver; -import org.eclipse.edc.spi.security.VaultPrivateKeyResolver; import org.eclipse.edc.spi.system.ServiceExtension; import org.eclipse.edc.spi.system.ServiceExtensionContext; import java.util.stream.Stream; -@Provides({PrivateKeyResolver.class, CertificateResolver.class}) -@Extension(value = "In-memory vault extension", categories = {"vault", "security"}) -public class VaultMemoryExtension implements ServiceExtension { +@Extension(value = "Vault seed extension: adds secrets to the vault", categories = {"vault", "security"}) +@BaseExtension +public class VaultSeedExtension implements ServiceExtension { @Setting(value = "Secrets with which the vault gets initially populated. Specify as comma-separated list of key:secret pairs.") public static final String VAULT_MEMORY_SECRETS_PROPERTY = "edc.vault.secrets"; - public static final String NAME = "In-Memory Vault Extension"; + public static final String NAME = "Vault Seed Extension"; + + @Inject + private Vault vault; @Override public String name() { @@ -43,9 +43,6 @@ public String name() { @Provider public Vault createInMemVault(ServiceExtensionContext context) { var seedSecrets = context.getSetting(VAULT_MEMORY_SECRETS_PROPERTY, null); - var vault = new InMemoryVault(context.getMonitor()); - context.registerService(PrivateKeyResolver.class, new VaultPrivateKeyResolver(vault)); - context.registerService(CertificateResolver.class, new VaultCertificateResolver(vault)); if (seedSecrets != null) { Stream.of(seedSecrets.split(";")) .filter(pair -> pair.contains(":")) diff --git a/edc-controlplane/edc-runtime-memory/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension b/edc-controlplane/edc-runtime-memory/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension index b105388ea..59e5aeac1 100644 --- a/edc-controlplane/edc-runtime-memory/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension +++ b/edc-controlplane/edc-runtime-memory/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension @@ -18,4 +18,4 @@ # SPDX-License-Identifier: Apache-2.0 # -org.eclipse.tractusx.edc.vault.memory.VaultMemoryExtension +org.eclipse.tractusx.edc.vault.memory.VaultSeedExtension diff --git a/edc-controlplane/edc-runtime-memory/src/test/java/org/eclipse/tractusx/edc/vault/memory/InMemoryVaultTest.java b/edc-controlplane/edc-runtime-memory/src/test/java/org/eclipse/tractusx/edc/vault/memory/InMemoryVaultTest.java deleted file mode 100644 index c00ae8180..000000000 --- a/edc-controlplane/edc-runtime-memory/src/test/java/org/eclipse/tractusx/edc/vault/memory/InMemoryVaultTest.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - * - * This program and the accompanying materials are made available under the - * terms of the Apache License, Version 2.0 which is available at - * https://www.apache.org/licenses/LICENSE-2.0 - * - * SPDX-License-Identifier: Apache-2.0 - * - * Contributors: - * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation - * - */ - -package org.eclipse.tractusx.edc.vault.memory; - -import org.eclipse.edc.spi.monitor.Monitor; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; - -class InMemoryVaultTest { - - private InMemoryVault vault; - - @BeforeEach - void setUp() { - vault = new InMemoryVault(mock(Monitor.class)); - } - - @Test - void resolveSecret() { - assertThat(vault.resolveSecret("key")).isNull(); - vault.storeSecret("key", "secret"); - assertThat(vault.resolveSecret("key")).isEqualTo("secret"); - } - - @Test - void storeSecret() { - assertThat(vault.storeSecret("key", "value1").succeeded()).isTrue(); - assertThat(vault.resolveSecret("key")).isEqualTo("value1"); - assertThat(vault.storeSecret("key", "value2").succeeded()).isTrue(); - assertThat(vault.resolveSecret("key")).isEqualTo("value2"); - } - - @Test - void deleteSecret() { - assertThat(vault.deleteSecret("key").succeeded()).isFalse(); - assertThat(vault.storeSecret("key", "value1").succeeded()).isTrue(); - assertThat(vault.deleteSecret("key").succeeded()).isTrue(); - assertThat(vault.resolveSecret("key")).isNull(); - - } -} diff --git a/edc-controlplane/edc-runtime-memory/src/test/java/org/eclipse/tractusx/edc/vault/memory/VaultMemoryExtensionTest.java b/edc-controlplane/edc-runtime-memory/src/test/java/org/eclipse/tractusx/edc/vault/memory/VaultSeedExtensionTest.java similarity index 61% rename from edc-controlplane/edc-runtime-memory/src/test/java/org/eclipse/tractusx/edc/vault/memory/VaultMemoryExtensionTest.java rename to edc-controlplane/edc-runtime-memory/src/test/java/org/eclipse/tractusx/edc/vault/memory/VaultSeedExtensionTest.java index 7012d5285..e0ffd32cd 100644 --- a/edc-controlplane/edc-runtime-memory/src/test/java/org/eclipse/tractusx/edc/vault/memory/VaultMemoryExtensionTest.java +++ b/edc-controlplane/edc-runtime-memory/src/test/java/org/eclipse/tractusx/edc/vault/memory/VaultSeedExtensionTest.java @@ -14,10 +14,15 @@ package org.eclipse.tractusx.edc.vault.memory; +import org.eclipse.edc.connector.core.vault.InMemoryVault; +import org.eclipse.edc.junit.extensions.DependencyInjectionExtension; import org.eclipse.edc.spi.monitor.Monitor; +import org.eclipse.edc.spi.security.Vault; import org.eclipse.edc.spi.system.ServiceExtensionContext; +import org.eclipse.edc.spi.system.injection.ObjectFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @@ -25,32 +30,35 @@ import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -class VaultMemoryExtensionTest { - private VaultMemoryExtension extension; +@ExtendWith(DependencyInjectionExtension.class) +class VaultSeedExtensionTest { + private VaultSeedExtension extension; private ServiceExtensionContext context; private Monitor monitor; @BeforeEach - void setup() { - extension = new VaultMemoryExtension(); - context = mock(ServiceExtensionContext.class); + void setup(ServiceExtensionContext context, ObjectFactory factory) { + this.context = spy(context); monitor = mock(Monitor.class); - when(context.getMonitor()).thenReturn(monitor); + context.registerService(Monitor.class, monitor); + context.registerService(Vault.class, new InMemoryVault(monitor)); + extension = factory.constructInstance(VaultSeedExtension.class); } @Test void name() { - assertThat(extension.name()).isEqualTo("In-Memory Vault Extension"); + assertThat(extension.name()).isEqualTo("Vault Seed Extension"); } @ParameterizedTest @ValueSource(strings = {"key1:", "key1:value1", "key1:value1;", ";key1:value1", ";sdf;key1:value1"}) void createInMemVault_validString(String secret) { - when(context.getSetting(eq(VaultMemoryExtension.VAULT_MEMORY_SECRETS_PROPERTY), eq(null))).thenReturn(secret); + when(context.getSetting(eq(VaultSeedExtension.VAULT_MEMORY_SECRETS_PROPERTY), eq(null))).thenReturn(secret); extension.createInMemVault(context); verify(monitor, times(1)).debug(anyString()); }