diff --git a/pom.xml b/pom.xml index e301c163663a22617bc906f8a17188c455b22219..04f57152090fc10b69de0cbcc6b6830b13547052 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-parent</artifactId> - <version>4.3.2</version> + <version>4.6.0</version> <relativePath/> </parent> @@ -41,11 +41,11 @@ <name>OzgCloud Operator Elster-Transfer</name> <description>OzgCloud Operator Elster-Transfer</description> + <inceptionYear>2024</inceptionYear> <properties> - <operator-sdk.version>5.4.1</operator-sdk.version> - <spring-security-core.version>6.3.3</spring-security-core.version> + <operator-sdk.version>5.6.0</operator-sdk.version> <mustache.version>0.9.14</mustache.version> <snakeyaml.version>2.0</snakeyaml.version> @@ -72,7 +72,6 @@ <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> - <version>${spring-security-core.version}</version> </dependency> <!-- tools --> <dependency> @@ -104,34 +103,6 @@ </dependency> </dependencies> - - <build> - <pluginManagement> - <plugins> - <plugin> - <groupId>com.mycila</groupId> - <artifactId>license-maven-plugin</artifactId> - <configuration> - <mapping> - <ts>SLASHSTAR_STYLE</ts> - <config>SCRIPT_STYLE</config> - </mapping> - <licenseSets> - <licenseSet> - <header>license/eupl_v1_2_de/header.txt</header> - <excludes> - <exclude>**/README</exclude> - <exclude>src/test/resources/**</exclude> - <exclude>src/main/resources/**</exclude> - </excludes> - </licenseSet> - </licenseSets> - </configuration> - </plugin> - </plugins> - </pluginManagement> - </build> - <distributionManagement> <repository> <id>ozg-nexus</id> diff --git a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserList.java b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserList.java index 14f918490454fcfaa05edfc627de2b4b6c0af527..01df63b7c88a8dcffa19bf58c21edd5c9154ca48 100644 --- a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserList.java +++ b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserList.java @@ -32,7 +32,13 @@ import lombok.NoArgsConstructor; @NoArgsConstructor @Builder -public class OzgCloudElsterTransferConfigMapUserList { +class OzgCloudElsterTransferConfigMapUserList { + + private static final String ELSTER_TRANSFER_USER_LOGIN_KEY = "login"; + private static final String ELSTER_TRANSFER_USER_ROLE_KEY = "rolle"; + private static final String ELSTER_TRANSFER_USER_CREDENTIALS_KEY = "credentials"; + private static final String ELSTER_TRANSFER_USER_GROUP_KEY = "gruppe"; + private static final String ELSTER_TRANSFER_USER_PASSWORTHASH_KEY = "passwortHash"; private List<Map<String, Object>> usersList; @@ -42,20 +48,20 @@ public class OzgCloudElsterTransferConfigMapUserList { boolean existsUser(String login) { return usersList.stream() - .anyMatch(existingUser -> login.equals(existingUser.get("login"))); + .anyMatch(existingUser -> login.equals(existingUser.get(ELSTER_TRANSFER_USER_LOGIN_KEY))); } void addUserToList(String login, String passwordHash, String role) { Map<String, Object> formattedUser = Map.of( - "login", login, - "rolle", role, - "credentials", Map.of("passwortHash", passwordHash), - "gruppe", login); + ELSTER_TRANSFER_USER_LOGIN_KEY, login, + ELSTER_TRANSFER_USER_ROLE_KEY, role, + ELSTER_TRANSFER_USER_CREDENTIALS_KEY, Map.of(ELSTER_TRANSFER_USER_PASSWORTHASH_KEY, passwordHash), + ELSTER_TRANSFER_USER_GROUP_KEY, login); usersList.add(formattedUser); } void removeDeleted(String userLogin) { - usersList.removeIf(userMap -> userLogin.equals(userMap.get("login"))); + usersList.removeIf(userMap -> userLogin.equals(userMap.get(ELSTER_TRANSFER_USER_LOGIN_KEY))); } public List<Map<String, Object>> getUsersList() { diff --git a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteService.java b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteService.java index aaa21f8dd98808369dd9cada68cd920371756bb7..2e830ff3d76a6e7e56d5f9931f0cb4ba47421301 100644 --- a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteService.java +++ b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteService.java @@ -26,32 +26,38 @@ package de.ozgcloud.operator.elstertransfer.user; import java.util.Base64; import java.util.Objects; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import io.fabric8.kubernetes.api.model.ConfigMap; import io.fabric8.kubernetes.api.model.ConfigMapBuilder; +import io.fabric8.kubernetes.api.model.ConfigMapList; import io.fabric8.kubernetes.api.model.Secret; import io.fabric8.kubernetes.api.model.SecretBuilder; import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation; import io.fabric8.kubernetes.client.dsl.Resource; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor -@Component -public class OzgCloudElsterTransferUserRemoteService { +@Service +class OzgCloudElsterTransferUserRemoteService { private final KubernetesClient client; public ConfigMap getConfigMap(String configmapNamespace, String configMapName) { - return client.configMaps().inNamespace(configmapNamespace).withName(configMapName).get(); + return getConfigMapNonNamespaceOperation(configmapNamespace).withName(configMapName).get(); } public ConfigMap createConfigMap(String configmapNamespace, String configMapName) { - return client.configMaps().inNamespace(configmapNamespace).resource(buildConfigMap(configMapName)).create(); + return getConfigMapNonNamespaceOperation(configmapNamespace).resource(buildConfigMap(configMapName)).create(); } - public ConfigMap buildConfigMap(String configMapName) { + NonNamespaceOperation<ConfigMap, ConfigMapList, Resource<ConfigMap>> getConfigMapNonNamespaceOperation(String configmapNamespace) { + return client.configMaps().inNamespace(configmapNamespace); + } + + ConfigMap buildConfigMap(String configMapName) { return new ConfigMapBuilder() .withNewMetadata() .withName(configMapName) @@ -74,7 +80,7 @@ public class OzgCloudElsterTransferUserRemoteService { } } - public Resource<Deployment> getDeploymentResource(String namespace, String deploymentName) { + Resource<Deployment> getDeploymentResource(String namespace, String deploymentName) { return client.apps().deployments().inNamespace(namespace).withName(deploymentName); } @@ -87,14 +93,18 @@ public class OzgCloudElsterTransferUserRemoteService { client.resource(buildUserSecret(namespace, userPassword, secretName)).serverSideApply(); } - public Secret buildUserSecret(String namespace, String userPassword, String secretName) { + Secret buildUserSecret(String namespace, String userPassword, String secretName) { return new SecretBuilder() .withNewMetadata() .withName(secretName) .endMetadata() - .addToData(Constants.ELSTER_TRANSFER_USER_LOGIN_KEY, Base64.getEncoder().encodeToString(namespace.getBytes())) - .addToData(Constants.ELSTER_TRANSFER_USER_PASSWORD_KEY, Base64.getEncoder().encodeToString(userPassword.getBytes())) + .addToData(Constants.ELSTER_TRANSFER_USER_LOGIN_KEY, getEncodedString(namespace.getBytes())) + .addToData(Constants.ELSTER_TRANSFER_USER_PASSWORD_KEY, getEncodedString(userPassword.getBytes())) .build(); } + private String getEncodedString(byte[] bytes) { + return Base64.getEncoder().encodeToString(bytes); + } + } diff --git a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserService.java b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserService.java index eb80ad72ff704af2090c005c022d856fda3ad366..aa27e22a279cc532f6d85c5f201fff118e00e725 100644 --- a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserService.java +++ b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserService.java @@ -32,7 +32,7 @@ import java.util.UUID; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.crypto.bcrypt.BCrypt; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import org.yaml.snakeyaml.Yaml; import com.github.mustachejava.DefaultMustacheFactory; @@ -45,13 +45,13 @@ import lombok.extern.log4j.Log4j2; @Log4j2 @RequiredArgsConstructor -@Component -public class OzgCloudElsterTransferUserService { +@Service +class OzgCloudElsterTransferUserService { private final OzgCloudElsterTransferUserRemoteService remoteService; @Value("${etr.namespace}") - private String etrNamespace; + private String etrNamespace; public void updateConfigMapAndRestartDeploymentAndCreateSecret(String namespace) { LOG.info("Updating/Creating Configmap"); diff --git a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserListFactory.java b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserListFactory.java index ef483b7443c5e42c3968d319a1bfd2155c621fbd..fb271feae5f6336832ff1bffd6c2c455598bd177 100644 --- a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserListFactory.java +++ b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserListFactory.java @@ -31,13 +31,11 @@ public class OzgCloudElsterTransferConfigMapUserListFactory { public static List<Map<String, Object>> create() { Map<String, Object> user1 = Map.of( - "login", "user1", - "rolle", "USER", - "gruppe", "user1", - "credentials", Map.of( - "passwortHash", "$2a$12$cqKZMcwTUe/tju7PIFGhperWdV2Xa9o4fVw5eClbzatRhvxZphE1a" - ) - ); + "login", "user1", + "rolle", "USER", + "gruppe", "user1", + "credentials", Map.of( + "passwortHash", "$2a$12$cqKZMcwTUe/tju7PIFGhperWdV2Xa9o4fVw5eClbzatRhvxZphE1a")); List<Map<String, Object>> usersList = Arrays.asList(user1); return usersList; } diff --git a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteServiceTest.java b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteServiceTest.java index 9e41e70a0a071c698ff615a54babba77396f0938..19807c1e49b76359470753d8ea1def25d1b14e09 100644 --- a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteServiceTest.java +++ b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteServiceTest.java @@ -230,14 +230,13 @@ class OzgCloudElsterTransferUserRemoteServiceTest { @DisplayName("update deployment") @Nested class TestUpdateDeployment { - @BeforeEach void setUp() { when(client.apps()).thenReturn(appsAPIGroupDSL); when(appsAPIGroupDSL.deployments()).thenReturn(deploymentOperation); when(deploymentOperation.inNamespace(anyString())).thenReturn(deploymentOperation); - when(deploymentOperation.withName(anyString())).thenReturn(deploymentResource); + when(deploymentOperation.withName(anyString())).thenReturn(deploymentResource); } @Test @@ -249,7 +248,7 @@ class OzgCloudElsterTransferUserRemoteServiceTest { remoteService.restartDeployment(namespace, deploymentName); verify(client.resource(deployment)).update(); - + } @Test @@ -290,7 +289,7 @@ class OzgCloudElsterTransferUserRemoteServiceTest { @Test void shouldCallCreateOrUpdateSecret() { String userPassword = "test-password"; - Secret secret = new SecretBuilder() + Secret secret = new SecretBuilder() .withNewMetadata() .withName(secretName) .endMetadata() @@ -298,7 +297,7 @@ class OzgCloudElsterTransferUserRemoteServiceTest { .addToData("password", Base64.getEncoder().encodeToString(userPassword.getBytes())) .build(); when(client.resource(secret)).thenReturn(namespaceableSecret); - + remoteService.createOrUpdateSecret(namespace, userPassword, secretName); verify(client.resource(secret)).serverSideApply();