Skip to content
Snippets Groups Projects
Commit 73c2dfdc authored by OZGCloud's avatar OZGCloud
Browse files

OZG-6177 improve service class

parent cd254ea0
No related branches found
No related tags found
No related merge requests found
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;
}
}
......@@ -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());
......
......@@ -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();
}
......
......@@ -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";
private static final String ETR_DEPLOYMENT_NAME = "elster-transfer";
private static final String MUK_USER_SECRET_NAME = "muk-user-secret";
public void updateConfigurationAndRestartDeployment(String namespace) {
String psw = updateConfigMap(namespace, ETR_NAMESPACE, CONFIG_MAP_NAME);
public void updateConfigMapAndRestartDeploymentAndCreateSecret(String namespace) {
LOG.info("Updating Configmap");
String userPassword = 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);
// 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");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment