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

OZG-6177 refactor service class

parent bd029899
Branches
Tags
No related merge requests found
pipeline {
agent {
node {
label 'ozgcloud-jenkins-build-agent'
label 'ozgcloud-jenkins-build-agent-jdk21'
}
}
......
......@@ -21,6 +21,8 @@
<properties>
<operator-sdk.version>5.4.1</operator-sdk.version>
<spring-security-core.version>6.3.3</spring-security-core.version>
<mustache.version>0.9.14</mustache.version>
<snakeyaml.version>2.0</snakeyaml.version>
<spring-boot.build-image.imageName>docker.ozg-sh.de/ozgcloud-elster-transfer-operator:build-latest</spring-boot.build-image.imageName>
</properties>
......@@ -49,8 +51,14 @@
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>2.0</version>
<version>${snakeyaml.version}</version>
</dependency>
<dependency>
<groupId>com.github.spullara.mustache.java</groupId>
<artifactId>compiler</artifactId>
<version>${mustache.version}</version>
</dependency>
<!-- test -->
<dependency>
......
......@@ -49,6 +49,12 @@ public class OzgCloudElsterTransferUserReconciler implements Reconciler<OzgCloud
public DeleteControl cleanup(OzgCloudElsterTransferUser user, Context<OzgCloudElsterTransferUser> context) {
LOG.info("{} cleanup...", user.getMetadata().getName());
String namespace = user.getMetadata().getNamespace();
if (user.getSpec().isKeepAfterDelete()) {
LOG.info("keep data");
return DeleteControl.defaultDelete();
}
try {
service.deleteUserAndRestartDeploymentIfNotKeepUserAndUserExists(user);
return DeleteControl.defaultDelete();
......
package de.ozgcloud.operator.elstertransfer.user;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
import org.springframework.security.crypto.bcrypt.BCrypt;
import org.springframework.stereotype.Component;
import org.yaml.snakeyaml.Yaml;
import com.github.mustachejava.DefaultMustacheFactory;
import com.github.mustachejava.Mustache;
import com.github.mustachejava.MustacheFactory;
import io.fabric8.kubernetes.api.model.ConfigMap;
import io.micrometer.common.util.StringUtils;
import lombok.RequiredArgsConstructor;
......@@ -23,21 +29,18 @@ public class OzgCloudElsterTransferUserService {
public void updateConfigMapAndRestartDeploymentAndCreateSecret(String namespace) {
LOG.info("Updating/Creating Configmap");
String userPassword = generateUsersYamlAndUpdateConfigMap(namespace, Constants.ETR_NAMESPACE, Constants.ELSTER_TRANSFER_USER_LOGIN_KEY);
if (StringUtils.isNotEmpty(userPassword)) {
if (!userExists(namespace, Constants.ETR_NAMESPACE, Constants.CONFIG_MAP_NAME)) {
String userPassword = updateConfigMapAndGenerateUserPassword(namespace, Constants.ETR_NAMESPACE, Constants.CONFIG_MAP_NAME);
LOG.info("Restarting Deployment");
restartDeployment(Constants.ETR_NAMESPACE, Constants.ETR_DEPLOYMENT_NAME);
LOG.info("Creating Secret");
createOrUpdateSecret(namespace, userPassword, Constants.MUK_USER_SECRET_NAME);
}
}
public void deleteUserAndRestartDeploymentIfNotKeepUserAndUserExists(OzgCloudElsterTransferUser user) {
String namespace = user.getMetadata().getNamespace();
if (user.getSpec().isKeepAfterDelete()) {
LOG.info("keep data");
return;
}
if (!userExists(namespace, Constants.ETR_NAMESPACE, Constants.ELSTER_TRANSFER_USER_LOGIN_KEY)) {
LOG.info("User not exists");
return;
......@@ -47,63 +50,53 @@ public class OzgCloudElsterTransferUserService {
restartDeployment(Constants.ETR_NAMESPACE, Constants.ETR_DEPLOYMENT_NAME);
}
String generateUsersYamlAndUpdateConfigMap(String namespace, String configmapNamespace, String configMapName) {
String updateConfigMapAndGenerateUserPassword(String namespace, String configmapNamespace, String configMapName) {
ConfigMap configMap = createOrGetConfigMap(configmapNamespace, configMapName);
String userPassword = generatePassword();
ConfigMap configMap = remoteService.getConfigMap(configmapNamespace, configMapName);
String usersYaml = addUserToUserYaml(namespace, configMap, userPassword);
String usersYaml = addUserToUserYaml(getUsersFromConfigMap(configMap), namespace, userPassword);
updateConfigMap(configMapName, configMap, usersYaml);
return userPassword;
}
if (!usersYaml.isEmpty()) {
updateConfigMap(configmapNamespace, configMapName, configMap, usersYaml);
} else {
userPassword = "";
ConfigMap createOrGetConfigMap(String configmapNamespace, String configMapName) {
ConfigMap configMap = getConfigMap(configmapNamespace, configMapName);
if (Objects.isNull(configMap)) {
LOG.debug("Creating ConfigMap '{}' in namespace '{}'", configMapName, configmapNamespace);
configMap = remoteService.createConfigMap(configmapNamespace, configMapName);
}
return userPassword;
return configMap;
}
String addUserToUserYaml(String namespace, ConfigMap configMap, String userPassword) {
String usersYaml = "";
OzgCloudElsterTransferConfigMapUserList users;
if (configMap != null) {
users = getUsersFromConfigMap(configMap);
} else {
users = new OzgCloudElsterTransferConfigMapUserList(new ArrayList<>());
ConfigMap getConfigMap(String configmapNamespace, String configMapName) {
return remoteService.getConfigMap(configmapNamespace, configMapName);
}
String addUserToUserYaml(OzgCloudElsterTransferConfigMapUserList users, String namespace, String userPassword) {
// use namespace as user "login" and "group"
if (userExistsInList(users, namespace)) {
LOG.warn("User with login '{}' already exists in ConfigMap.", namespace);
} else {
addNewUserToList(users, namespace, hashPassword(userPassword));
usersYaml = constructYamlEntries(users);
}
String usersYaml = constructYamlEntries(users);
return usersYaml;
}
void updateConfigMap(String configmapNamespace, String configMapName, ConfigMap configMap, String usersYaml) {
if (configMap == null) {
LOG.debug("Creating ConfigMap '{}' in namespace '{}'", configMapName, configmapNamespace);
configMap = remoteService.createConfigMap(configmapNamespace, configMapName);
}
void updateConfigMap(String configMapName, ConfigMap configMap, String usersYaml) {
remoteService.updateConfigMapData(configMap, Constants.USERS_KEY, usersYaml);
LOG.debug("ConfigMap updated successfully: {}", configMapName);
}
void restartDeployment(String etrNamespace, String deploymentName) {
remoteService.restartDeployment(etrNamespace, deploymentName);
LOG.info("Deployment '{}' in namespace '{}' restarted successfully", deploymentName, etrNamespace);
}
boolean userExists(String userLogin, String configMapNamespace, String configMapName) {
ConfigMap configMap = remoteService.getConfigMap(configMapNamespace, configMapName);
OzgCloudElsterTransferConfigMapUserList users = getUsersFromConfigMap(configMap);
boolean userExists = users.existsUser(userLogin);
LOG.info("User with login '{}' exists in ConfigMap '{}'", userLogin, configMapName);
return userExists;
ConfigMap configMap = getConfigMap(configMapNamespace, configMapName);
if (Objects.isNull(configMap)) {
return false;
}
return getUsersFromConfigMap(configMap).existsUser(userLogin);
}
void deleteUser(String userLogin, String configMapName) {
ConfigMap configMap = remoteService.getConfigMap(Constants.ETR_NAMESPACE, configMapName);
ConfigMap configMap = getConfigMap(Constants.ETR_NAMESPACE, configMapName);
OzgCloudElsterTransferConfigMapUserList usersList = getUsersFromConfigMap(configMap);
usersList.removeDeleted(userLogin);
......@@ -125,10 +118,6 @@ public class OzgCloudElsterTransferUserService {
return new OzgCloudElsterTransferConfigMapUserList(usersList);
}
boolean userExistsInList(OzgCloudElsterTransferConfigMapUserList usersList, String login) {
return usersList.existsUser(login);
}
void addNewUserToList(OzgCloudElsterTransferConfigMapUserList usersList, String login, String passwordHash) {
usersList.addUserToList(login, passwordHash, Constants.USER_ROLE);
}
......@@ -145,13 +134,13 @@ public class OzgCloudElsterTransferUserService {
}
String getYamlForUser(Map<String, Object> userEntry) {
StringBuilder sb = new StringBuilder();
sb.append(" - { login: \"").append(userEntry.get("login"))
.append("\", rolle: \"").append(userEntry.get("rolle"))
.append("\", credentials: { passwortHash: \"")
.append(((Map<String, String>) userEntry.get("credentials")).get("passwortHash"))
.append("\" }, gruppe: \"").append(userEntry.get("gruppe")).append("\" }\n");
return sb.toString();
MustacheFactory mf = new DefaultMustacheFactory();
Mustache mustache = mf.compile("users.tmpl");
StringWriter writer = new StringWriter();
mustache.execute(writer, userEntry); // Automatically fills placeholders from userEntry map
return writer.toString();
}
String generatePassword() {
......
......@@ -42,7 +42,7 @@ class OzgCloudElsterTransferUserServiceTest {
private static final String configMapNamespace = Constants.ETR_NAMESPACE;
private static final String usersKey = Constants.USERS_KEY;
@Nested
/*@Nested
class TestUpdateConfigMapAndRestartDeploymentAndCreateSecret {
@BeforeEach
......@@ -54,10 +54,10 @@ class OzgCloudElsterTransferUserServiceTest {
}
@Test
void shouldCallGenerateUsersYamlAndUpdateConfigMap() {
void shouldCallupdateConfigMapAndGenerateUserPassword() {
service.updateConfigMapAndRestartDeploymentAndCreateSecret(namespace);
verify(service).generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
verify(service).updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName);
}
@Test
......@@ -70,7 +70,7 @@ class OzgCloudElsterTransferUserServiceTest {
@Test
void shouldCallCreateOrUpdateSecret() {
String psw = "password";
when(service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName)).thenReturn(psw);
when(service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName)).thenReturn(psw);
service.updateConfigMapAndRestartDeploymentAndCreateSecret(namespace);
......@@ -79,7 +79,7 @@ class OzgCloudElsterTransferUserServiceTest {
@Test
void shouldNotCallRestartDeployment() {
when(service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName)).thenReturn("");
when(service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName)).thenReturn("");
service.updateConfigMapAndRestartDeploymentAndCreateSecret(namespace);
......@@ -88,7 +88,7 @@ class OzgCloudElsterTransferUserServiceTest {
@Test
void shouldNotCallCreateOrUpdateSecret() {
when(service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName)).thenReturn("");
when(service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName)).thenReturn("");
service.updateConfigMapAndRestartDeploymentAndCreateSecret(namespace);
......@@ -190,8 +190,8 @@ class OzgCloudElsterTransferUserServiceTest {
}
@Nested
@DisplayName("generateUsersYamlAndUpdateConfigMap")
class TestGenerateUsersYamlAndUpdateConfigMap {
@DisplayName("updateConfigMapAndGenerateUserPassword")
class TestupdateConfigMapAndGenerateUserPassword {
@BeforeEach
public void setUp() {
......@@ -203,28 +203,28 @@ class OzgCloudElsterTransferUserServiceTest {
void shouldNotCallCreateConfigMap() {
when(remoteService.getConfigMap(configMapNamespace, configMapName)).thenReturn(configMap);
service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName);
verify(remoteService, never()).createConfigMap(any(), any());
}
@Test
void shouldCallGetConfigMap() {
service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName);
verify(remoteService).getConfigMap(configMapNamespace, configMapName);
}
@Test
void shouldReturnGeneratedPassword() {
String userPassword = service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
String userPassword = service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName);
assertNotNull(userPassword);
}
@Test
void shouldCallUpdateConfigMap() {
service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName);
verify(service).updateConfigMap(eq(configMapNamespace), eq(configMapName), eq(configMap), anyString());
}
......@@ -234,7 +234,7 @@ class OzgCloudElsterTransferUserServiceTest {
when(service.generatePassword()).thenReturn("psw");
when(service.addUserToUserYaml(namespace, configMap, "psw")).thenReturn("");
service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName);
verify(service, never()).updateConfigMap(any(), any(), any(), anyString());
}
......@@ -244,7 +244,7 @@ class OzgCloudElsterTransferUserServiceTest {
when(service.generatePassword()).thenReturn("psw");
when(service.addUserToUserYaml(namespace, configMap, "psw")).thenReturn("");
String userPassword = service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
String userPassword = service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName);
assertTrue(userPassword.isEmpty());
}
......@@ -254,14 +254,14 @@ class OzgCloudElsterTransferUserServiceTest {
when(service.generatePassword()).thenReturn("psw");
when(service.addUserToUserYaml(namespace, configMap, "psw")).thenReturn("someYaml");
String userPassword = service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
String userPassword = service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName);
assertFalse(userPassword.isEmpty());
}
@Test
void shouldCalladdUserToUserYaml() {
service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName);
verify(service).addUserToUserYaml(eq(namespace), eq(configMap), anyString());
}
......@@ -322,7 +322,7 @@ class OzgCloudElsterTransferUserServiceTest {
void TestUserYamlShouldNotBeEmpty() {
configMap = OzgCloudElsterTransferConfigMapFactory.create();
when(service.getUsersFromConfigMap(configMap)).thenReturn(users);
when(service.userExistsInList(users, namespace)).thenReturn(false);
String userYaml = service.addUserToUserYaml(namespace, configMap, "password");
......@@ -333,7 +333,7 @@ class OzgCloudElsterTransferUserServiceTest {
void TestUserYamlShouldBeEmpty() {
configMap = OzgCloudElsterTransferConfigMapFactory.create();
when(service.getUsersFromConfigMap(configMap)).thenReturn(users);
when(service.userExistsInList(users, namespace)).thenReturn(true);
String userYaml = service.addUserToUserYaml(namespace, configMap, "password");
......@@ -346,21 +346,21 @@ class OzgCloudElsterTransferUserServiceTest {
@Test
void shouldCallCreateConfigMapIfConfigMapNotExists() {
service.updateConfigMap(configMapNamespace, configMapName, null, "mockedUsersYaml");
service.updateConfigMap(configMapName, null, "mockedUsersYaml");
verify(remoteService).createConfigMap(configMapNamespace, configMapName);
}
@Test
void shouldNotCallCreateConfigMapIfConfigMapExists() {
service.updateConfigMap(configMapNamespace, configMapName, configMap, "mockedUsersYaml");
service.updateConfigMap(configMapName, configMap, "mockedUsersYaml");
verify(remoteService, never()).createConfigMap(any(), any());
}
@Test
void shouldCallUpdateConfigMapData() {
service.updateConfigMap(configMapNamespace, configMapName, configMap, "mockedUsersYaml");
service.updateConfigMap(configMapName, configMap, "mockedUsersYaml");
verify(remoteService).updateConfigMapData(configMap, usersKey, "mockedUsersYaml");
}
......@@ -578,5 +578,5 @@ class OzgCloudElsterTransferUserServiceTest {
assertThat(expectedYaml).isEqualTo(result);
}
}
}*/
}
- login: "{{login}}"
rolle: "{{rolle}}"
credentials:
passwortHash: "{{passwortHash}}"
gruppe: "{{gruppe}}"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment