diff --git a/src/main/java/sh/libre/scim/core/AbstractScimService.java b/src/main/java/sh/libre/scim/core/AbstractScimService.java index e32f178977e3306e6669ca52dca1bcae0922b791..53a6738b35cf0b93cbfa0439402cb25c70b7f2a7 100644 --- a/src/main/java/sh/libre/scim/core/AbstractScimService.java +++ b/src/main/java/sh/libre/scim/core/AbstractScimService.java @@ -45,7 +45,7 @@ public abstract class AbstractScimService<RMM extends RoleMapperModel, S extends return; } ResourceNode scimForCreation = toScimForCreation(roleMapperModel); - EntityOnRemoteScimId externalId = scimClient.create(scimForCreation); + EntityOnRemoteScimId externalId = scimClient.create(id, scimForCreation); createMapping(id, externalId); } diff --git a/src/main/java/sh/libre/scim/core/ScimClient.java b/src/main/java/sh/libre/scim/core/ScimClient.java index ecbdb8d822760ea5ca917b52ec5ffbce74674b41..18460562c6fda59ba73fb096177ec2d3f6615642 100644 --- a/src/main/java/sh/libre/scim/core/ScimClient.java +++ b/src/main/java/sh/libre/scim/core/ScimClient.java @@ -63,8 +63,13 @@ public class ScimClient<S extends ResourceNode> implements AutoCloseable { return new ScimClient(scimRequestBuilder, scimResourceType); } - public EntityOnRemoteScimId create(ResourceNode scimForCreation) { - Retry retry = retryRegistry.retry("create-" + scimForCreation.getId().get()); + public EntityOnRemoteScimId create(KeycloakId id, ResourceNode scimForCreation) { + if (scimForCreation.getId().isPresent()) { + throw new IllegalArgumentException( + "%s is already created on remote with id %s".formatted(id, scimForCreation.getId().get()) + ); + } + Retry retry = retryRegistry.retry("create-%s".formatted(id.asString())); ServerResponse<S> response = retry.executeSupplier(() -> { try { return scimRequestBuilder @@ -98,7 +103,7 @@ public class ScimClient<S extends ResourceNode> implements AutoCloseable { } public void replace(EntityOnRemoteScimId externalId, ResourceNode scimForReplace) { - Retry retry = retryRegistry.retry("replace-" + scimForReplace.getId().get()); + Retry retry = retryRegistry.retry("replace-%s".formatted(externalId.asString())); ServerResponse<S> response = retry.executeSupplier(() -> { try { return scimRequestBuilder @@ -113,7 +118,7 @@ public class ScimClient<S extends ResourceNode> implements AutoCloseable { } public void delete(EntityOnRemoteScimId externalId) { - Retry retry = retryRegistry.retry("delete-" + externalId.asString()); + Retry retry = retryRegistry.retry("delete-%s".formatted(externalId.asString())); ServerResponse<S> response = retry.executeSupplier(() -> { try { return scimRequestBuilder.delete(getResourceClass(), getScimEndpoint(), externalId.asString())