diff --git a/src/main/java/de/ozgcloud/operator/elstertransfer/user/UserList.java b/src/main/java/de/ozgcloud/operator/elstertransfer/user/ConfigMapUserList.java similarity index 88% rename from src/main/java/de/ozgcloud/operator/elstertransfer/user/UserList.java rename to src/main/java/de/ozgcloud/operator/elstertransfer/user/ConfigMapUserList.java index d2603b8b134de684ff22cebad926a2778f8ee7ad..539ceb5d499776dea979cc0119bd8f9ca8b89365 100644 --- a/src/main/java/de/ozgcloud/operator/elstertransfer/user/UserList.java +++ b/src/main/java/de/ozgcloud/operator/elstertransfer/user/ConfigMapUserList.java @@ -1,17 +1,16 @@ package de.ozgcloud.operator.elstertransfer.user; +import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.NoSuchElementException; -/** - * TODO Gib mir einen schöneren Namen - */ -public class UserList { +public class ConfigMapUserList { private List<Map<String, Object>> usersList; - public UserList(List<Map<String, Object>> usersList) { + public ConfigMapUserList(List<Map<String, Object>> usersList) { this.usersList = usersList; } @@ -53,4 +52,5 @@ public class UserList { public List<Map<String, Object>> getUsersList() { return usersList; } + } diff --git a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserReconciler.java b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserReconciler.java index 60ed474e829f01251ac55854a25a166291ba947e..c696ae80470fd035ee9829c11911ba5ee67fcab3 100644 --- a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserReconciler.java +++ b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserReconciler.java @@ -31,21 +31,23 @@ public class OzgCloudElsterTransferUserReconciler implements Reconciler<OzgCloud try { String namespace = elsterTransferUser.getMetadata().getNamespace(); - elsterTransferUserService.updateConfigurationAndRestartDeployment(namespace); + elsterTransferUserService.updateConfigMapAndRestartDeploymentAndCreateSecret(namespace); - //TODO refactor message builder - elsterTransferUser.setStatus(OzgCloudElsterTransferUserStatus.builder().status(OzgCloudCustomResourceStatus.OK).message(null).build()); + elsterTransferUser.setStatus(getElsterTransferUserStatus(OzgCloudCustomResourceStatus.OK, null)); return UpdateControl.updateStatus(elsterTransferUser); } catch (Exception e) { LOG.warn(elsterTransferUser.getMetadata().getName() + " could not reconcile in namespace " + elsterTransferUser.getMetadata().getNamespace(), e); elsterTransferUser - //TODO refactor message builder - .setStatus(OzgCloudElsterTransferUserStatus.builder().status(OzgCloudCustomResourceStatus.ERROR).message(e.getMessage()).build()); + .setStatus(getElsterTransferUserStatus(OzgCloudCustomResourceStatus.ERROR, e.getMessage())); return UpdateControl.updateStatus(elsterTransferUser).rescheduleAfter(Config.RECONCILER_RETRY_SECONDS); } } + OzgCloudElsterTransferUserStatus getElsterTransferUserStatus(OzgCloudCustomResourceStatus status, String message) { + return OzgCloudElsterTransferUserStatus.builder().status(status).message(message).build(); + } + @Override public DeleteControl cleanup(OzgCloudElsterTransferUser user, Context<OzgCloudElsterTransferUser> context) { LOG.info("{} cleanup...", user.getMetadata().getName()); 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 75e112b591dd7e3b9044a223ae0ff35f311e1257..9179467f476d3aca319aa4f3a09ea731570505e4 100644 --- a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteService.java +++ b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteService.java @@ -19,7 +19,7 @@ import lombok.RequiredArgsConstructor; public class OzgCloudElsterTransferUserRemoteService { private final KubernetesClient client; - private static final String SECRET_NAME = "muk-user-secret"; + public ConfigMap getConfigMap(String configmapNamespace, String configMapName) { return client.configMaps().inNamespace(configmapNamespace).withName(configMapName).get(); @@ -61,13 +61,13 @@ public class OzgCloudElsterTransferUserRemoteService { } - public void createSecret(String namespace, String psw) { + public void createSecret(String namespace, String userPassword, String secretName) { Secret secret = new SecretBuilder() .withNewMetadata() - .withName(SECRET_NAME) + .withName(secretName) .endMetadata() .addToData("login", Base64.getEncoder().encodeToString(namespace.getBytes())) - .addToData("password", Base64.getEncoder().encodeToString(psw.getBytes())) + .addToData("password", Base64.getEncoder().encodeToString(userPassword.getBytes())) .build(); client.secrets().inNamespace(namespace).resource(secret).createOrReplace(); } 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 e9d79f719389735fef22e269401e5325f5b20305..cb0e170cb9939cf2c511442d07b5729d5e75b197 100644 --- a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserService.java +++ b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserService.java @@ -22,25 +22,24 @@ public class OzgCloudElsterTransferUserService { private static final String ETR_NAMESPACE = "etr-user-creation"; public static final String USER_ROLE = "USER"; private static final String CONFIG_MAP_NAME = "etr-user-config"; - private static final String DEPLOYMENT_NAME = "elster-transfer"; - - public void updateConfigurationAndRestartDeployment(String namespace) { - String psw = updateConfigMap(namespace, ETR_NAMESPACE, CONFIG_MAP_NAME); - - // psw will not be generated if the user "login" already exist in configmap - if (!psw.isEmpty()) { - // Restart the deployment - LOG.info("Restart Deployment"); - restartDeployment(ETR_NAMESPACE, DEPLOYMENT_NAME); - // create or update secret - LOG.info("Create Secret"); - createSecret(namespace, psw); + private static final String ETR_DEPLOYMENT_NAME = "elster-transfer"; + private static final String MUK_USER_SECRET_NAME = "muk-user-secret"; + + public void updateConfigMapAndRestartDeploymentAndCreateSecret(String namespace) { + LOG.info("Updating Configmap"); + String userPassword = updateConfigMap(namespace, ETR_NAMESPACE, CONFIG_MAP_NAME); + + // userPassword will not be generated if the user "login" already exist in configmap + if (!userPassword.isEmpty()) { + LOG.info("Restarting Deployment"); + restartDeployment(ETR_NAMESPACE, ETR_DEPLOYMENT_NAME); + LOG.info("Creating Secret"); + createSecret(namespace, userPassword,MUK_USER_SECRET_NAME); } } String updateConfigMap(String namespace, String configmapNamespace, String configMapName) { - //TODO rename psw - String psw = ""; + String userPassword = ""; ConfigMap configMap = remoteService.getConfigMap(configmapNamespace, configMapName); if (configMap == null) { @@ -48,27 +47,23 @@ public class OzgCloudElsterTransferUserService { configMap = remoteService.createConfigMap(configmapNamespace, configMapName); } - // Map<String, Object> usersMap = getUsersMapFromConfigMap(configMap); - // List<Map<String, Object>> usersList = getUsersListFromMap(usersMap); - - UserList users = getUsersFromYaml(configMap); + ConfigMapUserList users = getUsersFromYaml(configMap); // use namespace as user "login" and "group" if (userExistsInList(users, namespace)) { LOG.error("User with login '{}' already exists in ConfigMap '{}'.", namespace, configMapName); } else { - psw = generatePassword(); - String passwordHash = hashPassword(psw); + userPassword = generatePassword(); + String passwordHash = hashPassword(userPassword); addUserToList(users, namespace, passwordHash); - // Manually construct the YAML string String usersYaml = constructYamlEntries(users); remoteService.updateConfigMapData(configMap, USERS_KEY, usersYaml); LOG.debug("ConfigMap updated successfully: {}", configMapName); } - return psw; + return userPassword; } void restartDeployment(String etrNamespace, String deploymentName) { @@ -89,7 +84,7 @@ public class OzgCloudElsterTransferUserService { return false; } - UserList users1 = getUsersFromYaml(configMap); + ConfigMapUserList users1 = getUsersFromYaml(configMap); boolean userExists = users1.existsUser(userLogin); LOG.info("User with login '{}' exists in ConfigMap '{}'", userLogin, configMapName); return userExists; @@ -98,7 +93,7 @@ public class OzgCloudElsterTransferUserService { // Map<String, Object> yamlMap = getUsersMapFromConfigMap(configMap); // // if (!yamlMap.isEmpty()) { - // //code refactoren mit UserList Objekt (???) + // //code refactoren mit ConfigMapUserList Objekt (???) // // getUsersFromYaml(yamlMap); // @@ -129,12 +124,10 @@ public class OzgCloudElsterTransferUserService { return; } - UserList usersList = getUsersFromYaml(configMap); + ConfigMapUserList usersList = getUsersFromYaml(configMap); usersList.removeDeleted(userLogin); String updatedUsersYaml = constructYamlEntries(usersList); - //usersMap.put("users", usersList); - //String updatedUsersYaml = new ObjectMapper().writeValueAsString(usersMap); remoteService.updateConfigMapData(configMap, USERS_KEY, updatedUsersYaml); LOG.info("User with login '{}' removed from configmap successfully", userLogin); @@ -143,8 +136,8 @@ public class OzgCloudElsterTransferUserService { } } - void createSecret(String namespace, String psw) { - remoteService.createSecret(namespace, psw); + void createSecret(String namespace, String userPassword, String secretName) { + remoteService.createSecret(namespace, userPassword, secretName); LOG.info("Secret for user in namespace '{}' created successfully", namespace); } @@ -165,11 +158,11 @@ public class OzgCloudElsterTransferUserService { // return usersList != null ? usersList : new ArrayList<>(); // } - UserList getUsersFromYaml(ConfigMap configMap) { + ConfigMapUserList getUsersFromYaml(ConfigMap configMap) { String usersYaml = configMap.getData().get(USERS_KEY); Map<String, Object> load = new Yaml().load(usersYaml); List<Map<String, Object>> usersList = (List<Map<String, Object>>) load.get("users"); - return new UserList(usersList); + return new ConfigMapUserList(usersList); } //TODO: Löschen @@ -182,11 +175,11 @@ public class OzgCloudElsterTransferUserService { // return false; // } - boolean userExistsInList(UserList usersList, String login) { + boolean userExistsInList(ConfigMapUserList usersList, String login) { return usersList.existsUser(login); } - void addUserToList(UserList usersList, String login, String passwordHash) { + void addUserToList(ConfigMapUserList usersList, String login, String passwordHash) { usersList.addUserToList(login, passwordHash, USER_ROLE); } @@ -208,7 +201,7 @@ public class OzgCloudElsterTransferUserService { return BCrypt.hashpw(password, BCrypt.gensalt()); } - String constructYamlEntries(UserList userList) { + String constructYamlEntries(ConfigMapUserList userList) { List<Map<String, Object>> usersList = userList.getUsersList(); StringBuilder usersYaml = new StringBuilder(); usersYaml.append("fileFormat: 1\nusers:\n");