diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/keycloak/KeycloakApiService.java b/user-manager-server/src/main/java/de/itvsh/kop/user/keycloak/KeycloakApiService.java index 87e220d32c90b8fc74c3868c63c2a34ac3b47e06..3a005b22cd86714c39870f8f58824d96db0576b6 100644 --- a/user-manager-server/src/main/java/de/itvsh/kop/user/keycloak/KeycloakApiService.java +++ b/user-manager-server/src/main/java/de/itvsh/kop/user/keycloak/KeycloakApiService.java @@ -31,12 +31,14 @@ import java.util.stream.StreamSupport; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; +import javax.ws.rs.BadRequestException; import javax.ws.rs.ClientErrorException; import javax.ws.rs.ProcessingException; import org.apache.commons.lang3.ObjectUtils; import org.eclipse.microprofile.config.inject.ConfigProperty; import org.keycloak.admin.client.resource.RealmResource; +import org.keycloak.admin.client.resource.UserResource; import org.keycloak.representations.idm.UserRepresentation; import de.itvsh.kop.common.logging.KopLogging; @@ -96,7 +98,15 @@ class KeycloakApiService { var ozgCloudUserIdInKeycloak = userRepresentation.firstAttribute(attributeName); if (ObjectUtils.notEqual(ozgCloudUserIdInKeycloak, attributeValue)) { userRepresentation.singleAttribute(attributeName, attributeValue); + tryUpdateUserResource(userResource,userRepresentation, attributeName); + } + } + + private void tryUpdateUserResource(UserResource userResource, UserRepresentation userRepresentation, String attributeName) { + try { userResource.update(userRepresentation); + } catch (BadRequestException e) { + LOG.warn("Could not update user attribute {} in Keycloak.", attributeName, e); } } } \ No newline at end of file diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/keycloak/KeycloakApiServiceTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/keycloak/KeycloakApiServiceTest.java index 66f1c9f24e401e68f6f23272ed2806d25006cd3f..deb55ce6f6f4e247cd6478b70dce82cd3bba61a1 100644 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/keycloak/KeycloakApiServiceTest.java +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/keycloak/KeycloakApiServiceTest.java @@ -31,6 +31,7 @@ import static org.mockito.Mockito.*; import java.util.function.Supplier; import java.util.stream.Stream; +import javax.ws.rs.BadRequestException; import javax.ws.rs.ClientErrorException; import javax.ws.rs.ProcessingException; @@ -254,5 +255,14 @@ class KeycloakApiServiceTest { verify(userRepresentation, never()).singleAttribute(ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_USER_ID); } + + @Test + void shouldCatchBadRequestException() { + when(userRepresentation.firstAttribute(ATTRIBUTE_NAME_USER_ID)).thenReturn(NEW_USER_ID); + doThrow(new BadRequestException("error message")).when(userResource).update(userRepresentation); + + assertThatCode( + () -> service.updateAttribute(KEYCLOAK_USER_ID, ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_USER_ID)).doesNotThrowAnyException(); + } } } \ No newline at end of file