diff --git a/components/org.wso2.carbon.identity.scim2.common/src/main/java/org/wso2/carbon/identity/scim2/common/impl/SCIMUserManager.java b/components/org.wso2.carbon.identity.scim2.common/src/main/java/org/wso2/carbon/identity/scim2/common/impl/SCIMUserManager.java index 3990234e..6f5a23db 100644 --- a/components/org.wso2.carbon.identity.scim2.common/src/main/java/org/wso2/carbon/identity/scim2/common/impl/SCIMUserManager.java +++ b/components/org.wso2.carbon.identity.scim2.common/src/main/java/org/wso2/carbon/identity/scim2/common/impl/SCIMUserManager.java @@ -58,6 +58,7 @@ import org.wso2.carbon.identity.scim2.common.utils.AttributeMapper; import org.wso2.carbon.identity.scim2.common.utils.SCIMCommonConstants; import org.wso2.carbon.identity.scim2.common.utils.SCIMCommonUtils; +import org.wso2.carbon.identity.scim2.common.utils.Scenarios; import org.wso2.carbon.user.api.ClaimMapping; import org.wso2.carbon.user.api.UserStoreException; import org.wso2.carbon.user.core.PaginatedUserStoreManager; @@ -6287,7 +6288,7 @@ private List addDomainToNames(String userStoreDomainName, List g * @throws UserStoreException If an error occurs related to the user store. * @throws CharonException If an error occurs during the event handling. */ - private void publishEvent(User user, String eventName, Boolean isAdminUpdate) + private void publishEvent(User user, String eventName, boolean isAdminUpdate) throws BadRequestException, UserStoreException, CharonException { HashMap properties = new HashMap<>(); @@ -6298,7 +6299,13 @@ private void publishEvent(User user, String eventName, Boolean isAdminUpdate) properties.put(IdentityEventConstants.EventProperty.USER_STORE_DOMAIN, IdentityUtil.extractDomainFromName(user.getUsername())); properties.put(IdentityEventConstants.EventProperty.CREDENTIAL, user.getPassword()); - properties.put(IdentityEventConstants.EventProperty.IS_ADMIN_UPDATE, isAdminUpdate); + if (isAdminUpdate) { + properties.put(IdentityEventConstants.EventProperty.SCENARIO, + Scenarios.CREDENTIAL_UPDATE_BY_ADMIN_VIA_CONSOLE.name()); + } else { + properties.put(IdentityEventConstants.EventProperty.SCENARIO, + Scenarios.CREDENTIAL_UPDATE_BY_USER_VIA_MY_ACCOUNT.name()); + } Event identityMgtEvent = new Event(eventName, properties); try { diff --git a/components/org.wso2.carbon.identity.scim2.common/src/main/java/org/wso2/carbon/identity/scim2/common/utils/SCIMCommonConstants.java b/components/org.wso2.carbon.identity.scim2.common/src/main/java/org/wso2/carbon/identity/scim2/common/utils/SCIMCommonConstants.java index 8881f1f9..cd10ae5c 100644 --- a/components/org.wso2.carbon.identity.scim2.common/src/main/java/org/wso2/carbon/identity/scim2/common/utils/SCIMCommonConstants.java +++ b/components/org.wso2.carbon.identity.scim2.common/src/main/java/org/wso2/carbon/identity/scim2/common/utils/SCIMCommonConstants.java @@ -179,7 +179,8 @@ public enum ErrorMessages { ERROR_CODE_REGEX_VIOLATION("SUO-10001", "Regex validation error", "%s attribute value doesn't match with %s regex pattern"), ERROR_CODE_LENGTH_VIOLATION("SUO-10002", "Length validation error", - "%s attribute should be between %s and %s characters"); + "%s attribute should be between %s and %s characters"), + ERROR_CODE_INVALID_SCENARIO("SUO-10003","Invalid scenario","Invalid scenario: '%s'"); private final String code; private final String message; diff --git a/components/org.wso2.carbon.identity.scim2.common/src/main/java/org/wso2/carbon/identity/scim2/common/utils/Scenarios.java b/components/org.wso2.carbon.identity.scim2.common/src/main/java/org/wso2/carbon/identity/scim2/common/utils/Scenarios.java new file mode 100644 index 00000000..a6ad9732 --- /dev/null +++ b/components/org.wso2.carbon.identity.scim2.common/src/main/java/org/wso2/carbon/identity/scim2/common/utils/Scenarios.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2024, 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.scim2.common.utils; + +import org.apache.commons.lang.StringUtils; +import org.wso2.carbon.identity.scim2.common.exceptions.IdentitySCIMException; + +/** + * Enum which contains the scenarios. + */ +public enum Scenarios { + + CREDENTIAL_UPDATE_BY_ADMIN_VIA_CONSOLE, + CREDENTIAL_UPDATE_BY_USER_VIA_MY_ACCOUNT; + + /** + * Get scenario which matches the given scenario name. + * + * @param scenarioName Name of the scenario + * @return Scenarios + * @throws IdentitySCIMException Invalid scenario + */ + public static Scenarios getScenario(String scenarioName) throws IdentitySCIMException { + + Scenarios[] scenarios = { + CREDENTIAL_UPDATE_BY_ADMIN_VIA_CONSOLE, CREDENTIAL_UPDATE_BY_USER_VIA_MY_ACCOUNT + }; + if (StringUtils.isNotEmpty(scenarioName)) { + for (Scenarios scenario : scenarios) { + if (scenarioName.equals(scenario.name())) { + return scenario; + } + } + } + throw new IdentitySCIMException(SCIMCommonConstants.ErrorMessages.ERROR_CODE_INVALID_SCENARIO.getMessage()); + } + +}