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

OZG-5400 add update realm role function

parent 2a6efb00
No related branches found
No related tags found
No related merge requests found
...@@ -88,4 +88,8 @@ interface KeycloakRealmMapper { ...@@ -88,4 +88,8 @@ interface KeycloakRealmMapper {
} }
} }
...@@ -23,10 +23,16 @@ ...@@ -23,10 +23,16 @@
*/ */
package de.ozgcloud.operator.keycloak.realm; package de.ozgcloud.operator.keycloak.realm;
import java.util.Objects;
import java.util.Optional;
import org.keycloak.admin.client.Keycloak; import org.keycloak.admin.client.Keycloak;
import org.keycloak.representations.idm.RealmRepresentation; import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.representations.idm.RoleRepresentation;
import org.keycloak.representations.idm.RolesRepresentation;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import de.ozgcloud.operator.keycloak.KeycloakException;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor @RequiredArgsConstructor
...@@ -47,4 +53,22 @@ class KeycloakRealmRemoteService { ...@@ -47,4 +53,22 @@ class KeycloakRealmRemoteService {
keycloak.realm(realm.getRealm()).update(realm); keycloak.realm(realm.getRealm()).update(realm);
} }
public Optional<RoleRepresentation> getRealmRole(String roleName, String realmName) {
return Optional.ofNullable(keycloak.realm(realmName).roles())
.orElseThrow(() -> new KeycloakException("Realm with Name " + realmName + " not found."))
.list()
.stream().filter(role -> Objects.equals(roleName, role.getName()))
.findFirst();
}
public void updateRealmRole(RoleRepresentation role, String realm) {
keycloak.realm(realm).roles().get(role.getName()).update(role);
}
public void addRealmRole(RoleRepresentation role, String realm) {
keycloak.realm(realm).roles().create(role);
}
} }
...@@ -62,6 +62,7 @@ class KeycloakRealmService { ...@@ -62,6 +62,7 @@ class KeycloakRealmService {
try { try {
LOG.debug("{}: Updating existing realm...", existingRealm); LOG.debug("{}: Updating existing realm...", existingRealm);
var realmRepresentation = mapper.update(existingRealm, spec); var realmRepresentation = mapper.update(existingRealm, spec);
//LOG.info(realmRepresentation.getRoles() + "realm Spec with roles");
remoteService.updateRealm(realmRepresentation); remoteService.updateRealm(realmRepresentation);
} catch (Exception e) { } catch (Exception e) {
LOG.warn(existingRealm + ": Updating existing realm failed: ", e); LOG.warn(existingRealm + ": Updating existing realm failed: ", e);
...@@ -71,6 +72,14 @@ class KeycloakRealmService { ...@@ -71,6 +72,14 @@ class KeycloakRealmService {
} }
void addOrUpdateRealmRoles(OzgCloudKeycloakRealmSpec spec, String realm) {
spec.getRealmRoles().forEach(
roleSpec -> remoteService.getRealmRole(roleSpec.getName(), realm)
.ifPresentOrElse(
existingRole -> remoteService.updateRealmRole(mapper.map(roleSpec), realm),
() -> remoteService.addRealmRole(mapper.map(roleSpec), realm)));
}
RealmRepresentation addRealmName(RealmRepresentation realm, String realmName) { RealmRepresentation addRealmName(RealmRepresentation realm, String realmName) {
realm.setRealm(realmName); realm.setRealm(realmName);
return realm; return realm;
......
...@@ -25,10 +25,15 @@ package de.ozgcloud.operator.keycloak.realm; ...@@ -25,10 +25,15 @@ package de.ozgcloud.operator.keycloak.realm;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.keycloak.representations.idm.ClientRepresentation;
import org.keycloak.representations.idm.RealmRepresentation;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import org.mockito.Spy; import org.mockito.Spy;
import de.ozgcloud.operator.keycloak.client.OzgCloudKeycloakClientSpecTestFactory;
class KeycloakRealmMapperTest { class KeycloakRealmMapperTest {
@Spy @Spy
...@@ -94,7 +99,7 @@ class KeycloakRealmMapperTest { ...@@ -94,7 +99,7 @@ class KeycloakRealmMapperTest {
void shouldMapSmtpServer() { void shouldMapSmtpServer() {
var mapped = mapper.map(OzgCloudKeycloakRealmSpecTestFactory.create()); var mapped = mapper.map(OzgCloudKeycloakRealmSpecTestFactory.create());
assertThat(mapped.getSmtpServer().size()).isEqualTo(8); assertThat(mapped.getSmtpServer()).hasSize(8);
} }
@Test @Test
...@@ -134,4 +139,17 @@ class KeycloakRealmMapperTest { ...@@ -134,4 +139,17 @@ class KeycloakRealmMapperTest {
assertThat(mappedRealmRoles.getRealm().get(0).getName()).isEqualTo(OzgCloudKeycloakRealmSpecTestFactory.ROLE_NAME_1); assertThat(mappedRealmRoles.getRealm().get(0).getName()).isEqualTo(OzgCloudKeycloakRealmSpecTestFactory.ROLE_NAME_1);
assertThat(mappedRealmRoles.getRealm().get(1).getName()).isEqualTo(OzgCloudKeycloakRealmSpecTestFactory.ROLE_NAME_2); assertThat(mappedRealmRoles.getRealm().get(1).getName()).isEqualTo(OzgCloudKeycloakRealmSpecTestFactory.ROLE_NAME_2);
} }
@Nested
class TestUpdate {
@Test
void shouldMapBaseUrl() {
var realm = mapper.update(new RealmRepresentation(), OzgCloudKeycloakRealmSpecTestFactory.create());
assertThat(realm.getDisplayName()).isEqualTo(OzgCloudKeycloakRealmSpecTestFactory.DISPLAY_NAME);
}
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment