From d70c30416674fd09b832b76742d6e3355f7613a6 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Thu, 4 Jan 2024 14:36:44 +0100
Subject: [PATCH] OZG-4453 set password as encoded data

---
 .../keycloak/user/UserSecretBuilder.java      | 10 ++++++--
 .../keycloak/user/UserSecretBuilderTest.java  | 24 +++++++++++++++----
 2 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/UserSecretBuilder.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/UserSecretBuilder.java
index e72f995..070fdbf 100644
--- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/UserSecretBuilder.java
+++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/UserSecretBuilder.java
@@ -1,5 +1,7 @@
 package de.ozgcloud.operator.keycloak.user;
 
+import java.util.Base64;
+
 import org.apache.commons.lang3.RandomStringUtils;
 import org.springframework.stereotype.Component;
 
@@ -20,14 +22,18 @@ class UserSecretBuilder {
 				.withType(SECRET_TYPE)
 				.withMetadata(createMetaData(name, namespace))
 				.addToStringData(SECRET_NAME_FIELD, userSpec.getUsername())
-				.addToStringData(SECRET_PASSWORD_FIELD, generatePassword())
+				.addToData(SECRET_PASSWORD_FIELD, generatePassword())
 				.build();
 	}
 
 	String generatePassword() {
 		var upperCaseCharacter = RandomStringUtils.randomAlphabetic(1).toUpperCase();
 		var randomString = RandomStringUtils.randomAlphanumeric(7);
-		return upperCaseCharacter + randomString;
+		return encode(upperCaseCharacter + randomString);
+	}
+
+	String encode(String strValue) {
+		return new String(Base64.getEncoder().encode(strValue.getBytes()));
 	}
 
 	private ObjectMeta createMetaData(String name, String namespace) {
diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/UserSecretBuilderTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/UserSecretBuilderTest.java
index 7cfbbf8..0cc1d43 100644
--- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/UserSecretBuilderTest.java
+++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/UserSecretBuilderTest.java
@@ -1,8 +1,11 @@
 package de.ozgcloud.operator.keycloak.user;
 
 import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
+import java.util.Base64;
+
 import org.apache.commons.lang3.StringUtils;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
@@ -11,7 +14,7 @@ import org.mockito.Spy;
 
 import de.ozgcloud.operator.keycloak.user.OzgCloudKeycloakUserSpec.KeycloakUserSpecUser;
 
-public class UserSecretBuilderTest {
+class UserSecretBuilderTest {
 
 	private final static String NAME = "dummyName";
 	private final static String NAMESPACE = "dummyNamespace";
@@ -52,7 +55,7 @@ public class UserSecretBuilderTest {
 
 			var secret = builder.build(NAME, userSpec, NAMESPACE);
 
-			assertThat(secret.getStringData()).containsEntry(UserSecretBuilder.SECRET_PASSWORD_FIELD, SecretTestFactory.PASSWORD);
+			assertThat(secret.getData()).containsEntry(UserSecretBuilder.SECRET_PASSWORD_FIELD, SecretTestFactory.PASSWORD);
 		}
 
 		@DisplayName("metadata")
@@ -80,24 +83,35 @@ public class UserSecretBuilderTest {
 
 			@Test
 			void shouldHaveSize() {
-				var password = builder.generatePassword();
+				var password = decode(builder.generatePassword());
 
 				assertThat(password).hasSize(8);
 			}
 
 			@Test
 			void shouldHaveUpperCaseLetterAtFirst() {
-				var password = builder.generatePassword();
+				var password = decode(builder.generatePassword());
 
 				assertThat(StringUtils.substring(password, 0, 1)).isUpperCase();
 			}
 
 			@Test
 			void shouldContainsAlphanumericOnly() {
-				var password = builder.generatePassword();
+				var password = decode(builder.generatePassword());
 
 				assertThat(password).isAlphanumeric();
 			}
+
+			@Test
+			void shouldEncode() {
+				builder.generatePassword();
+
+				verify(builder).encode(any());
+			}
+
+			private String decode(String strValue) {
+				return new String(Base64.getDecoder().decode(strValue.getBytes()));
+			}
 		}
 	}
 }
-- 
GitLab