From 81aae889e17115f7c607872e695523e60dd63f8a Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Thu, 7 Mar 2024 16:53:22 +0100
Subject: [PATCH] fix keycloak user password generator

---
 .../keycloak/user/UserSecretBuilder.java      |  7 ++---
 .../keycloak/user/UserSecretBuilderTest.java  | 26 +++++++++----------
 2 files changed, 17 insertions(+), 16 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 070fdbf..2b5c1f2 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
@@ -27,9 +27,10 @@ class UserSecretBuilder {
 	}
 
 	String generatePassword() {
-		var upperCaseCharacter = RandomStringUtils.randomAlphabetic(1).toUpperCase();
-		var randomString = RandomStringUtils.randomAlphanumeric(7);
-		return encode(upperCaseCharacter + randomString);
+		var upperCaseCharacter = RandomStringUtils.randomAlphabetic(8).toUpperCase();
+		var lowerCaseCharacter = RandomStringUtils.randomAlphabetic(8).toLowerCase();
+		var numbers = RandomStringUtils.randomNumeric(8);
+		return encode(upperCaseCharacter + lowerCaseCharacter + numbers);
 	}
 
 	String encode(String strValue) {
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 3473c34..5a341fc 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
@@ -6,9 +6,9 @@ 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;
+import org.junit.jupiter.api.RepeatedTest;
 import org.junit.jupiter.api.Test;
 import org.mockito.Spy;
 
@@ -81,35 +81,35 @@ class UserSecretBuilderTest {
 		@Nested
 		class TestGeneratePassword {
 
-			@Test
+			@RepeatedTest(100)
 			void shouldHaveSize() {
 				var password = decode(builder.generatePassword());
 
-				assertThat(password).hasSize(8);
+				assertThat(password).hasSize(24);
 			}
 
-			@Test
-			void shouldHaveUpperCaseLetterAtFirst() {
+			@RepeatedTest(100)
+			void shouldHaveUpperCaseLetters() {
 				var password = decode(builder.generatePassword());
 
-				assertThat(StringUtils.substring(password, 0, 1)).isUpperCase();
+				assertThat(password).matches(".*[A-Z].*");
 			}
 
-			@Test
-			void shouldContainsAlphanumericOnly() {
+			@RepeatedTest(100)
+			void shouldHaveLowercaseLetters() {
 				var password = decode(builder.generatePassword());
 
-				assertThat(password).isAlphanumeric();
+				assertThat(password).matches(".*[a-z].*");
 			}
 
-			@Test
-			void shouldHaveMiminumLength() {
+			@RepeatedTest(100)
+			void shouldContainNumerics() {
 				var password = decode(builder.generatePassword());
 
-				assertThat(password).hasSize(8);
+				assertThat(password).matches(".*[0-9].*");
 			}
 
-			@Test
+			@RepeatedTest(100)
 			void shouldEncode() {
 				builder.generatePassword();
 
-- 
GitLab