diff --git a/pom.xml b/pom.xml index 1ba539b41d20ebebf73a96d7fa0109cc845021d3..d06edc1736ab30242ce2091e75b4e9991875d518 100644 --- a/pom.xml +++ b/pom.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-parent</artifactId> <version>4.3.2</version> - <relativePath /> + <relativePath/> </parent> <groupId>de.ozgcloud</groupId> <artifactId>administration</artifactId> @@ -22,7 +22,6 @@ <build.number>SET_BY_JENKINS</build.number> <spring-cloud-config-server.version>4.1.2</spring-cloud-config-server.version> <testcontainers-keycloak.version>3.2.0</testcontainers-keycloak.version> - <keycloak-admin-client.version>23.0.6</keycloak-admin-client.version> <mongock.version>5.4.0</mongock.version> <lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version> <mapstruct-processor.version>${mapstruct.version}</mapstruct-processor.version> @@ -72,6 +71,13 @@ <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> + + <!-- Keycloak --> + <dependency> + <groupId>org.keycloak</groupId> + <artifactId>keycloak-admin-client</artifactId> + </dependency> + <!-- tools --> <dependency> <groupId>org.mapstruct</groupId> @@ -145,12 +151,6 @@ <version>${testcontainers-keycloak.version}</version> <scope>test</scope> </dependency> - <dependency> - <groupId>org.keycloak</groupId> - <artifactId>keycloak-admin-client</artifactId> - <version>${keycloak-admin-client.version}</version> - <scope>test</scope> - </dependency> </dependencies> <profiles> <profile> diff --git a/src/main/java/de/ozgcloud/admin/keycloak/Group.java b/src/main/java/de/ozgcloud/admin/keycloak/Group.java new file mode 100644 index 0000000000000000000000000000000000000000..6c8f960a8312f4d23dad4bd29333a8300fe17dcb --- /dev/null +++ b/src/main/java/de/ozgcloud/admin/keycloak/Group.java @@ -0,0 +1,15 @@ +package de.ozgcloud.admin.keycloak; + +import java.util.List; + +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +public class Group { + + private String name; + private String organisationsEinheitId; + private List<Group> subgroups; +} diff --git a/src/main/java/de/ozgcloud/admin/keycloak/GroupMapper.java b/src/main/java/de/ozgcloud/admin/keycloak/GroupMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..3f2862be6c5cc756253d5e20c43d887aa24a001a --- /dev/null +++ b/src/main/java/de/ozgcloud/admin/keycloak/GroupMapper.java @@ -0,0 +1,16 @@ +package de.ozgcloud.admin.keycloak; + +import java.util.List; + +import org.keycloak.representations.idm.GroupRepresentation; +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; + +@Mapper(nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) +interface GroupMapper { + + List<Group> fromGroupRepresentations(List<GroupRepresentation> groupRepresentations); + + + Group fromGroupRepresentation(GroupRepresentation groupRepresentation); +} diff --git a/src/main/java/de/ozgcloud/admin/keycloak/KeycloakApiProperties.java b/src/main/java/de/ozgcloud/admin/keycloak/KeycloakApiProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..f3efb742f4ea8fb5c2eb8a9e10a2579417a09db1 --- /dev/null +++ b/src/main/java/de/ozgcloud/admin/keycloak/KeycloakApiProperties.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.admin.keycloak; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +@Configuration +@ConfigurationProperties("ozgcloud.keycloak.api") +public class KeycloakApiProperties { + + @NotBlank + private String url; + @NotBlank + private String user; + @NotBlank + private String password; + private String realm; + private String client; + private String organisationsEinheitIdKey; + private String ldapIdKey; +} \ No newline at end of file diff --git a/src/main/java/de/ozgcloud/admin/keycloak/KeycloakConfiguration.java b/src/main/java/de/ozgcloud/admin/keycloak/KeycloakConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..3406a5a7799d702c610ff42c6a488794c8c172b2 --- /dev/null +++ b/src/main/java/de/ozgcloud/admin/keycloak/KeycloakConfiguration.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.admin.keycloak; + +import org.keycloak.admin.client.Keycloak; +import org.keycloak.admin.client.KeycloakBuilder; +import org.keycloak.admin.client.resource.RealmResource; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import lombok.RequiredArgsConstructor; + +@Configuration +@RequiredArgsConstructor +public class KeycloakConfiguration { + + private static final String CLIENT = "admin-cli"; + + private final KeycloakApiProperties keycloakApiProperties; + + @Bean + Keycloak keycloak() { + return buildKeycloakInstance(); + } + + @Bean + RealmResource realmResource(Keycloak keycloak) { + return keycloak.realm(keycloakApiProperties.getRealm()); + } + + private Keycloak buildKeycloakInstance() { + return KeycloakBuilder.builder() + .serverUrl(keycloakApiProperties.getUrl()) + .realm(keycloakApiProperties.getRealm()) + .clientId(CLIENT) + .username(keycloakApiProperties.getUser()) + .password(keycloakApiProperties.getPassword()) + .build(); + } +} diff --git a/src/main/java/de/ozgcloud/admin/keycloak/KeycloakRemoteService.java b/src/main/java/de/ozgcloud/admin/keycloak/KeycloakRemoteService.java new file mode 100644 index 0000000000000000000000000000000000000000..c1e7db460923dd22c03aabc35d6cfa578261b32f --- /dev/null +++ b/src/main/java/de/ozgcloud/admin/keycloak/KeycloakRemoteService.java @@ -0,0 +1,20 @@ +package de.ozgcloud.admin.keycloak; + +import java.util.stream.Stream; + +import org.keycloak.admin.client.resource.RealmResource; +import org.springframework.stereotype.Service; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class KeycloakRemoteService { + + private final RealmResource realmResource; + + public Stream<Group> getGroups() { +// realmResource.groups().groups(); + return Stream.empty(); + } +}