diff --git a/pom.xml b/pom.xml index 9b17e3e8facbfb3f3a4be6291e7715230da13673..04d90dcfbdd02e2a5ee0bd6d73f8f9acc46f6b84 100644 --- a/pom.xml +++ b/pom.xml @@ -29,6 +29,13 @@ <!-- <artifactId>spring-boot-starter-web-services</artifactId>--> <!-- </dependency>--> +<!-- https://mvnrepository.com/artifact/org.keycloak/keycloak-admin-client --> +<dependency> + <groupId>org.keycloak</groupId> + <artifactId>keycloak-admin-client</artifactId> + <version>21.1.1</version> +</dependency> + <dependency> <groupId>io.javaoperatorsdk</groupId> diff --git a/src/main/java/de/ozgcloud/operator/Config.java b/src/main/java/de/ozgcloud/operator/Config.java index a24156da4e1db5d8b66d011a0e20463a1420f7ef..bb7a11e52f2eab744da57031fd0896fbafe812e9 100644 --- a/src/main/java/de/ozgcloud/operator/Config.java +++ b/src/main/java/de/ozgcloud/operator/Config.java @@ -6,7 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import de.ozgcloud.operator.keycloak.KeycloakUserReconciler; +import de.ozgcloud.operator.keycloak.user.KeycloakUserReconciler; import io.fabric8.kubernetes.client.KubernetesClient; import io.javaoperatorsdk.operator.Operator; import io.javaoperatorsdk.operator.api.reconciler.Reconciler; diff --git a/src/main/java/de/ozgcloud/operator/SpringNativeConfiguration.java b/src/main/java/de/ozgcloud/operator/SpringNativeConfiguration.java index ea9651cf705036fd37a0cc096713582c284c4aa5..b55cfe1cf9ec5c4c64b6f73029c5b8f4b3004576 100644 --- a/src/main/java/de/ozgcloud/operator/SpringNativeConfiguration.java +++ b/src/main/java/de/ozgcloud/operator/SpringNativeConfiguration.java @@ -12,9 +12,9 @@ import org.springframework.aot.hint.RuntimeHintsRegistrar; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportRuntimeHints; -import de.ozgcloud.operator.keycloak.KeycloakUser; -import de.ozgcloud.operator.keycloak.KeycloakUserSpec; -import de.ozgcloud.operator.keycloak.KeycloakUserStatus; +import de.ozgcloud.operator.keycloak.user.KeycloakUser; +import de.ozgcloud.operator.keycloak.user.KeycloakUserSpec; +import de.ozgcloud.operator.keycloak.user.KeycloakUserStatus; import io.fabric8.kubernetes.api.model.KubernetesResource; import io.fabric8.kubernetes.api.model.NamedCluster; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/de/ozgcloud/operator/keycloak/KeycloakClient.java b/src/main/java/de/ozgcloud/operator/keycloak/KeycloakClient.java new file mode 100644 index 0000000000000000000000000000000000000000..cc9f184bc83ab0c0e86895ad748cf8ebd52f5f82 --- /dev/null +++ b/src/main/java/de/ozgcloud/operator/keycloak/KeycloakClient.java @@ -0,0 +1,33 @@ +package de.ozgcloud.operator.keycloak; + +import org.keycloak.admin.client.Keycloak; +import org.keycloak.admin.client.KeycloakBuilder; +import org.keycloak.representations.idm.UserRepresentation; +import org.springframework.stereotype.Component; + +import lombok.extern.java.Log; + +@Log +@Component +public class KeycloakClient { + + public Keycloak getKeycloak() { + + Keycloak keycloak = KeycloakBuilder.builder() // + .serverUrl("https://sso.dev.by.ozg-cloud.de/") // + .realm("master") // +// .grantType(OAuth2Constants.PASSWORD) // + .username("admin") // + .password(" ") // + .clientId("admin-cli") + .build(); + + log.info(keycloak.realms().findAll().toString()); + + UserRepresentation user = new UserRepresentation(); + user.setUsername("helge"); + keycloak.realm("by-torsten-ozg-operator-dev").users().create(user); + + return keycloak; + } +} diff --git a/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakClientUserRemoteService.java b/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakClientUserRemoteService.java new file mode 100644 index 0000000000000000000000000000000000000000..63ce46fe8969c8cea44a95dfab2dd76e449edff1 --- /dev/null +++ b/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakClientUserRemoteService.java @@ -0,0 +1,19 @@ +package de.ozgcloud.operator.keycloak.user; + +import org.keycloak.representations.account.UserRepresentation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import de.ozgcloud.operator.keycloak.KeycloakClient; + +@Component +public class KeycloakClientUserRemoteService { + + @Autowired + private KeycloakClient keycloakClient; + + void createUser(UserRepresentation user) { + + keycloakClient.getKeycloak(); + } +} diff --git a/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakClientUserService.java b/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakClientUserService.java new file mode 100644 index 0000000000000000000000000000000000000000..a87f0edb5edb01681e9b50182868747b93877d23 --- /dev/null +++ b/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakClientUserService.java @@ -0,0 +1,15 @@ +package de.ozgcloud.operator.keycloak.user; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class KeycloakClientUserService { + + @Autowired + KeycloakClientUserRemoteService remoteService; + + void addUser(KeycloakUserSpec userSpec) { + + } +} diff --git a/src/main/java/de/ozgcloud/operator/keycloak/KeycloakUser.java b/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUser.java similarity index 89% rename from src/main/java/de/ozgcloud/operator/keycloak/KeycloakUser.java rename to src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUser.java index bb3a997def5453b5037ef91b2b403c7b391deebd..5badf37be1fab149d988f0333c001e34c38e1d3e 100644 --- a/src/main/java/de/ozgcloud/operator/keycloak/KeycloakUser.java +++ b/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUser.java @@ -1,4 +1,4 @@ -package de.ozgcloud.operator.keycloak; +package de.ozgcloud.operator.keycloak.user; import io.fabric8.kubernetes.api.model.Namespaced; import io.fabric8.kubernetes.client.CustomResource; diff --git a/src/main/java/de/ozgcloud/operator/keycloak/KeycloakUserReconciler.java b/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java similarity index 94% rename from src/main/java/de/ozgcloud/operator/keycloak/KeycloakUserReconciler.java rename to src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java index d1155f94f082d3f66ddc096c3ea41fa6849c1a5b..3aff0f6c6213f426cabf24704025a89a913ff612 100644 --- a/src/main/java/de/ozgcloud/operator/keycloak/KeycloakUserReconciler.java +++ b/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java @@ -1,4 +1,4 @@ -package de.ozgcloud.operator.keycloak; +package de.ozgcloud.operator.keycloak.user; import java.time.LocalDate; import java.util.Base64; @@ -31,7 +31,7 @@ public class KeycloakUserReconciler implements Reconciler<KeycloakUser> { String namespace = crd.getMetadata().getNamespace(); log.warning("Reconciling: " + name + "/" + namespace); log.warning("SecretTest:" + getKeycloakRealmAdminPassword(namespace)); - crd.setStatus(KeycloakUserStatus.builder().status("Updated status for " + name + LocalDate.now().toString()).build()); + crd.setStatus(KeycloakUserStatus.builder().status("Updated status for " + name + LocalDate.now().toString()).phase("Pending").build()); return UpdateControl.updateStatus(crd); } diff --git a/src/main/java/de/ozgcloud/operator/keycloak/KeycloakUserSpec.java b/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserSpec.java similarity index 97% rename from src/main/java/de/ozgcloud/operator/keycloak/KeycloakUserSpec.java rename to src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserSpec.java index e8c6bebf097b58cbf76c915cbb71c106a7316257..0c0ef4e6df02222a2b846a99a4bd4471184cf985 100644 --- a/src/main/java/de/ozgcloud/operator/keycloak/KeycloakUserSpec.java +++ b/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserSpec.java @@ -1,4 +1,4 @@ -package de.ozgcloud.operator.keycloak; +package de.ozgcloud.operator.keycloak.user; import java.util.List; diff --git a/src/main/java/de/ozgcloud/operator/keycloak/KeycloakUserStatus.java b/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserStatus.java similarity index 84% rename from src/main/java/de/ozgcloud/operator/keycloak/KeycloakUserStatus.java rename to src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserStatus.java index 4d4dfd3231776d269c0a9a79e9294bb996435468..7e83e84b1c343b21c7009345ecc2b8f87d0fbf0f 100644 --- a/src/main/java/de/ozgcloud/operator/keycloak/KeycloakUserStatus.java +++ b/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserStatus.java @@ -1,4 +1,4 @@ -package de.ozgcloud.operator.keycloak; +package de.ozgcloud.operator.keycloak.user; import io.javaoperatorsdk.operator.api.ObservedGenerationAwareStatus; import lombok.AllArgsConstructor; @@ -15,4 +15,6 @@ import lombok.Setter; public class KeycloakUserStatus extends ObservedGenerationAwareStatus { private String status; + + private String phase; } diff --git a/src/test/java/de/ozgcloud/operator/keycloak/client/KeycloakClientTest.java b/src/test/java/de/ozgcloud/operator/keycloak/client/KeycloakClientTest.java new file mode 100644 index 0000000000000000000000000000000000000000..17303f76a48ea64fe59986511ca8e14390f3c836 --- /dev/null +++ b/src/test/java/de/ozgcloud/operator/keycloak/client/KeycloakClientTest.java @@ -0,0 +1,14 @@ +package de.ozgcloud.operator.keycloak.client; + +import org.junit.jupiter.api.Test; + +import de.ozgcloud.operator.keycloak.KeycloakClient; + +class KeycloakClientTest { + + @Test + void test() { + KeycloakClient kc = new KeycloakClient(); +// kc.test(); + } +} diff --git a/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakClientUserRemoteServiceTest.java b/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakClientUserRemoteServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..86cd6ffbdd66d99c92465203acabe2b5a4267970 --- /dev/null +++ b/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakClientUserRemoteServiceTest.java @@ -0,0 +1,31 @@ +package de.ozgcloud.operator.keycloak.user; + +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import de.ozgcloud.operator.keycloak.KeycloakClient; + +@ExtendWith(MockitoExtension.class) +class KeycloakClientUserRemoteServiceTest { + + @Spy + @InjectMocks + KeycloakClientUserRemoteService userRemoteService; + + @Mock + KeycloakClient keycloakClient; + + @Test + void test() { + + userRemoteService.createUser(null); + + verify(keycloakClient).getKeycloak(); + } +} diff --git a/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserReconcilerTest.java b/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconcilerTest.java similarity index 86% rename from src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserReconcilerTest.java rename to src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconcilerTest.java index 12a66bfc07b92d820c4c4473a3494ec230f3d852..9c66f82ec2bd241c639bdfed40d444ec28f1ed30 100644 --- a/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserReconcilerTest.java +++ b/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconcilerTest.java @@ -1,4 +1,4 @@ -package de.ozgcloud.operator.keycloak; +package de.ozgcloud.operator.keycloak.user; import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; @@ -12,6 +12,8 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import de.ozgcloud.operator.keycloak.user.KeycloakUser; +import de.ozgcloud.operator.keycloak.user.KeycloakUserReconciler; import io.fabric8.kubernetes.client.KubernetesClient; import lombok.SneakyThrows; diff --git a/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserSpecTestFactory.java b/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserSpecTestFactory.java similarity index 66% rename from src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserSpecTestFactory.java rename to src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserSpecTestFactory.java index 847bde3f92c43b84b4d483ba636890eec80d0b46..cd0c9d0b9e397210b28c18384edb4f1e2323e792 100644 --- a/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserSpecTestFactory.java +++ b/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserSpecTestFactory.java @@ -1,6 +1,7 @@ -package de.ozgcloud.operator.keycloak; +package de.ozgcloud.operator.keycloak.user; -import de.ozgcloud.operator.keycloak.KeycloakUserSpec.KeycloakUserSpecUser; +import de.ozgcloud.operator.keycloak.user.KeycloakUserSpec; +import de.ozgcloud.operator.keycloak.user.KeycloakUserSpec.KeycloakUserSpecUser; class KeycloakUserSpecTestFactory { diff --git a/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserSpecUserTestFactory.java b/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserSpecUserTestFactory.java similarity index 72% rename from src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserSpecUserTestFactory.java rename to src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserSpecUserTestFactory.java index e61e7872824efa4f8779e72def1dcbde098e831e..d38867135f29d59ed7d30b369925fa18b02a15d8 100644 --- a/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserSpecUserTestFactory.java +++ b/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserSpecUserTestFactory.java @@ -1,6 +1,6 @@ -package de.ozgcloud.operator.keycloak; +package de.ozgcloud.operator.keycloak.user; -import de.ozgcloud.operator.keycloak.KeycloakUserSpec.KeycloakUserSpecUser; +import de.ozgcloud.operator.keycloak.user.KeycloakUserSpec.KeycloakUserSpecUser; class KeycloakUserSpecUserTestFactory { diff --git a/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserStatusTestFactory.java b/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserStatusTestFactory.java similarity index 69% rename from src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserStatusTestFactory.java rename to src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserStatusTestFactory.java index d756b40733086146c41b877aad5890b6962ef0a6..89d42fb73fe42fde91ea7741aefb1a16b89a5fb7 100644 --- a/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserStatusTestFactory.java +++ b/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserStatusTestFactory.java @@ -1,4 +1,6 @@ -package de.ozgcloud.operator.keycloak; +package de.ozgcloud.operator.keycloak.user; + +import de.ozgcloud.operator.keycloak.user.KeycloakUserStatus; class KeycloakUserStatusTestFactory { diff --git a/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserTestFactory.java b/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserTestFactory.java similarity index 66% rename from src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserTestFactory.java rename to src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserTestFactory.java index 8e4f870d86b0dc12df5624c1b383dd487e7fd251..fd3a9fbeafc8fe6a4791bede46cd62188f3e2013 100644 --- a/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserTestFactory.java +++ b/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserTestFactory.java @@ -1,4 +1,8 @@ -package de.ozgcloud.operator.keycloak; +package de.ozgcloud.operator.keycloak.user; + +import de.ozgcloud.operator.keycloak.user.KeycloakUser; +import de.ozgcloud.operator.keycloak.user.KeycloakUserSpec; +import de.ozgcloud.operator.keycloak.user.KeycloakUserStatus; class KeycloakUserTestFactory {