diff --git a/components/org.wso2.carbon.identity.user.onboard.core.service/pom.xml b/components/org.wso2.carbon.identity.user.onboard.core.service/pom.xml new file mode 100644 index 0000000000..c09d0ca07c --- /dev/null +++ b/components/org.wso2.carbon.identity.user.onboard.core.service/pom.xml @@ -0,0 +1,125 @@ + + + + + + org.wso2.carbon.identity.governance + identity-governance + 1.8.98-SNAPSHOT + ../../pom.xml + + + 4.0.0 + org.wso2.carbon.identity.user.onboard.core.service + bundle + WSO2 Carbon - Offline User Onboard Management Feature + + + + org.apache.felix + org.apache.felix.scr.ds-annotations + provided + + + org.wso2.carbon + org.wso2.carbon.user.core + provided + + + org.wso2.carbon + org.wso2.carbon.utils + provided + + + org.wso2.carbon + org.wso2.carbon.user.api + provided + + + org.wso2.carbon + org.wso2.carbon.core.services + provided + + + org.wso2.carbon.identity.framework + org.wso2.carbon.identity.event + provided + + + org.wso2.carbon.identity.framework + org.wso2.carbon.identity.base + provided + + + org.wso2.config.mapper + config-mapper + provided + + + org.wso2.carbon.identity.governance + org.wso2.carbon.identity.recovery + + + + + + + org.apache.felix + maven-bundle-plugin + true + + + + ${project.artifactId} + + + org.wso2.carbon.identity.user.onboard.core.service.internal + + + !org.wso2.carbon.identity.user.onboard.core.service.internal, + org.wso2.carbon.identity.user.onboard.core.service.*; version = "${project.version}" + + + org.osgi.framework; version="${osgi.framework.imp.pkg.version.range}", + org.osgi.service.component; version="${osgi.service.component.imp.pkg.version.range}", + org.apache.commons.logging.*; version="${commons-logging.osgi.version.range}", + org.apache.commons.lang.*; version="${commons-lang.osgi.version.range}", + + org.wso2.carbon.base.*; version="${carbon.kernel.package.import.version.range}", + org.wso2.carbon.context.*; version="${carbon.kernel.package.import.version.range}", + org.wso2.carbon.user.core.*; version="${carbon.kernel.package.import.version.range}", + + org.wso2.carbon.user.api.*; version="${carbon.user.api.imp.pkg.version.range}", + + org.wso2.carbon.identity.core.*; version="${carbon.identity.framework.imp.pkg.version.range}", + org.wso2.carbon.identity.application.*; version="${carbon.identity.framework.imp.pkg.version.range}", + org.wso2.carbon.identity.event.*; version="${carbon.identity.framework.imp.pkg.version.range}", + + org.wso2.carbon.identity.recovery.*; version="${identity.governance.imp.pkg.version.range}", + org.wso2.carbon.identity.governance.*; version="${identity.governance.imp.pkg.version.range}" + + + org.wso2.config.mapper + + + + + + + diff --git a/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/UserOnboardCoreService.java b/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/UserOnboardCoreService.java new file mode 100644 index 0000000000..790b0fd4cc --- /dev/null +++ b/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/UserOnboardCoreService.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023, WSO2 LLC. (http://www.wso2.com). + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.wso2.carbon.identity.user.onboard.core.service; + + +import org.wso2.carbon.identity.recovery.IdentityRecoveryException; +import org.wso2.carbon.identity.user.onboard.core.service.exception.UserOnboardServiceException;; +import org.wso2.carbon.identity.user.onboard.core.service.model.Configuration; + +/** + * Core OSGi service for user onboarding related utilities. + */ +public interface UserOnboardCoreService { + + /** + * This method generate password reset link. + * + * @param configuration Invitation link configuration. + * @return password reset link. + * @throws UserOnboardServiceException + */ + String generatePasswordResetLink(Configuration configuration) throws IdentityRecoveryException; +} diff --git a/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/UserOnboardCoreServiceImpl.java b/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/UserOnboardCoreServiceImpl.java new file mode 100644 index 0000000000..2ffb3be21a --- /dev/null +++ b/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/UserOnboardCoreServiceImpl.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023, WSO2 LLC. (http://www.wso2.com). + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.wso2.carbon.identity.user.onboard.core.service; + + +import org.wso2.carbon.identity.recovery.IdentityRecoveryException; +import org.wso2.carbon.identity.user.onboard.core.service.model.Configuration; +import org.wso2.carbon.identity.user.onboard.core.service.password.ResetLinkGenerator; + +/** + * Default implementation of the @see UserOnboardCoreService. + */ +public class UserOnboardCoreServiceImpl implements UserOnboardCoreService { + + @Override + public String generatePasswordResetLink(Configuration configuration) + throws IdentityRecoveryException { + + ResetLinkGenerator resetLinkGenerator = new ResetLinkGenerator(); + return resetLinkGenerator.generateResetLink(configuration); + } +} diff --git a/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/exception/UserOnboardServiceException.java b/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/exception/UserOnboardServiceException.java new file mode 100644 index 0000000000..c590aa3384 --- /dev/null +++ b/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/exception/UserOnboardServiceException.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2023, WSO2 LLC. (http://www.wso2.com). + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.wso2.carbon.identity.user.onboard.core.service.exception; + +/** + * Generic exception that is thrown when there is an error in the user onboard core services. + */ +public class UserOnboardServiceException extends Exception { + + /** + * Creates UserOnboardCoreService Exception. + */ + public UserOnboardServiceException() { + + super(); + } + + /** + * Creates UserOnboardCoreService Exception. + * + * @param message Error message. + */ + public UserOnboardServiceException(String message) { + + super(message); + } + + /** + * Creates UserOnboardCoreService Exception. + * + * @param throwable Error or exception. + */ + public UserOnboardServiceException(Throwable throwable) { + + super(throwable); + } + + /** + * Creates UserOnboardCoreService Exception. + * + * @param message Error message. + * @param throwable Errors or Exception. + */ + public UserOnboardServiceException(String message, Throwable throwable) { + + super(message, throwable); + } +} diff --git a/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/internal/ServiceComponent.java b/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/internal/ServiceComponent.java new file mode 100644 index 0000000000..c9a8f396bc --- /dev/null +++ b/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/internal/ServiceComponent.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2023, WSO2 LLC. (http://www.wso2.com). + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.wso2.carbon.identity.user.onboard.core.service.internal; + + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.osgi.service.component.ComponentContext; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.wso2.carbon.identity.user.onboard.core.service.UserOnboardCoreService; +import org.wso2.carbon.identity.user.onboard.core.service.UserOnboardCoreServiceImpl; + +/** + * Service component class of the user onboard manager core service. + */ +@Component( + name = "org.wso2.carbon.identity.api.user.onboard.core.service.component", + immediate = true +) +public class ServiceComponent { + + private static final Log LOG = LogFactory.getLog(ServiceComponent.class); + + @Activate + protected void activate(ComponentContext componentContext) { + + try { + componentContext.getBundleContext().registerService(UserOnboardCoreService.class.getName(), + new UserOnboardCoreServiceImpl(), null); + LOG.info("User onboard api core service component activated successfully."); + } catch (Throwable throwable) { + LOG.error("Failed to activate the User onboard api core service component.", throwable); + } + } +} diff --git a/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/model/Configuration.java b/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/model/Configuration.java new file mode 100644 index 0000000000..c52481d522 --- /dev/null +++ b/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/model/Configuration.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2023, WSO2 LLC. (http://www.wso2.com). + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.wso2.carbon.identity.user.onboard.core.service.model; + +/** + * This class holds the configuration of the invite-link. + */ +public class Configuration { + + private String username; + private String userStore; + private String tenantDomain; + + /** + * Creates Configuration object. + * + * @param username Username of the user to whom the invite-link should be generated. + * @param userstore User store where the user belongs to. + * @param tenantDomain Tenant name where the user belongs to. + */ + public Configuration(String username, String userstore, String tenantDomain) { + this.username = username; + this.userStore = userstore; + this.tenantDomain = tenantDomain; + } + + /** + * Method to get the username. + * + * @return username string. + */ + public String getUsername() { + return this.username; + } + + /** + * Get user store name of the user. + * + * @return user store domain name. + */ + public String getUserStore() { + return this.userStore; + } + + /** + * Get the name of the tenant. + * + * @return tenant domain name. + */ + public String getTenantDomain() { + return this.tenantDomain; + } + + /** + * Set the username to the configuration. + * + * @param username the username of the user. + */ + public void setUsername(String username) { + this.username = username; + } + + /** + * Set the user store domain to the configuration. + * + * @param userStore the user store domain name. + */ + public void setUserStore(String userStore) { + this.userStore = userStore; + } + + /** + * Set tenant domain to the configuration. + * + * @param tenantDomain tenant domain name. + */ + public void setTenantDomain(String tenantDomain) { + this.tenantDomain = tenantDomain; + } +} diff --git a/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/password/ResetLinkGenerator.java b/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/password/ResetLinkGenerator.java new file mode 100644 index 0000000000..4cbae3c2d8 --- /dev/null +++ b/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/password/ResetLinkGenerator.java @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2023, WSO2 LLC. (http://www.wso2.com). + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.wso2.carbon.identity.user.onboard.core.service.password; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.context.CarbonContext; +import org.wso2.carbon.identity.application.authentication.framework.config.ConfigurationFacade; +import org.wso2.carbon.identity.application.common.model.User; +import org.wso2.carbon.identity.core.util.IdentityTenantUtil; +import org.wso2.carbon.identity.core.util.IdentityUtil; +import org.wso2.carbon.identity.governance.service.notification.NotificationChannels; +import org.wso2.carbon.identity.recovery.IdentityRecoveryConstants; +import org.wso2.carbon.identity.recovery.IdentityRecoveryException; +import org.wso2.carbon.identity.recovery.RecoveryScenarios; +import org.wso2.carbon.identity.recovery.RecoverySteps; +import org.wso2.carbon.identity.recovery.internal.IdentityRecoveryServiceDataHolder; +import org.wso2.carbon.identity.recovery.model.UserRecoveryData; +import org.wso2.carbon.identity.recovery.store.JDBCRecoveryDataStore; +import org.wso2.carbon.identity.recovery.store.UserRecoveryDataStore; +import org.wso2.carbon.identity.recovery.util.Utils; +import org.wso2.carbon.identity.user.onboard.core.service.model.Configuration; +import org.wso2.carbon.user.api.UserStoreException; +import org.wso2.carbon.user.api.UserStoreManager; +import org.wso2.carbon.user.core.common.AbstractUserStoreManager; + +/** + * Generates the password reset link for the user. + */ +public class ResetLinkGenerator { + private static final Log LOG = LogFactory.getLog(ResetLinkGenerator.class); + + /** + * Generate a unique password reset link for the given user. + * + * @param configuration Link generation configuration. + * @return Generated unique link. + * @throws IdentityRecoveryException on an error. + */ + public String generateResetLink(Configuration configuration) throws IdentityRecoveryException { + + User user = new User(); + user.setUserName(configuration.getUsername()); + user.setTenantDomain(configuration.getTenantDomain()); + user.setUserStoreDomain(configuration.getUserStore()); + + if (!isValidUserStoreExists(user.getUserStoreDomain())) { + throw Utils.handleClientException(IdentityRecoveryConstants.ErrorMessages.ERROR_CODE_USER_STORE_INVALID, + user.getUserStoreDomain()); + } + + if (!isExistingUser(user)) { + // If the user does not exist, Check for NOTIFY_USER_EXISTENCE property. If the property is not + // enabled, notify with an empty NotificationResponseBean. + throw Utils.handleClientException(IdentityRecoveryConstants.ErrorMessages.ERROR_CODE_INVALID_USER, + user.getUserName()); + } + if (Utils.isAccountDisabled(user)) { + // If the NotifyUserAccountStatus is disabled, notify with an empty NotificationResponseBean. + throw Utils.handleClientException(IdentityRecoveryConstants.ErrorMessages.ERROR_CODE_DISABLED_ACCOUNT, + user.getUserName()); + } + if (Utils.isAccountLocked(user)) { + // If the NotifyUserAccountStatus is disabled, notify with an empty NotificationResponseBean. + throw Utils.handleClientException(IdentityRecoveryConstants.ErrorMessages.ERROR_CODE_LOCKED_ACCOUNT, + user.getUserName()); + } + + UserRecoveryData recoveryDataDO = generateNewConfirmationCode(user, NotificationChannels.EXTERNAL_CHANNEL + .getChannelType()); + String secretKey = recoveryDataDO.getSecret(); + + String serverHost = ConfigurationFacade.getInstance().getAccountRecoveryEndpointPath(); + + return String.format("%s/confirmrecovery.do?confirmation=%s", serverHost, secretKey); + } + + /** + * Generates the new confirmation code details for a corresponding user. + * + * @param user Details of the user that needs the confirmation code. + * @param notificationChannel Method to send the recovery information. eg : EMAIL, SMS. + * @return Created recovery data object. + * @throws IdentityRecoveryException Error while generating the recovery information. + */ + private UserRecoveryData generateNewConfirmationCode(User user, String notificationChannel) + throws IdentityRecoveryException { + + UserRecoveryDataStore userRecoveryDataStore = JDBCRecoveryDataStore.getInstance(); + userRecoveryDataStore.invalidate(user); + String secretKey = Utils.generateSecretKey(notificationChannel, user.getTenantDomain(), + RecoveryScenarios.NOTIFICATION_BASED_PW_RECOVERY.name()); + UserRecoveryData recoveryDataDO = new UserRecoveryData(user, secretKey, + RecoveryScenarios.NOTIFICATION_BASED_PW_RECOVERY, RecoverySteps.UPDATE_PASSWORD); + + // Store the notified channel in the recovery object for future reference. + recoveryDataDO.setRemainingSetIds(notificationChannel); + userRecoveryDataStore.store(recoveryDataDO); + return recoveryDataDO; + } + + /** + * Check for user existence. + * + * @param user User + * @return True if the user exists + * @throws IdentityRecoveryException Error while checking user existence + */ + private boolean isExistingUser(User user) throws IdentityRecoveryException { + + try { + int tenantId = IdentityTenantUtil.getTenantId(user.getTenantDomain()); + UserStoreManager userStoreManager; + userStoreManager = IdentityRecoveryServiceDataHolder.getInstance().getRealmService(). + getTenantUserRealm(tenantId).getUserStoreManager(); + String domainQualifiedUsername = IdentityUtil + .addDomainToName(user.getUserName(), user.getUserStoreDomain()); + if (!userStoreManager.isExistingUser(domainQualifiedUsername)) { + if (LOG.isDebugEnabled()) { + LOG.debug("No user found for provided username"); + } + return false; + } + return true; + } catch (UserStoreException e) { + throw Utils.handleServerException(IdentityRecoveryConstants.ErrorMessages.ERROR_CODE_UNEXPECTED, null, e); + } + } + + /** + * To check whether valid type user store is exist. + * + * @param userStoreDomain User store domain name. + * @return True if valid type user store exist for given domain id. + * @throws UserStoreException If an error occurred while getting the user store manager. + */ + private boolean isValidUserStoreExists(String userStoreDomain) throws IdentityRecoveryException { + + UserStoreManager userStoreManager; + try { + userStoreManager = ((AbstractUserStoreManager) CarbonContext.getThreadLocalCarbonContext().getUserRealm() + .getUserStoreManager()).getSecondaryUserStoreManager(userStoreDomain); + } catch (UserStoreException e) { + throw Utils.handleServerException(IdentityRecoveryConstants.ErrorMessages.ERROR_CODE_UNEXPECTED, null, e); + } + if (userStoreManager == null) { + return false; + } + return true; + } +} diff --git a/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/util/UserOnboardCoreUtil.java b/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/util/UserOnboardCoreUtil.java new file mode 100644 index 0000000000..91725a47e8 --- /dev/null +++ b/components/org.wso2.carbon.identity.user.onboard.core.service/src/main/java/org/wso2/carbon/identity/user/onboard/core/service/util/UserOnboardCoreUtil.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023, WSO2 LLC. (http://www.wso2.com). + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.wso2.carbon.identity.user.onboard.core.service.util; + +/** + * This class has the miscellaneous functions related to the user onboard core service. + */ +public class UserOnboardCoreUtil { + + private static final String DOMAIN_SEPARATOR = "/"; + + /** + * Get the domain name of the user. + * @param domainQualifiedUsername Username with user store domain. + * @return Domain name as a string. + */ + public static String getUserDomainName(String domainQualifiedUsername) { + int index = domainQualifiedUsername.indexOf(DOMAIN_SEPARATOR); + if (index > 0) { + return domainQualifiedUsername.substring(0, index); + } + return null; + } +} diff --git a/features/org.wso2.carbon.identity.governance.feature/pom.xml b/features/org.wso2.carbon.identity.governance.feature/pom.xml index 20a11ff4b7..de6c7a405b 100644 --- a/features/org.wso2.carbon.identity.governance.feature/pom.xml +++ b/features/org.wso2.carbon.identity.governance.feature/pom.xml @@ -99,6 +99,12 @@ ${project.version} zip + + org.wso2.carbon.identity.governance + org.wso2.carbon.identity.user.onboard.core.service.feature + ${project.version} + zip + @@ -154,6 +160,9 @@ org.wso2.carbon.identity.governance:org.wso2.carbon.identity.auth.attribute.handler.server.feature + + org.wso2.carbon.identity.governance:org.wso2.carbon.identity.user.onboard.core.service.feature + diff --git a/features/org.wso2.carbon.identity.user.onboard.core.service.feature/pom.xml b/features/org.wso2.carbon.identity.user.onboard.core.service.feature/pom.xml new file mode 100644 index 0000000000..aed6c8c265 --- /dev/null +++ b/features/org.wso2.carbon.identity.user.onboard.core.service.feature/pom.xml @@ -0,0 +1,74 @@ + + + + + + + org.wso2.carbon.identity.governance + identity-governance + 1.8.98-SNAPSHOT + ../../pom.xml + + + 4.0.0 + org.wso2.carbon.identity.user.onboard.core.service.feature + pom + WSO2 Carbon - Offline User Onboard Management Feature + http://wso2.org + + + + org.wso2.carbon.identity.governance + org.wso2.carbon.identity.user.onboard.core.service + ${project.version} + + + + + + + org.wso2.maven + carbon-p2-plugin + ${carbon.p2.plugin.version} + + + p2-feature-generation + package + + p2-feature-gen + + + org.wso2.carbon.identity.user.onboard.core.service + ../../etc/feature.properties + + + org.wso2.carbon.p2.category.type:server + + + + + org.wso2.carbon.identity.governance:org.wso2.carbon.identity.user.onboard.core.service + + + + + + + + + + diff --git a/pom.xml b/pom.xml index ad41c1b6b7..0497153d0e 100644 --- a/pom.xml +++ b/pom.xml @@ -61,6 +61,7 @@ components/org.wso2.carbon.identity.auth.attribute.handler components/org.wso2.carbon.identity.password.expiry components/org.wso2.carbon.identity.idle.account.identification + components/org.wso2.carbon.identity.user.onboard.core.service features/org.wso2.carbon.identity.recovery.server.feature features/org.wso2.carbon.identity.user.server.feature @@ -76,6 +77,7 @@ features/org.wso2.carbon.identity.multi.attribute.login.service.server.feature features/org.wso2.carbon.identity.auth.attribute.handler.server.feature features/org.wso2.carbon.identity.password.expiry.server.feature + features/org.wso2.carbon.identity.user.onboard.core.service.feature @@ -526,6 +528,21 @@ pax-logging-api ${pax.logging.api.version} + + org.wso2.carbon.identity.governance + org.wso2.carbon.identity.user.onboard.core.service + ${project.version} + + + org.wso2.carbon + org.wso2.carbon.core.services + ${carbon.kernel.version} + + + org.wso2.config.mapper + config-mapper + ${config.mapper.version} + @@ -662,6 +679,7 @@ 2.4.0.wso2v1 [2.4.0,3.0.0) [1.2.0,2.0.0) + [2.6.0, 3.0.0) [2.6.0, 3.0.0) 1.2.4 3.5.100.v20160504-1419 @@ -742,6 +760,8 @@ 1.1.3 [1.1.0, 2.0.0) + + 1.0.13