diff --git a/src/main/java/sh/libre/scim/core/Adapter.java b/src/main/java/sh/libre/scim/core/Adapter.java index 913ef09d03cf578bc3bbf484241a5f8030c018c5..7eada911234c507bf1e79c4510daeded5a85f307 100644 --- a/src/main/java/sh/libre/scim/core/Adapter.java +++ b/src/main/java/sh/libre/scim/core/Adapter.java @@ -25,6 +25,7 @@ public abstract class Adapter<M extends RoleMapperModel, S extends com.unboundid protected String id; protected String externalId; + protected Boolean skip = false; public Adapter(KeycloakSession session, String componentId, String type, Logger logger) { this.session = session; diff --git a/src/main/java/sh/libre/scim/core/GroupAdapter.java b/src/main/java/sh/libre/scim/core/GroupAdapter.java index 8cdced67cea9e80358c80f1343e50cea608537e1..33039c5904217721a4225e33c6fbde0758fca968 100644 --- a/src/main/java/sh/libre/scim/core/GroupAdapter.java +++ b/src/main/java/sh/libre/scim/core/GroupAdapter.java @@ -14,6 +14,7 @@ import com.unboundid.scim2.common.types.GroupResource; import com.unboundid.scim2.common.types.Member; import com.unboundid.scim2.common.types.Meta; +import org.apache.commons.lang.StringUtils; import org.jboss.logging.Logger; import org.keycloak.models.GroupModel; import org.keycloak.models.KeycloakSession; @@ -50,6 +51,7 @@ public class GroupAdapter extends Adapter<GroupModel, GroupResource> { .getGroupMembersStream(session.getContext().getRealm(), group) .map(x -> x.getId()) .collect(Collectors.toSet()); + this.skip = StringUtils.equals(group.getFirstAttribute("scim-skip"), "true"); } @Override diff --git a/src/main/java/sh/libre/scim/core/ScimClient.java b/src/main/java/sh/libre/scim/core/ScimClient.java index 702ff39ba2317ee877670c870fb87c221815de56..fc2610c13ad66ae2c28406bbf69fc44b2228a7f6 100644 --- a/src/main/java/sh/libre/scim/core/ScimClient.java +++ b/src/main/java/sh/libre/scim/core/ScimClient.java @@ -78,6 +78,7 @@ public class ScimClient { M kcModel) { var adapter = getAdapter(aClass); adapter.apply(kcModel); + if (adapter.skip) return; // If mapping exist then it was created by import so skip. if (adapter.query("findById", adapter.getId()).getResultList().size() != 0) { return; @@ -102,6 +103,7 @@ public class ScimClient { var adapter = getAdapter(aClass); try { adapter.apply(kcModel); + if (adapter.skip) return; var resource = adapter.query("findById", adapter.getId()).getSingleResult(); adapter.apply(resource); var retry = registry.retry("replace-" + adapter.getId()); diff --git a/src/main/java/sh/libre/scim/core/UserAdapter.java b/src/main/java/sh/libre/scim/core/UserAdapter.java index dbfd2f0b09c23fb50651bdfd6fe337b85a8132a4..df6676e628e3c240d7a44d88a412f30694464f51 100644 --- a/src/main/java/sh/libre/scim/core/UserAdapter.java +++ b/src/main/java/sh/libre/scim/core/UserAdapter.java @@ -110,6 +110,7 @@ public class UserAdapter extends Adapter<UserModel, UserResource> { var roles = new String[rolesSet.size()]; rolesSet.toArray(roles); setRoles(roles); + this.skip = StringUtils.equals(user.getFirstAttribute("scim-skip"), "true"); } @Override