diff --git a/jans-scim/server/src/main/java/io/jans/scim/service/init/AppInitializer.java b/jans-scim/server/src/main/java/io/jans/scim/service/init/AppInitializer.java index 07378b91251..fdc7f984bf6 100644 --- a/jans-scim/server/src/main/java/io/jans/scim/service/init/AppInitializer.java +++ b/jans-scim/server/src/main/java/io/jans/scim/service/init/AppInitializer.java @@ -85,7 +85,8 @@ public void applicationInitialized(@Observes @Initialized(ApplicationScoped.clas configurationFactory.initTimer(); loggerService.initTimer(); //externalScimService.init(); - customScriptManager.initTimer(Arrays.asList(CustomScriptType.SCIM, CustomScriptType.PERSISTENCE_EXTENSION)); + customScriptManager.initTimer(Arrays.asList( + CustomScriptType.SCIM, CustomScriptType.PERSISTENCE_EXTENSION, CustomScriptType.ID_GENERATOR)); logger.info("Initialized!"); } diff --git a/jans-scim/service/pom.xml b/jans-scim/service/pom.xml index 327a52fd7f5..6ce427a8b50 100644 --- a/jans-scim/service/pom.xml +++ b/jans-scim/service/pom.xml @@ -95,6 +95,10 @@ io.jans jans-auth-client + + io.jans + jans-auth-common + diff --git a/jans-scim/service/src/main/java/io/jans/scim/service/GroupService.java b/jans-scim/service/src/main/java/io/jans/scim/service/GroupService.java index 41bea54fc1a..2c531780888 100644 --- a/jans-scim/service/src/main/java/io/jans/scim/service/GroupService.java +++ b/jans-scim/service/src/main/java/io/jans/scim/service/GroupService.java @@ -6,16 +6,8 @@ package io.jans.scim.service; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.inject.Inject; - -import org.slf4j.Logger; - +import io.jans.as.common.service.common.ExternalIdGeneratorService; +import io.jans.as.model.common.IdType; import io.jans.orm.PersistenceEntryManager; import io.jans.orm.exception.EntryPersistenceException; import io.jans.orm.exception.operation.DuplicateEntryException; @@ -29,6 +21,15 @@ import io.jans.util.ArrayHelper; import io.jans.util.StringHelper; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.slf4j.Logger; + /** * Provides operations with groups * @@ -51,6 +52,9 @@ public class GroupService implements Serializable { @Inject private PersonService personService; + @Inject + private ExternalIdGeneratorService idGeneratorService; + public void addGroup(GluuGroup group) throws Exception { GluuGroup displayNameGroup = new GluuGroup(); displayNameGroup.setDisplayName(group.getDisplayName()); @@ -179,7 +183,19 @@ public GluuGroupVisibility[] getVisibilityTypes() { * @return New inum for group */ private String generateInumForNewGroupImpl() throws Exception { - return UUID.randomUUID().toString(); + + String id = null; + if (idGeneratorService.isEnabled()) { + id = idGeneratorService.executeExternalGenerateIdMethod( + //Use the first enabled script only + idGeneratorService.getCustomScriptConfigurations().stream().findFirst().orElse(null) + , "" //appId + , IdType.GROUP.getType() //idType + , "" //idPrefix + ); + } + return id == null ? UUID.randomUUID().toString() : id; + } public GluuGroup getGroupByDn(String Dn) { diff --git a/jans-scim/service/src/main/java/io/jans/scim/service/PersonService.java b/jans-scim/service/src/main/java/io/jans/scim/service/PersonService.java index 0dce179d130..593f2685306 100644 --- a/jans-scim/service/src/main/java/io/jans/scim/service/PersonService.java +++ b/jans-scim/service/src/main/java/io/jans/scim/service/PersonService.java @@ -6,19 +6,8 @@ package io.jans.scim.service; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.time.Instant; -import java.util.UUID; - -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.inject.Inject; - +import io.jans.as.common.service.common.ExternalIdGeneratorService; +import io.jans.as.model.common.IdType; import io.jans.model.GluuAttribute; import io.jans.orm.PersistenceEntryManager; import io.jans.orm.exception.operation.DuplicateEntryException; @@ -27,16 +16,28 @@ import io.jans.orm.model.base.SimpleBranch; import io.jans.orm.model.base.SimpleUser; import io.jans.orm.search.filter.Filter; -import io.jans.util.ArrayHelper; -import io.jans.util.OxConstants; -import io.jans.util.StringHelper; -import org.slf4j.Logger; - import io.jans.scim.exception.DuplicateEmailException; import io.jans.scim.model.GluuCustomAttribute; import io.jans.scim.model.GluuCustomPerson; import io.jans.scim.model.User; import io.jans.scim.util.OxTrustConstants; +import io.jans.util.ArrayHelper; +import io.jans.util.OxConstants; +import io.jans.util.StringHelper; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.time.Instant; +import java.util.UUID; + +import org.slf4j.Logger; /** * Provides operations with persons @@ -60,6 +61,9 @@ public class PersonService implements Serializable { @Inject private OrganizationService organizationService; + @Inject + private ExternalIdGeneratorService idGeneratorService; + private List mandatoryAttributes; public void addCustomObjectClass(GluuCustomPerson person) { @@ -274,7 +278,19 @@ public String generateInumForNewPerson() { * @throws Exception */ private String generateInumForNewPersonImpl() { - return UUID.randomUUID().toString(); + + String id = null; + if (idGeneratorService.isEnabled()) { + id = idGeneratorService.executeExternalGenerateIdMethod( + //Use the first enabled script only + idGeneratorService.getCustomScriptConfigurations().stream().findFirst().orElse(null) + , "" //appId + , IdType.PEOPLE.getType() //idType + , "" //idPrefix + ); + } + return id == null ? UUID.randomUUID().toString() : id; + } public String getDnForPerson(String inum) {