diff --git a/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.common/src/main/java/org/wso2/carbon/identity/api/server/permission/management/common/Constant.java b/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.common/src/main/java/org/wso2/carbon/identity/api/server/permission/management/common/Constant.java index 8c42676289..d3300d3dae 100644 --- a/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.common/src/main/java/org/wso2/carbon/identity/api/server/permission/management/common/Constant.java +++ b/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.common/src/main/java/org/wso2/carbon/identity/api/server/permission/management/common/Constant.java @@ -16,6 +16,9 @@ package org.wso2.carbon.identity.api.server.permission.management.common; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import java.util.HashMap; import java.util.Map; import java.util.ResourceBundle; @@ -25,6 +28,8 @@ */ public class Constant { + private static final Log log = LogFactory.getLog(Constant.class); + /** * Enum for error messages. */ @@ -78,11 +83,20 @@ public String getDescription() { */ public static ErrorMessage getMappedErrorMessage(String serverCode) { + if (log.isDebugEnabled()) { + log.debug("Getting mapped error message for server code: " + serverCode); + } + try { String errorCode = resourceBundle.getString(serverCode); + if (log.isDebugEnabled()) { + log.debug("Found mapped error code: " + errorCode + " for server code: " + serverCode); + } return messageIndex.get(errorCode); } catch (Throwable e) { - // Ignore if error mapping has invalid input. + if (log.isDebugEnabled()) { + log.debug("Error mapping not found for server code: " + serverCode + ". Using default error."); + } } return ErrorMessage.ERROR_CODE_INVALID_INPUT; } diff --git a/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.common/src/main/java/org/wso2/carbon/identity/api/server/permission/management/common/RolePermissionManagementServiceDataHolder.java b/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.common/src/main/java/org/wso2/carbon/identity/api/server/permission/management/common/RolePermissionManagementServiceDataHolder.java index 5a3d0295b8..a845b05656 100644 --- a/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.common/src/main/java/org/wso2/carbon/identity/api/server/permission/management/common/RolePermissionManagementServiceDataHolder.java +++ b/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.common/src/main/java/org/wso2/carbon/identity/api/server/permission/management/common/RolePermissionManagementServiceDataHolder.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.permission.management.common; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.user.mgt.RolePermissionManagementService; @@ -26,6 +28,8 @@ */ public class RolePermissionManagementServiceDataHolder { + private static final Log log = LogFactory.getLog(RolePermissionManagementServiceDataHolder.class); + private RolePermissionManagementServiceDataHolder() {} private static class RolePermissionManagementServiceHolder { @@ -41,6 +45,15 @@ private static class RolePermissionManagementServiceHolder { */ public static RolePermissionManagementService getRolePermissionManagementService() { - return RolePermissionManagementServiceHolder.SERVICE; + if (log.isDebugEnabled()) { + log.debug("Getting RolePermissionManagementService from OSGi registry."); + } + + RolePermissionManagementService service = RolePermissionManagementServiceHolder.SERVICE; + if (service == null) { + log.warn("RolePermissionManagementService is not available in OSGi registry."); + } + + return service; } } diff --git a/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.v1/src/main/java/org/wso2/carbon/identity/api/server/permission/management/v1/core/PermissionManagementService.java b/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.v1/src/main/java/org/wso2/carbon/identity/api/server/permission/management/v1/core/PermissionManagementService.java index 0192f83459..88c82756c8 100644 --- a/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.v1/src/main/java/org/wso2/carbon/identity/api/server/permission/management/v1/core/PermissionManagementService.java +++ b/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.v1/src/main/java/org/wso2/carbon/identity/api/server/permission/management/v1/core/PermissionManagementService.java @@ -54,8 +54,15 @@ public Permission[] getAllPermissions() { try { String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain(); - return getPermissionObjects(rolePermissionManagementService.getAllPermissions(IdentityTenantUtil - .getTenantId(tenantDomain))); + if (LOG.isDebugEnabled()) { + LOG.debug("Retrieving all permissions for tenant: " + tenantDomain); + } + Permission[] permissions = getPermissionObjects(rolePermissionManagementService.getAllPermissions( + IdentityTenantUtil.getTenantId(tenantDomain))); + if (LOG.isDebugEnabled()) { + LOG.debug("Successfully retrieved " + permissions.length + " permissions for tenant: " + tenantDomain); + } + return permissions; } catch (RolePermissionException e) { throw handleException(e); } @@ -69,6 +76,10 @@ public Permission[] getAllPermissions() { */ private Permission[] getPermissionObjects(org.wso2.carbon.user.mgt.common.model.Permission[] permissions) { + if (permissions == null) { + LOG.warn("Permission array received is null, returning empty array"); + return new Permission[0]; + } Permission[] outputPermissions = new Permission[permissions.length]; for (int i = 0; i < permissions.length; i++) { Permission permission = new Permission(); diff --git a/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.v1/src/main/java/org/wso2/carbon/identity/api/server/permission/management/v1/factories/PermissionManagementServiceFactory.java b/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.v1/src/main/java/org/wso2/carbon/identity/api/server/permission/management/v1/factories/PermissionManagementServiceFactory.java index 6131d39261..67ec376dbd 100644 --- a/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.v1/src/main/java/org/wso2/carbon/identity/api/server/permission/management/v1/factories/PermissionManagementServiceFactory.java +++ b/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.v1/src/main/java/org/wso2/carbon/identity/api/server/permission/management/v1/factories/PermissionManagementServiceFactory.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.permission.management.v1.factories; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.permission.management.common.RolePermissionManagementServiceDataHolder; import org.wso2.carbon.identity.api.server.permission.management.v1.core.PermissionManagementService; import org.wso2.carbon.user.mgt.RolePermissionManagementService; @@ -27,6 +29,7 @@ */ public class PermissionManagementServiceFactory { + private static final Log LOG = LogFactory.getLog(PermissionManagementServiceFactory.class); private static final PermissionManagementService SERVICE; static { @@ -34,9 +37,11 @@ public class PermissionManagementServiceFactory { .getRolePermissionManagementService(); if (rolePermissionManagementService == null) { + LOG.error("RolePermissionManagementService is not available from OSGi context"); throw new IllegalStateException("RolePermissionManagementService is not available from OSGi context."); } + LOG.info("PermissionManagementService initialized successfully"); SERVICE = new PermissionManagementService(rolePermissionManagementService); } diff --git a/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.v1/src/main/java/org/wso2/carbon/identity/api/server/permission/management/v1/impl/PermissionManagementApiServiceImpl.java b/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.v1/src/main/java/org/wso2/carbon/identity/api/server/permission/management/v1/impl/PermissionManagementApiServiceImpl.java index e85019bc06..09f870c458 100644 --- a/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.v1/src/main/java/org/wso2/carbon/identity/api/server/permission/management/v1/impl/PermissionManagementApiServiceImpl.java +++ b/components/org.wso2.carbon.identity.api.server.permission.management/org.wso2.carbon.identity.api.server.permission.management.v1/src/main/java/org/wso2/carbon/identity/api/server/permission/management/v1/impl/PermissionManagementApiServiceImpl.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.permission.management.v1.impl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.permission.management.v1.PermissionManagementApiService; import org.wso2.carbon.identity.api.server.permission.management.v1.core.PermissionManagementService; import org.wso2.carbon.identity.api.server.permission.management.v1.factories.PermissionManagementServiceFactory; @@ -29,13 +31,18 @@ */ public class PermissionManagementApiServiceImpl implements PermissionManagementApiService { + private static final Log LOG = LogFactory.getLog(PermissionManagementApiServiceImpl.class); private final PermissionManagementService permissionManagementService; public PermissionManagementApiServiceImpl() { try { this.permissionManagementService = PermissionManagementServiceFactory.getPermissionManagementService(); + if (LOG.isDebugEnabled()) { + LOG.debug("PermissionManagementApiServiceImpl initialized successfully"); + } } catch (IllegalStateException e) { + LOG.error("Error occurred while initiating PermissionManagementService", e); throw new RuntimeException("Error occurred while initiating PermissionManagementService.", e); } } @@ -43,6 +50,9 @@ public PermissionManagementApiServiceImpl() { @Override public Response permissionManagementPermissionsGet() { + if (LOG.isDebugEnabled()) { + LOG.debug("Received request to get all permissions"); + } return Response.ok().entity(permissionManagementService.getAllPermissions()).build(); } } diff --git a/components/org.wso2.carbon.identity.api.server.rule.metadata/org.wso2.carbon.identity.api.server.rule.metadata.common/src/main/java/org/wso2/carbon/identity/api/server/rule/metadata/common/RuleMetadataServiceHolder.java b/components/org.wso2.carbon.identity.api.server.rule.metadata/org.wso2.carbon.identity.api.server.rule.metadata.common/src/main/java/org/wso2/carbon/identity/api/server/rule/metadata/common/RuleMetadataServiceHolder.java index 99f565f47f..0c3188fb61 100644 --- a/components/org.wso2.carbon.identity.api.server.rule.metadata/org.wso2.carbon.identity.api.server.rule.metadata.common/src/main/java/org/wso2/carbon/identity/api/server/rule/metadata/common/RuleMetadataServiceHolder.java +++ b/components/org.wso2.carbon.identity.api.server.rule.metadata/org.wso2.carbon.identity.api.server.rule.metadata.common/src/main/java/org/wso2/carbon/identity/api/server/rule/metadata/common/RuleMetadataServiceHolder.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.rule.metadata.common; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.identity.rule.metadata.api.service.RuleMetadataService; @@ -26,6 +28,8 @@ */ public class RuleMetadataServiceHolder { + private static final Log log = LogFactory.getLog(RuleMetadataServiceHolder.class); + private RuleMetadataServiceHolder() { } @@ -43,6 +47,13 @@ private static class RuleMetadataServiceHolderInstance { */ public static RuleMetadataService getRuleMetadataService() { - return RuleMetadataServiceHolderInstance.SERVICE; + if (log.isDebugEnabled()) { + log.debug("Retrieving RuleMetadataService instance from OSGi service registry."); + } + RuleMetadataService service = RuleMetadataServiceHolderInstance.SERVICE; + if (service == null) { + log.warn("RuleMetadataService is not available. Service might not be registered in OSGi registry."); + } + return service; } } diff --git a/components/org.wso2.carbon.identity.api.server.rule.metadata/org.wso2.carbon.identity.api.server.rule.metadata.v1/src/main/java/org/wso2/carbon/identity/api/server/rule/metadata/v1/core/ServerRuleMetadataService.java b/components/org.wso2.carbon.identity.api.server.rule.metadata/org.wso2.carbon.identity.api.server.rule.metadata.v1/src/main/java/org/wso2/carbon/identity/api/server/rule/metadata/v1/core/ServerRuleMetadataService.java index c74f8d610e..239938e45b 100644 --- a/components/org.wso2.carbon.identity.api.server.rule.metadata/org.wso2.carbon.identity.api.server.rule.metadata.v1/src/main/java/org/wso2/carbon/identity/api/server/rule/metadata/v1/core/ServerRuleMetadataService.java +++ b/components/org.wso2.carbon.identity.api.server.rule.metadata/org.wso2.carbon.identity.api.server.rule.metadata.v1/src/main/java/org/wso2/carbon/identity/api/server/rule/metadata/v1/core/ServerRuleMetadataService.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.rule.metadata.v1.core; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.CarbonContext; import org.wso2.carbon.identity.api.server.rule.metadata.v1.model.Field; import org.wso2.carbon.identity.api.server.rule.metadata.v1.model.Link; @@ -41,6 +43,7 @@ */ public class ServerRuleMetadataService { + private static final Log LOG = LogFactory.getLog(ServerRuleMetadataService.class); private final RuleMetadataService ruleMetadataService; public ServerRuleMetadataService(RuleMetadataService ruleMetadataService) { @@ -56,11 +59,15 @@ public ServerRuleMetadataService(RuleMetadataService ruleMetadataService) { public List getExpressionMeta( String flow) { + String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain(); + if (LOG.isDebugEnabled()) { + LOG.debug("Retrieving expression metadata for flow: " + flow + " in tenant: " + tenantDomain); + } + try { FlowType flowType = FlowType.valueOfFlowAlias(flow); - List fieldDefinitions = ruleMetadataService.getExpressionMeta(flowType, - CarbonContext.getThreadLocalCarbonContext().getTenantDomain()); + List fieldDefinitions = ruleMetadataService.getExpressionMeta(flowType, tenantDomain); List fieldDefinitionResponseList = new ArrayList<>(); @@ -68,6 +75,11 @@ public List functionLibraries; try { functionLibraries = functionLibraryManagementService.listFunctionLibraries(ContextLoader .getTenantDomainFromContext()); + if (log.isDebugEnabled()) { + log.debug("Found " + (functionLibraries != null ? functionLibraries.size() : 0) + + " script libraries for tenant: " + ContextLoader.getTenantDomainFromContext()); + } } catch (FunctionLibraryManagementException e) { throw handleScriptLibraryError(e, Constants.ErrorMessage.ERROR_CODE_ERROR_LISTING_SCRIPT_LIBRARIES); } @@ -127,6 +134,10 @@ private int validateLimit(Integer limit) { */ public ScriptLibraryResponse getScriptLibrary(String scriptLibraryId) { + if (log.isDebugEnabled()) { + log.debug("Retrieving script library with ID: " + scriptLibraryId + " for tenant: " + + ContextLoader.getTenantDomainFromContext()); + } if (isScriptLibraryAvailable(scriptLibraryId)) { FunctionLibrary functionLibrary; try { @@ -137,6 +148,10 @@ public ScriptLibraryResponse getScriptLibrary(String scriptLibraryId) { } return createScriptLibraryResponse(functionLibrary); } else { + if (log.isDebugEnabled()) { + log.debug("Script library not found: " + scriptLibraryId + " for tenant: " + + ContextLoader.getTenantDomainFromContext()); + } throw handleScriptLibraryClientError(Constants.ErrorMessage.ERROR_SCRIPT_LIBRARY_NOT_FOUND, Response.Status.NOT_FOUND, scriptLibraryId, ContextLoader.getTenantDomainFromContext()); } @@ -152,6 +167,9 @@ public ScriptLibraryResponse getScriptLibrary(String scriptLibraryId) { */ public void addScriptLibrary(String name, InputStream contentInputStream, String description) { + if (log.isDebugEnabled()) { + log.debug("Adding script library: " + name + " for tenant: " + ContextLoader.getTenantDomainFromContext()); + } ScriptLibraryPOSTRequest scriptLibraryPOSTRequest = new ScriptLibraryPOSTRequest(); scriptLibraryPOSTRequest.setName(name); scriptLibraryPOSTRequest.setDescription(description); @@ -164,6 +182,9 @@ public void addScriptLibrary(String name, InputStream contentInputStream, String Response.Status.INTERNAL_SERVER_ERROR); } if (isScriptLibraryAvailable(scriptLibraryPOSTRequest.getName())) { + if (log.isDebugEnabled()) { + log.debug("Script library already exists: " + scriptLibraryPOSTRequest.getName()); + } throw handleScriptLibraryClientError(Constants.ErrorMessage.ERROR_SCRIPT_LIBRARY_ALREADY_FOUND, Response.Status.CONFLICT, scriptLibraryPOSTRequest.getName(), ContextLoader.getTenantDomainFromContext()); @@ -174,7 +195,12 @@ public void addScriptLibrary(String name, InputStream contentInputStream, String if (scriptLibraryPOSTRequest.getName().contains(Constants.SCRIPT_LIBRARY_EXTENSION)) { functionLibraryManagementService.createFunctionLibrary(functionLibrary, ContextLoader .getTenantDomainFromContext()); + log.info("Script library created successfully: " + scriptLibraryPOSTRequest.getName() + + " for tenant: " + ContextLoader.getTenantDomainFromContext()); } else { + if (log.isDebugEnabled()) { + log.debug("Invalid script library name format: " + scriptLibraryPOSTRequest.getName()); + } throw handleScriptLibraryClientError(Constants.ErrorMessage.ERROR_SCRIPT_LIBRARY_NAME_VALIDATION, Response.Status.BAD_REQUEST); } @@ -195,6 +221,10 @@ public void addScriptLibrary(String name, InputStream contentInputStream, String public void updateScriptLibrary(String scriptLibraryName, InputStream contentInputStream, String description) { + if (log.isDebugEnabled()) { + log.debug("Updating script library: " + scriptLibraryName + " for tenant: " + + ContextLoader.getTenantDomainFromContext()); + } ScriptLibraryPUTRequest scriptLibraryPUTRequest = new ScriptLibraryPUTRequest(); scriptLibraryPUTRequest.setDescription(description); String scriptLibraryPUTRequestContent; @@ -211,10 +241,16 @@ public void updateScriptLibrary(String scriptLibraryName, InputStream contentInp try { functionLibraryManagementService.updateFunctionLibrary(scriptLibraryName, functionLibrary, ContextLoader.getTenantDomainFromContext()); + log.info("Script library updated successfully: " + scriptLibraryName + " for tenant: " + + ContextLoader.getTenantDomainFromContext()); } catch (FunctionLibraryManagementException e) { throw handleScriptLibraryError(e, Constants.ErrorMessage.ERROR_CODE_ERROR_UPDATING_SCRIPT_LIBRARY); } } else { + if (log.isDebugEnabled()) { + log.debug("Script library not found for update: " + scriptLibraryName + " for tenant: " + + ContextLoader.getTenantDomainFromContext()); + } throw handleScriptLibraryClientError(Constants.ErrorMessage.ERROR_SCRIPT_LIBRARY_NOT_FOUND, Response.Status.NOT_FOUND, scriptLibraryName, ContextLoader.getTenantDomainFromContext()); } @@ -229,6 +265,10 @@ public void updateScriptLibrary(String scriptLibraryName, InputStream contentInp */ public String getScriptLibraryContentByName(String scriptLibraryName) { + if (log.isDebugEnabled()) { + log.debug("Retrieving script library content for: " + scriptLibraryName + " for tenant: " + + ContextLoader.getTenantDomainFromContext()); + } if (isScriptLibraryAvailable(scriptLibraryName)) { try { FunctionLibrary functionLibrary = functionLibraryManagementService @@ -238,6 +278,10 @@ public String getScriptLibraryContentByName(String scriptLibraryName) { throw handleScriptLibraryError(e, Constants.ErrorMessage.ERROR_CODE_ERROR_RETRIEVING_SCRIPT_LIBRARY); } } else { + if (log.isDebugEnabled()) { + log.debug("Script library not found for content retrieval: " + scriptLibraryName + " for tenant: " + + ContextLoader.getTenantDomainFromContext()); + } throw handleScriptLibraryClientError(Constants.ErrorMessage.ERROR_SCRIPT_LIBRARY_NOT_FOUND, Response.Status.NOT_FOUND, scriptLibraryName, ContextLoader.getTenantDomainFromContext()); } @@ -250,13 +294,24 @@ public String getScriptLibraryContentByName(String scriptLibraryName) { */ public void deleteScriptLibrary(String scriptLibraryId) { + if (log.isDebugEnabled()) { + log.debug("Deleting script library: " + scriptLibraryId + " for tenant: " + + ContextLoader.getTenantDomainFromContext()); + } if (isScriptLibraryAvailable(scriptLibraryId)) { try { functionLibraryManagementService.deleteFunctionLibrary(scriptLibraryId, ContextLoader.getTenantDomainFromContext()); + log.info("Script library deleted successfully: " + scriptLibraryId + " for tenant: " + + ContextLoader.getTenantDomainFromContext()); } catch (FunctionLibraryManagementException e) { throw handleScriptLibraryError(e, Constants.ErrorMessage.ERROR_CODE_ERROR_DELETING_SCRIPT_LIBRARY); } + } else { + if (log.isDebugEnabled()) { + log.debug("Script library not found for deletion: " + scriptLibraryId + " for tenant: " + + ContextLoader.getTenantDomainFromContext()); + } } } diff --git a/components/org.wso2.carbon.identity.api.server.script.library/org.wso2.carbon.identity.api.server.script.library.v1/src/main/java/org/wso2/carbon/identity/api/server/script/library/v1/factories/ServerScriptLibrariesServiceFactory.java b/components/org.wso2.carbon.identity.api.server.script.library/org.wso2.carbon.identity.api.server.script.library.v1/src/main/java/org/wso2/carbon/identity/api/server/script/library/v1/factories/ServerScriptLibrariesServiceFactory.java index 7dcfa0e7da..076c696126 100644 --- a/components/org.wso2.carbon.identity.api.server.script.library/org.wso2.carbon.identity.api.server.script.library.v1/src/main/java/org/wso2/carbon/identity/api/server/script/library/v1/factories/ServerScriptLibrariesServiceFactory.java +++ b/components/org.wso2.carbon.identity.api.server.script.library/org.wso2.carbon.identity.api.server.script.library.v1/src/main/java/org/wso2/carbon/identity/api/server/script/library/v1/factories/ServerScriptLibrariesServiceFactory.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.script.library.v1.factories; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.script.library.common.ScriptLibraryServiceHolder; import org.wso2.carbon.identity.api.server.script.library.v1.core.ServerScriptLibrariesService; import org.wso2.carbon.identity.functions.library.mgt.FunctionLibraryManagementService; @@ -27,17 +29,23 @@ */ public class ServerScriptLibrariesServiceFactory { + private static final Log log = LogFactory.getLog(ServerScriptLibrariesServiceFactory.class); private static final ServerScriptLibrariesService SERVICE; static { + if (log.isDebugEnabled()) { + log.debug("Initializing ServerScriptLibrariesServiceFactory."); + } FunctionLibraryManagementService functionLibraryManagementService = ScriptLibraryServiceHolder .getScriptLibraryManagementService(); if (functionLibraryManagementService == null) { + log.error("FunctionLibraryManagementService is not available from OSGi context."); throw new IllegalStateException("FunctionLibraryManagementService is not available from OSGi context."); } SERVICE = new ServerScriptLibrariesService(functionLibraryManagementService); + log.info("ServerScriptLibrariesService initialized successfully."); } /** diff --git a/components/org.wso2.carbon.identity.api.server.script.library/org.wso2.carbon.identity.api.server.script.library.v1/src/main/java/org/wso2/carbon/identity/api/server/script/library/v1/impl/ScriptLibrariesApiServiceImpl.java b/components/org.wso2.carbon.identity.api.server.script.library/org.wso2.carbon.identity.api.server.script.library.v1/src/main/java/org/wso2/carbon/identity/api/server/script/library/v1/impl/ScriptLibrariesApiServiceImpl.java index 6424ae0171..cc908d57ec 100644 --- a/components/org.wso2.carbon.identity.api.server.script.library/org.wso2.carbon.identity.api.server.script.library.v1/src/main/java/org/wso2/carbon/identity/api/server/script/library/v1/impl/ScriptLibrariesApiServiceImpl.java +++ b/components/org.wso2.carbon.identity.api.server.script.library/org.wso2.carbon.identity.api.server.script.library.v1/src/main/java/org/wso2/carbon/identity/api/server/script/library/v1/impl/ScriptLibrariesApiServiceImpl.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.script.library.v1.impl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.cxf.jaxrs.ext.multipart.Attachment; import org.wso2.carbon.identity.api.server.common.ContextLoader; import org.wso2.carbon.identity.api.server.common.error.APIError; @@ -46,6 +48,7 @@ */ public class ScriptLibrariesApiServiceImpl implements ScriptLibrariesApiService { + private static final Log log = LogFactory.getLog(ScriptLibrariesApiServiceImpl.class); private final ServerScriptLibrariesService serverScriptLibrariesService; public ScriptLibrariesApiServiceImpl() { @@ -61,12 +64,16 @@ public ScriptLibrariesApiServiceImpl() { public Response addScriptLibrary(String name, InputStream contentInputStream, Attachment contentDetail, String description) { + if (log.isDebugEnabled()) { + log.debug("Adding script library: " + name); + } serverScriptLibrariesService.addScriptLibrary(name, contentInputStream, description); try { URI location = ContextLoader.buildURIForHeader(V1_API_PATH_COMPONENT + SCRIPT_LIBRARY_PATH_COMPONENT + "/" + URLEncoder.encode(name, StandardCharsets.UTF_8.name()) .replace("+", "%20")); + log.info("Script library successfully added: " + name); return Response.created(location).build(); } catch (UnsupportedEncodingException e) { ErrorResponse errorResponse = @@ -81,13 +88,20 @@ public Response addScriptLibrary(String name, InputStream contentInputStream, At @Override public Response deleteScriptLibrary(String scriptLibraryName) { + if (log.isDebugEnabled()) { + log.debug("Deleting script library: " + scriptLibraryName); + } serverScriptLibrariesService.deleteScriptLibrary(scriptLibraryName); + log.info("Script library successfully deleted: " + scriptLibraryName); return Response.noContent().build(); } @Override public Response getScriptLibraries(Integer limit, Integer offset) { + if (log.isDebugEnabled()) { + log.debug("Retrieving script libraries with limit: " + limit + " and offset: " + offset); + } ScriptLibraryListResponse scriptLibraryListResponse = serverScriptLibrariesService.getScriptLibraries(limit, offset); return Response.ok().entity(scriptLibraryListResponse).build(); @@ -96,6 +110,9 @@ public Response getScriptLibraries(Integer limit, Integer offset) { @Override public Response getScriptLibraryByName(String scriptLibraryName) { + if (log.isDebugEnabled()) { + log.debug("Retrieving script library by name: " + scriptLibraryName); + } ScriptLibraryResponse scriptLibraryResponse = serverScriptLibrariesService.getScriptLibrary(scriptLibraryName); return Response.ok().entity(scriptLibraryResponse).build(); } @@ -103,6 +120,9 @@ public Response getScriptLibraryByName(String scriptLibraryName) { @Override public Response getScriptLibraryContentByName(String scriptLibraryName) { + if (log.isDebugEnabled()) { + log.debug("Retrieving script library content for: " + scriptLibraryName); + } return Response.ok().entity(serverScriptLibrariesService.getScriptLibraryContentByName(scriptLibraryName)) .build(); } @@ -111,7 +131,11 @@ public Response getScriptLibraryContentByName(String scriptLibraryName) { public Response updateScriptLibrary(String scriptLibraryName, InputStream contentInputStream, Attachment contentDetail, String description) { + if (log.isDebugEnabled()) { + log.debug("Updating script library: " + scriptLibraryName); + } serverScriptLibrariesService.updateScriptLibrary(scriptLibraryName, contentInputStream, description); + log.info("Script library successfully updated: " + scriptLibraryName); return Response.ok().build(); } } diff --git a/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.common/src/main/java/org/wso2/carbon/identity/api/server/secret/management/common/SecretManagementServiceHolder.java b/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.common/src/main/java/org/wso2/carbon/identity/api/server/secret/management/common/SecretManagementServiceHolder.java index c2c7ab0672..7502169d39 100644 --- a/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.common/src/main/java/org/wso2/carbon/identity/api/server/secret/management/common/SecretManagementServiceHolder.java +++ b/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.common/src/main/java/org/wso2/carbon/identity/api/server/secret/management/common/SecretManagementServiceHolder.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.secret.management.common; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.identity.secret.mgt.core.SecretManager; @@ -26,6 +28,8 @@ */ public class SecretManagementServiceHolder { + private static final Log log = LogFactory.getLog(SecretManagementServiceHolder.class); + private SecretManagementServiceHolder() { } @@ -43,6 +47,13 @@ private static class SecretManagerServiceHolder { */ public static SecretManager getSecretConfigManager() { - return SecretManagerServiceHolder.SERVICE; + if (log.isDebugEnabled()) { + log.debug("Retrieving SecretManager OSGi service."); + } + SecretManager secretManager = SecretManagerServiceHolder.SERVICE; + if (secretManager == null) { + log.warn("SecretManager OSGi service is not available."); + } + return secretManager; } } diff --git a/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.common/src/main/java/org/wso2/carbon/identity/api/server/secret/management/common/Utils.java b/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.common/src/main/java/org/wso2/carbon/identity/api/server/secret/management/common/Utils.java index faae020006..6715b9fd9e 100644 --- a/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.common/src/main/java/org/wso2/carbon/identity/api/server/secret/management/common/Utils.java +++ b/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.common/src/main/java/org/wso2/carbon/identity/api/server/secret/management/common/Utils.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.secret.management.common; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.slf4j.MDC; import java.util.UUID; @@ -29,6 +31,8 @@ */ public class Utils { + private static final Log log = LogFactory.getLog(Utils.class); + /** * Get correlation id of current thread. * @@ -37,10 +41,17 @@ public class Utils { public static String getCorrelation() { if (isCorrelationIDPresent()) { - - return MDC.get(CORRELATION_ID_MDC); + String correlationId = MDC.get(CORRELATION_ID_MDC); + if (log.isDebugEnabled()) { + log.debug("Retrieved existing correlation ID from MDC."); + } + return correlationId; } - return UUID.randomUUID().toString(); + String newCorrelationId = UUID.randomUUID().toString(); + if (log.isDebugEnabled()) { + log.debug("Generated new correlation ID as none was found in MDC."); + } + return newCorrelationId; } /** @@ -50,6 +61,10 @@ public static String getCorrelation() { */ public static boolean isCorrelationIDPresent() { - return MDC.get(CORRELATION_ID_MDC) != null; + boolean isPresent = MDC.get(CORRELATION_ID_MDC) != null; + if (log.isDebugEnabled()) { + log.debug("Correlation ID presence in MDC: " + isPresent); + } + return isPresent; } } diff --git a/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/core/SecretManagementService.java b/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/core/SecretManagementService.java index 150915d72b..4c220762a8 100644 --- a/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/core/SecretManagementService.java +++ b/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/core/SecretManagementService.java @@ -40,8 +40,10 @@ import javax.ws.rs.core.Response; -import static org.wso2.carbon.identity.secret.mgt.core.constant.SecretConstants.ErrorMessages.ERROR_CODE_SECRET_ALREADY_EXISTS; -import static org.wso2.carbon.identity.secret.mgt.core.constant.SecretConstants.ErrorMessages.ERROR_CODE_SECRET_DOES_NOT_EXISTS; +import static org.wso2.carbon.identity.secret.mgt.core.constant.SecretConstants.ErrorMessages. + ERROR_CODE_SECRET_ALREADY_EXISTS; +import static org.wso2.carbon.identity.secret.mgt.core.constant.SecretConstants.ErrorMessages. + ERROR_CODE_SECRET_DOES_NOT_EXISTS; /** * Invoke internal OSGi service to perform secret management operations. @@ -66,10 +68,16 @@ public SecretManagementService(SecretManager secretManager) { public SecretResponse addSecret(String secretType, SecretAddRequest secretAddRequest) { validateSecretAddRequest(secretAddRequest); + if (log.isDebugEnabled()) { + log.debug("Adding secret for type: " + secretType + " with name: " + + secretAddRequest.getName()); + } Secret requestDTO, responseDTO; try { requestDTO = buildSecretRequestDTOFromSecretAddRequest(secretAddRequest); responseDTO = secretManager.addSecret(secretType, requestDTO); + log.info("Secret added successfully for type: " + secretType + " with name: " + + secretAddRequest.getName()); } catch (SecretManagementException e) { throw handleSecretMgtException(e, SecretManagementConstants.ErrorMessage.ERROR_CODE_ERROR_ADDING_SECRET, secretAddRequest.getName()); @@ -102,6 +110,10 @@ private SecretResponse buildSecretResponseFromResponseDTO(Secret responseDTO) { */ private void validateSecretAddRequest(SecretAddRequest secretAddRequest) { + if (secretAddRequest == null) { + throw handleException(Response.Status.BAD_REQUEST, SecretManagementConstants.ErrorMessage. + ERROR_CODE_INVALID_INPUT, null); + } String secretAddName = secretAddRequest.getName(); if (StringUtils.isBlank(secretAddName)) { throw handleException(Response.Status.BAD_REQUEST, SecretManagementConstants.ErrorMessage. @@ -136,8 +148,12 @@ private Secret buildSecretRequestDTOFromSecretAddRequest(SecretAddRequest secret */ public void deleteSecret(String secretType, String name) { + if (log.isDebugEnabled()) { + log.debug("Deleting secret for type: " + secretType + " with name: " + name); + } try { secretManager.deleteSecret(secretType, name); + log.info("Secret deleted successfully for type: " + secretType + " with name: " + name); } catch (SecretManagementException e) { throw handleSecretMgtException(e, SecretManagementConstants.ErrorMessage. ERROR_CODE_ERROR_DELETING_SECRET, name); @@ -153,6 +169,9 @@ public void deleteSecret(String secretType, String name) { */ public SecretResponse getSecret(String secretType, String name) { + if (log.isDebugEnabled()) { + log.debug("Retrieving secret for type: " + secretType + " with name: " + name); + } try { Secret responseDTO = secretManager.getSecret(secretType, name); SecretResponse secretResponse = new SecretResponse(); diff --git a/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/core/SecretTypeManagementService.java b/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/core/SecretTypeManagementService.java index 6b05f8abf7..fcceb9dbc8 100644 --- a/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/core/SecretTypeManagementService.java +++ b/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/core/SecretTypeManagementService.java @@ -35,8 +35,10 @@ import javax.ws.rs.core.Response; -import static org.wso2.carbon.identity.secret.mgt.core.constant.SecretConstants.ErrorMessages.ERROR_CODE_SECRET_TYPE_ALREADY_EXISTS; -import static org.wso2.carbon.identity.secret.mgt.core.constant.SecretConstants.ErrorMessages.ERROR_CODE_SECRET_TYPE_DOES_NOT_EXISTS; +import static org.wso2.carbon.identity.secret.mgt.core.constant.SecretConstants.ErrorMessages. + ERROR_CODE_SECRET_TYPE_ALREADY_EXISTS; +import static org.wso2.carbon.identity.secret.mgt.core.constant.SecretConstants.ErrorMessages. + ERROR_CODE_SECRET_TYPE_DOES_NOT_EXISTS; /** * Invoke internal OSGi service to perform secret type management operations. @@ -44,7 +46,7 @@ public class SecretTypeManagementService { private final SecretManager secretManager; - private static final Log log = LogFactory.getLog(SecretManagementService.class); + private static final Log log = LogFactory.getLog(SecretTypeManagementService.class); public SecretTypeManagementService(SecretManager secretManager) { @@ -60,10 +62,15 @@ public SecretTypeManagementService(SecretManager secretManager) { public SecretTypeResponse addSecretType(SecretTypeAddRequest secretTypeAddRequest) { validateSecretTypeAddRequest(secretTypeAddRequest); + if (log.isDebugEnabled()) { + log.debug("Adding secret type with name: " + + secretTypeAddRequest.getName()); + } SecretType requestDTO, responseDTO; try { requestDTO = buildSecretTypeRequestDTOFromSecretTypeAddRequest(secretTypeAddRequest); responseDTO = secretManager.addSecretType(requestDTO); + log.info("Secret type added successfully with name: " + secretTypeAddRequest.getName()); } catch (SecretManagementException e) { throw handleSecretMgtException(e, SecretManagementConstants.ErrorMessage.ERROR_CODE_ERROR_ADDING_SECRET, secretTypeAddRequest.getName()); @@ -93,6 +100,10 @@ private SecretTypeResponse buildSecretTypeResponseFromResponseDTO(SecretType sec */ private void validateSecretTypeAddRequest(SecretTypeAddRequest secretTypeAddRequest) { + if (secretTypeAddRequest == null) { + throw handleException(Response.Status.BAD_REQUEST, SecretManagementConstants.ErrorMessage. + ERROR_CODE_INVALID_INPUT, null); + } String secretAddName = secretTypeAddRequest.getName(); if (StringUtils.isBlank(secretAddName)) { throw handleException(Response.Status.BAD_REQUEST, SecretManagementConstants.ErrorMessage. @@ -121,8 +132,12 @@ private SecretType buildSecretTypeRequestDTOFromSecretTypeAddRequest(SecretTypeA */ public void deleteSecretType(String secretTypeName) { + if (log.isDebugEnabled()) { + log.debug("Deleting secret type with name: " + secretTypeName); + } try { secretManager.deleteSecretType(secretTypeName); + log.info("Secret type deleted successfully with name: " + secretTypeName); } catch (SecretManagementException e) { throw handleSecretMgtException(e, SecretManagementConstants.ErrorMessage. ERROR_CODE_ERROR_DELETING_SECRET, secretTypeName); @@ -137,6 +152,9 @@ public void deleteSecretType(String secretTypeName) { */ public SecretTypeResponse getSecretType(String secretTypeName) { + if (log.isDebugEnabled()) { + log.debug("Retrieving secret type with name: " + secretTypeName); + } try { SecretType responseDTO = secretManager.getSecretType(secretTypeName); SecretTypeResponse secretTypeResponse = new SecretTypeResponse(); diff --git a/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/factories/SecretManagementServiceFactory.java b/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/factories/SecretManagementServiceFactory.java index e21bd9f6dd..0fae73b335 100644 --- a/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/factories/SecretManagementServiceFactory.java +++ b/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/factories/SecretManagementServiceFactory.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.secret.management.v1.factories; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.identity.api.server.secret.management.v1.core.SecretManagementService; import org.wso2.carbon.identity.secret.mgt.core.SecretManager; @@ -27,6 +29,7 @@ */ public class SecretManagementServiceFactory { + private static final Log log = LogFactory.getLog(SecretManagementServiceFactory.class); private static final SecretManagementService SERVICE; static { @@ -34,10 +37,14 @@ public class SecretManagementServiceFactory { .getOSGiService(SecretManager.class, null); if (secretManager == null) { + log.error("SecretManager is not available from OSGi context."); throw new IllegalStateException("SecretManager is not available from OSGi context."); } SERVICE = new SecretManagementService(secretManager); + if (log.isDebugEnabled()) { + log.debug("SecretManagementService factory initialized successfully."); + } } /** diff --git a/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/factories/SecretTypeManagementServiceFactory.java b/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/factories/SecretTypeManagementServiceFactory.java index f3385d5f87..2db303c75b 100644 --- a/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/factories/SecretTypeManagementServiceFactory.java +++ b/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/factories/SecretTypeManagementServiceFactory.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.secret.management.v1.factories; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.identity.api.server.secret.management.v1.core.SecretTypeManagementService; import org.wso2.carbon.identity.secret.mgt.core.SecretManager; @@ -27,6 +29,7 @@ */ public class SecretTypeManagementServiceFactory { + private static final Log log = LogFactory.getLog(SecretTypeManagementServiceFactory.class); private static final SecretTypeManagementService SERVICE; static { @@ -34,10 +37,14 @@ public class SecretTypeManagementServiceFactory { .getOSGiService(SecretManager.class, null); if (secretManager == null) { + log.error("SecretManager is not available from OSGi context."); throw new IllegalStateException("SecretManager is not available from OSGi context."); } SERVICE = new SecretTypeManagementService(secretManager); + if (log.isDebugEnabled()) { + log.debug("SecretTypeManagementService factory initialized successfully."); + } } /** diff --git a/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/impl/SecretTypeApiServiceImpl.java b/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/impl/SecretTypeApiServiceImpl.java index d278cb529c..0c52b0160d 100644 --- a/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/impl/SecretTypeApiServiceImpl.java +++ b/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/impl/SecretTypeApiServiceImpl.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.secret.management.v1.impl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.common.ContextLoader; import org.wso2.carbon.identity.api.server.secret.management.v1.SecretTypeApiService; import org.wso2.carbon.identity.api.server.secret.management.v1.core.SecretTypeManagementService; @@ -30,21 +32,28 @@ import javax.ws.rs.core.Response; -import static org.wso2.carbon.identity.api.server.secret.management.common.SecretManagementConstants.SECRET_TYPE_CONTEXT_PATH; -import static org.wso2.carbon.identity.api.server.secret.management.common.SecretManagementConstants.V1_API_PATH_COMPONENT; +import static org.wso2.carbon.identity.api.server.secret.management.common.SecretManagementConstants. + SECRET_TYPE_CONTEXT_PATH; +import static org.wso2.carbon.identity.api.server.secret.management.common.SecretManagementConstants. + V1_API_PATH_COMPONENT; /** * Implementation of Secret Type Management REST API. */ public class SecretTypeApiServiceImpl implements SecretTypeApiService { + private static final Log log = LogFactory.getLog(SecretTypeApiServiceImpl.class); private final SecretTypeManagementService secretTypeManagementService; public SecretTypeApiServiceImpl() { try { this.secretTypeManagementService = SecretTypeManagementServiceFactory.getSecretTypeManagementService(); + if (log.isDebugEnabled()) { + log.debug("SecretTypeManagementService initialized successfully."); + } } catch (IllegalStateException e) { + log.error("Error occurred while initiating SecretTypeManagementService.", e); throw new RuntimeException("Error occurred while initiating SecretTypeManagementService.", e); } } @@ -52,28 +61,50 @@ public SecretTypeApiServiceImpl() { @Override public Response createSecretType(SecretTypeAddRequest secretTypeAddRequest) { + if (log.isDebugEnabled()) { + log.debug("Creating secret type with name: " + + (secretTypeAddRequest != null ? secretTypeAddRequest.getName() : "null")); + } + if (secretTypeAddRequest == null) { + throw new IllegalArgumentException("SecretTypeAddRequest cannot be null"); + } SecretTypeResponse secretType = secretTypeManagementService.addSecretType(secretTypeAddRequest); URI location = ContextLoader.buildURIForHeader(V1_API_PATH_COMPONENT + SECRET_TYPE_CONTEXT_PATH + "/" + secretType.getName()); + if (log.isDebugEnabled()) { + log.debug("Secret type created successfully with name: " + secretType.getName()); + } return Response.created(location).entity(secretType).build(); } @Override public Response deleteSecretType(String name) { + if (log.isDebugEnabled()) { + log.debug("Deleting secret type with name: " + name); + } secretTypeManagementService.deleteSecretType(name); + if (log.isDebugEnabled()) { + log.debug("Secret type deleted successfully with name: " + name); + } return Response.noContent().build(); } @Override public Response getSecretType(String name) { + if (log.isDebugEnabled()) { + log.debug("Retrieving secret type with name: " + name); + } return Response.ok().entity(secretTypeManagementService.getSecretType(name)).build(); } @Override public Response updateSecretType(String name, SecretTypeUpdateRequest secretTypeUpdateRequest) { + if (log.isDebugEnabled()) { + log.debug("Updating secret type with name: " + name); + } return Response.ok().entity(secretTypeManagementService .updateTypeSecret(name, secretTypeUpdateRequest)).build(); } diff --git a/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/impl/SecretsApiServiceImpl.java b/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/impl/SecretsApiServiceImpl.java index c3db8edf91..363af984e5 100644 --- a/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/impl/SecretsApiServiceImpl.java +++ b/components/org.wso2.carbon.identity.api.server.secret.management/org.wso2.carbon.identity.api.server.secret.management.v1/src/main/java/org/wso2/carbon/identity/api/server/secret/management/v1/impl/SecretsApiServiceImpl.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.secret.management.v1.impl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.common.ContextLoader; import org.wso2.carbon.identity.api.server.secret.management.v1.SecretsApiService; import org.wso2.carbon.identity.api.server.secret.management.v1.core.SecretManagementService; @@ -31,21 +33,28 @@ import javax.ws.rs.core.Response; -import static org.wso2.carbon.identity.api.server.secret.management.common.SecretManagementConstants.SECRET_CONTEXT_PATH; -import static org.wso2.carbon.identity.api.server.secret.management.common.SecretManagementConstants.V1_API_PATH_COMPONENT; +import static org.wso2.carbon.identity.api.server.secret.management.common.SecretManagementConstants. + SECRET_CONTEXT_PATH; +import static org.wso2.carbon.identity.api.server.secret.management.common.SecretManagementConstants. + V1_API_PATH_COMPONENT; /** * Implementation of Secret Management REST API. */ public class SecretsApiServiceImpl implements SecretsApiService { + private static final Log log = LogFactory.getLog(SecretsApiServiceImpl.class); private final SecretManagementService secretManagementService; public SecretsApiServiceImpl() { try { this.secretManagementService = SecretManagementServiceFactory.getSecretManagementService(); + if (log.isDebugEnabled()) { + log.debug("SecretManagementService initialized successfully."); + } } catch (IllegalStateException e) { + log.error("Error occurred while initiating SecretManagementService.", e); throw new RuntimeException("Error occurred while initiating SecretManagementService.", e); } } @@ -53,9 +62,19 @@ public SecretsApiServiceImpl() { @Override public Response createSecret(String secretType, SecretAddRequest secretAddRequest) { + if (log.isDebugEnabled()) { + log.debug("Creating secret with type: " + secretType + " and name: " + + (secretAddRequest != null ? secretAddRequest.getName() : "null")); + } + if (secretAddRequest == null) { + throw new IllegalArgumentException("SecretAddRequest cannot be null"); + } SecretResponse secretResponse = secretManagementService.addSecret(secretType, secretAddRequest); URI location = ContextLoader.buildURIForHeader(V1_API_PATH_COMPONENT + SECRET_CONTEXT_PATH + "/" + secretResponse.getSecretName()); + if (log.isDebugEnabled()) { + log.debug("Secret created successfully with name: " + secretResponse.getSecretName()); + } return Response.created(location).entity(secretResponse).build(); } @@ -63,31 +82,49 @@ public Response createSecret(String secretType, SecretAddRequest secretAddReques @Override public Response deleteSecret(String secretType, String name) { + if (log.isDebugEnabled()) { + log.debug("Deleting secret with type: " + secretType + " and name: " + name); + } secretManagementService.deleteSecret(secretType, name); + if (log.isDebugEnabled()) { + log.debug("Secret deleted successfully with name: " + name); + } return Response.noContent().build(); } @Override public Response getSecret(String secretType, String name) { + if (log.isDebugEnabled()) { + log.debug("Retrieving secret with type: " + secretType + " and name: " + name); + } return Response.ok().entity(secretManagementService.getSecret(secretType, name)).build(); } @Override public Response getSecretsList(String secretType) { + if (log.isDebugEnabled()) { + log.debug("Retrieving secrets list for type: " + secretType); + } return Response.ok().entity(secretManagementService.getSecretsList(secretType)).build(); } @Override public Response patchSecret(String secretType, String name, SecretPatchRequest secretPatchRequest) { + if (log.isDebugEnabled()) { + log.debug("Patching secret with type: " + secretType + " and name: " + name); + } return Response.ok().entity(secretManagementService.patchSecret(secretType, name, secretPatchRequest)).build(); } @Override public Response updateSecret(String secretType, String name, SecretUpdateRequest secretUpdateRequest) { + if (log.isDebugEnabled()) { + log.debug("Updating secret with type: " + secretType + " and name: " + name); + } return Response.ok() .entity(secretManagementService.updateSecret(secretType, name, secretUpdateRequest)).build(); } diff --git a/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.common/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/common/TenantManagementServiceHolder.java b/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.common/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/common/TenantManagementServiceHolder.java index 440069ec97..d4dda5d482 100644 --- a/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.common/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/common/TenantManagementServiceHolder.java +++ b/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.common/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/common/TenantManagementServiceHolder.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.tenant.management.common; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.tenant.mgt.services.TenantMgtService; import org.wso2.carbon.user.core.service.RealmService; @@ -27,6 +29,8 @@ */ public class TenantManagementServiceHolder { + private static final Log log = LogFactory.getLog(TenantManagementServiceHolder.class); + private TenantManagementServiceHolder() { } @@ -50,6 +54,12 @@ private static class RealmServiceHolder { */ public static TenantMgtService getTenantMgtService() { + if (log.isDebugEnabled()) { + log.debug("Retrieving TenantMgtService from OSGi service registry."); + } + if (TenantMgtServiceHolder.SERVICE == null) { + log.warn("TenantMgtService is not available from OSGi service registry."); + } return TenantMgtServiceHolder.SERVICE; } @@ -60,6 +70,12 @@ public static TenantMgtService getTenantMgtService() { */ public static RealmService getRealmService() { + if (log.isDebugEnabled()) { + log.debug("Retrieving RealmService from OSGi service registry."); + } + if (RealmServiceHolder.SERVICE == null) { + log.warn("RealmService is not available from OSGi service registry."); + } return RealmServiceHolder.SERVICE; } } diff --git a/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.v1/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/v1/core/ServerTenantManagementService.java b/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.v1/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/v1/core/ServerTenantManagementService.java index 8da0f5c0c7..a6a8783c01 100644 --- a/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.v1/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/v1/core/ServerTenantManagementService.java +++ b/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.v1/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/v1/core/ServerTenantManagementService.java @@ -104,11 +104,21 @@ public ServerTenantManagementService(TenantMgtService tenantMgtService, RealmSer */ public String addTenant(TenantModel tenantModel) { + if (log.isDebugEnabled()) { + log.debug("Adding tenant for domain: " + (tenantModel != null ? tenantModel.getDomain() : null)); + } + if (tenantModel == null) { + throw handleTenantManagementException(new TenantManagementClientException( + "Tenant model cannot be null", "40001"), + TenantManagementConstants.ErrorMessage.ERROR_CODE_ERROR_ADDING_TENANT, null); + } String resourceId; try { Tenant tenant = createTenantInfoBean(tenantModel); resourceId = tenantMgtService.addTenant(tenant); + log.info("Tenant added successfully with resource ID: " + resourceId); } catch (TenantMgtException e) { + log.error("Error adding tenant: " + tenantModel.getDomain(), e); throw handleTenantManagementException(e, TenantManagementConstants.ErrorMessage .ERROR_CODE_ERROR_ADDING_TENANT, null); } @@ -128,11 +138,19 @@ public String addTenant(TenantModel tenantModel) { public TenantsListResponse listTenants(Integer limit, Integer offset, String sortOrder, String sortBy, String filter) { + if (log.isDebugEnabled()) { + log.debug("Listing tenants with limit: " + limit + ", offset: " + offset + ", filter: " + filter); + } try { TenantSearchResult tenantSearchResult = tenantMgtService.listTenants(limit, offset, sortOrder, sortBy, filter); - return createTenantListResponse(tenantSearchResult); + TenantsListResponse response = createTenantListResponse(tenantSearchResult); + if (log.isDebugEnabled()) { + log.debug("Listed " + response.getCount() + " tenants successfully"); + } + return response; } catch (TenantMgtException e) { + log.error("Error listing tenants with filter: " + filter, e); throw handleTenantManagementException(e, TenantManagementConstants.ErrorMessage .ERROR_CODE_ERROR_LISTING_TENANTS, null); } @@ -146,10 +164,14 @@ public TenantsListResponse listTenants(Integer limit, Integer offset, String sor */ public TenantResponseModel getTenant(String tenantUniqueID) { + if (log.isDebugEnabled()) { + log.debug("Retrieving tenant by ID: " + tenantUniqueID); + } try { Tenant tenant = tenantMgtService.getTenant(tenantUniqueID); return createTenantResponse(tenant); } catch (TenantMgtException e) { + log.error("Error retrieving tenant by ID: " + tenantUniqueID, e); throw handleTenantManagementException(e, TenantManagementConstants.ErrorMessage. ERROR_CODE_ERROR_RETRIEVING_TENANT, tenantUniqueID); } @@ -163,10 +185,14 @@ public TenantResponseModel getTenant(String tenantUniqueID) { */ public TenantResponseModel getTenantByDomain(String domain) { + if (log.isDebugEnabled()) { + log.debug("Retrieving tenant by domain: " + domain); + } try { Tenant tenant = tenantMgtService.getTenantByDomain(domain); return createTenantResponse(tenant); } catch (TenantMgtException e) { + log.error("Error retrieving tenant by domain: " + domain, e); throw handleTenantManagementException(e, TenantManagementConstants.ErrorMessage. ERROR_CODE_ERROR_RETRIEVING_TENANT, domain); } @@ -180,9 +206,17 @@ public TenantResponseModel getTenantByDomain(String domain) { */ public boolean isDomainAvailable(String tenantDomain) { + if (log.isDebugEnabled()) { + log.debug("Checking domain availability for: " + tenantDomain); + } try { - return tenantMgtService.isDomainAvailable(tenantDomain); + boolean available = tenantMgtService.isDomainAvailable(tenantDomain); + if (log.isDebugEnabled()) { + log.debug("Domain " + tenantDomain + " is " + (available ? "available" : "not available")); + } + return available; } catch (TenantMgtException e) { + log.error("Error checking domain availability for: " + tenantDomain, e); throw handleTenantManagementException(e, TenantManagementConstants.ErrorMessage. ERROR_CODE_ERROR_RETRIEVING_TENANT, tenantDomain); } @@ -196,10 +230,14 @@ public boolean isDomainAvailable(String tenantDomain) { */ public List getOwners(String tenantUniqueID) { + if (log.isDebugEnabled()) { + log.debug("Retrieving owners for tenant ID: " + tenantUniqueID); + } try { User user = tenantMgtService.getOwner(tenantUniqueID); return createOwnerResponse(user); } catch (TenantMgtException e) { + log.error("Error retrieving owners for tenant ID: " + tenantUniqueID, e); throw handleTenantManagementException(e, TenantManagementConstants.ErrorMessage. ERROR_CODE_ERROR_RETRIEVING_TENANT, tenantUniqueID); } @@ -207,6 +245,9 @@ public List getOwners(String tenantUniqueID) { public OwnerInfoResponse getOwner(String tenantUniqueID, String ownerID, String additionalClaims) { + if (log.isDebugEnabled()) { + log.debug("Retrieving owner info for tenant ID: " + tenantUniqueID + ", owner ID: " + ownerID); + } try { Tenant tenant = tenantMgtService.getTenant(tenantUniqueID); validateTenantOwnerId(tenant, ownerID); @@ -214,6 +255,7 @@ public OwnerInfoResponse getOwner(String tenantUniqueID, String ownerID, String String[] claimsList = StringUtils.split(additionalClaims, ","); return createOwnerInfoResponse(tenant, claimsList); } catch (TenantMgtException e) { + log.error("Error retrieving owner info for tenant ID: " + tenantUniqueID + ", owner ID: " + ownerID, e); throw handleTenantManagementException(e, TenantManagementConstants.ErrorMessage. ERROR_CODE_ERROR_RETRIEVING_OWNER, tenantUniqueID); } @@ -221,6 +263,14 @@ public OwnerInfoResponse getOwner(String tenantUniqueID, String ownerID, String public void updateOwner(String tenantUniqueID, String ownerID, OwnerPutModel ownerPutModel) { + if (log.isDebugEnabled()) { + log.debug("Updating owner for tenant ID: " + tenantUniqueID + ", owner ID: " + ownerID); + } + if (ownerPutModel == null) { + throw handleTenantManagementException(new TenantManagementClientException( + "Owner put model cannot be null", "40001"), + TenantManagementConstants.ErrorMessage.ERROR_CODE_ERROR_UPDATING_OWNER, null); + } try { Tenant tenant = tenantMgtService.getTenant(tenantUniqueID); validateTenantOwnerId(tenant, ownerID); @@ -228,7 +278,9 @@ public void updateOwner(String tenantUniqueID, String ownerID, OwnerPutModel own createTenantInfoBean(tenant, ownerPutModel); tenantMgtService.updateOwner(tenant); + log.info("Owner updated successfully for tenant ID: " + tenantUniqueID); } catch (TenantMgtException e) { + log.error("Error updating owner for tenant ID: " + tenantUniqueID + ", owner ID: " + ownerID, e); throw handleTenantManagementException(e, TenantManagementConstants.ErrorMessage. ERROR_CODE_ERROR_UPDATING_OWNER, tenantUniqueID); } @@ -241,9 +293,14 @@ public void updateOwner(String tenantUniqueID, String ownerID, OwnerPutModel own */ public void deleteTenantMetadata(String tenantUniqueID) { + if (log.isDebugEnabled()) { + log.debug("Deleting tenant metadata for tenant ID: " + tenantUniqueID); + } try { tenantMgtService.deleteTenantMetaData(tenantUniqueID); + log.info("Tenant metadata deleted successfully for tenant ID: " + tenantUniqueID); } catch (TenantMgtException e) { + log.error("Error deleting tenant metadata for tenant ID: " + tenantUniqueID, e); throw handleTenantManagementException(e, TenantManagementConstants.ErrorMessage. ERROR_CODE_DELETE_TENANT_METADATA, tenantUniqueID); } @@ -258,14 +315,26 @@ public void deleteTenantMetadata(String tenantUniqueID) { */ public String updateTenantStatus(String tenantUniqueID, TenantPutModel tenantPutModel) { + if (tenantPutModel == null) { + throw handleTenantManagementException(new TenantManagementClientException( + "Tenant put model cannot be null", "40001"), + TenantManagementConstants.ErrorMessage.ERROR_CODE_UPDATE_LIFECYCLE_STATUS, null); + } boolean activated = tenantPutModel.getActivated(); + if (log.isDebugEnabled()) { + log.debug("Updating tenant status for tenant ID: " + tenantUniqueID + ", activated: " + activated); + } try { if (activated) { tenantMgtService.activateTenant(tenantUniqueID); + log.info("Tenant activated successfully: " + tenantUniqueID); } else { tenantMgtService.deactivateTenant(tenantUniqueID); + log.info("Tenant deactivated successfully: " + tenantUniqueID); } } catch (TenantMgtException e) { + log.error("Error updating tenant status for tenant ID: " + tenantUniqueID + + ", activated: " + activated, e); throw handleTenantManagementException(e, TenantManagementConstants.ErrorMessage. ERROR_CODE_UPDATE_LIFECYCLE_STATUS, String.valueOf(activated)); } @@ -305,7 +374,19 @@ private void createTenantInfoBean(Tenant tenant, OwnerPutModel ownerPutModel) { private void validateTenantOwnerId(Tenant tenant, String ownerID) { + if (log.isDebugEnabled()) { + log.debug("Validating tenant owner ID: " + ownerID + " for tenant: " + + (tenant != null ? tenant.getTenantUniqueID() : null)); + } + if (tenant == null) { + throw handleException(Response.Status.BAD_REQUEST, TenantManagementConstants.ErrorMessage. + ERROR_CODE_OWNER_NOT_FOUND, null); + } if (tenant.getAdminUserId() == null || !tenant.getAdminUserId().equals(ownerID)) { + if (log.isDebugEnabled()) { + log.debug("Owner validation failed - owner not found for tenant: " + + tenant.getTenantUniqueID()); + } throw handleException(Response.Status.BAD_REQUEST, TenantManagementConstants.ErrorMessage. ERROR_CODE_OWNER_NOT_FOUND, tenant.getTenantUniqueID()); } @@ -614,12 +695,24 @@ private static String includeData(TenantManagementConstants.ErrorMessage error, } public String addTenant(ChannelVerifiedTenantModel channelVerifiedTenantModel) { + if (log.isDebugEnabled()) { + log.debug("Adding channel verified tenant for domain: " + + (channelVerifiedTenantModel != null ? channelVerifiedTenantModel.getDomain() : null)); + } + if (channelVerifiedTenantModel == null) { + throw handleTenantManagementException(new TenantManagementClientException( + "Channel verified tenant model cannot be null", "40001"), + TenantManagementConstants.ErrorMessage.ERROR_CODE_ERROR_ADDING_TENANT, null); + } String resourceId; try { validateInputAgainstCode(channelVerifiedTenantModel); Tenant tenant = createTenantInfoBean(channelVerifiedTenantModel); resourceId = tenantMgtService.addTenant(tenant); + log.info("Channel verified tenant added successfully with resource ID: " + resourceId); } catch (TenantMgtException e) { + log.error("Error adding channel verified tenant: " + + channelVerifiedTenantModel.getDomain(), e); throw handleTenantManagementException(e, TenantManagementConstants.ErrorMessage .ERROR_CODE_ERROR_ADDING_TENANT, null); } @@ -635,10 +728,16 @@ private void validateInputAgainstCode(ChannelVerifiedTenantModel tenant) throws String code = tenant.getCode(); if (StringUtils.isBlank(code)) { + if (log.isDebugEnabled()) { + log.debug("Validation code is missing for tenant registration"); + } throw new TenantManagementClientException(ERROR_CODE_MISSING_REQUIRED_PARAMETER.getCode(), String.format(ERROR_CODE_MISSING_REQUIRED_PARAMETER.getMessage(), CODE)); } + if (log.isDebugEnabled()) { + log.debug("Validating tenant registration code"); + } UserRecoveryDataStore userRecoveryDataStore = JDBCRecoveryDataStore.getInstance(); // If the code is validated, the load method will return data. Otherwise method will throw exceptions. @@ -648,6 +747,9 @@ private void validateInputAgainstCode(ChannelVerifiedTenantModel tenant) throws tenant.getOwners().get(0) != null && tenant.getOwners().get(0).getEmail() != null && tenant.getOwners().get(0).getEmail().equalsIgnoreCase(recoveryData.getUser().getUserName())) { userRecoveryDataStore.invalidate(code); + if (log.isDebugEnabled()) { + log.debug("Code validation successful for tenant registration"); + } return; } else { // the confirmed email using the code and submitted emails are different. userRecoveryDataStore.invalidate(code); @@ -657,6 +759,7 @@ private void validateInputAgainstCode(ChannelVerifiedTenantModel tenant) throws } } catch (IdentityRecoveryException e) { + log.error("Error validating tenant registration code", e); throw handleException(Response.Status.UNAUTHORIZED, TenantManagementConstants.ErrorMessage .ERROR_CODE_ERROR_VALIDATING_TENANT_CODE, null); } diff --git a/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.v1/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/v1/factories/ServerTenantManagementServiceFactory.java b/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.v1/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/v1/factories/ServerTenantManagementServiceFactory.java index e470aed24a..169f03f420 100644 --- a/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.v1/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/v1/factories/ServerTenantManagementServiceFactory.java +++ b/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.v1/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/v1/factories/ServerTenantManagementServiceFactory.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.tenant.management.v1.factories; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.tenant.management.common.TenantManagementServiceHolder; import org.wso2.carbon.identity.api.server.tenant.management.v1.core.ServerTenantManagementService; import org.wso2.carbon.tenant.mgt.services.TenantMgtService; @@ -28,20 +30,27 @@ */ public class ServerTenantManagementServiceFactory { + private static final Log log = LogFactory.getLog(ServerTenantManagementServiceFactory.class); private static final ServerTenantManagementService SERVICE; static { + if (log.isDebugEnabled()) { + log.debug("Initializing ServerTenantManagementService factory"); + } TenantMgtService tenantMgtService = TenantManagementServiceHolder.getTenantMgtService(); RealmService realmService = TenantManagementServiceHolder.getRealmService(); if (tenantMgtService == null) { + log.error("TenantMgtService is not available from OSGi context"); throw new IllegalStateException("TenantMgtService is not available from OSGi context."); } if (realmService == null) { + log.error("RealmService is not available from OSGi context"); throw new IllegalStateException("RealmService is not available from OSGi context."); } SERVICE = new ServerTenantManagementService(tenantMgtService, realmService); + log.info("ServerTenantManagementService initialized successfully"); } /** diff --git a/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.v1/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/v1/impl/ChannelVerifiedTenantsApiServiceImpl.java b/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.v1/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/v1/impl/ChannelVerifiedTenantsApiServiceImpl.java index 162abb1c21..25ef8d2d30 100644 --- a/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.v1/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/v1/impl/ChannelVerifiedTenantsApiServiceImpl.java +++ b/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.v1/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/v1/impl/ChannelVerifiedTenantsApiServiceImpl.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.tenant.management.v1.impl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.common.Constants; import org.wso2.carbon.identity.api.server.common.ContextLoader; import org.wso2.carbon.identity.api.server.tenant.management.common.TenantManagementConstants; @@ -35,12 +37,17 @@ */ public class ChannelVerifiedTenantsApiServiceImpl implements ChannelVerifiedTenantsApiService { + private static final Log log = LogFactory.getLog(ChannelVerifiedTenantsApiServiceImpl.class); private final ServerTenantManagementService tenantManagementService; public ChannelVerifiedTenantsApiServiceImpl() { try { + if (log.isDebugEnabled()) { + log.debug("Initializing ChannelVerifiedTenantsApiServiceImpl"); + } this.tenantManagementService = ServerTenantManagementServiceFactory.getServerTenantManagementService(); } catch (IllegalStateException e) { + log.error("Error occurred while initiating ServerTenantManagementService", e); throw new RuntimeException("Error occurred while initiating ServerTenantManagementService.", e); } } @@ -48,7 +55,12 @@ public ChannelVerifiedTenantsApiServiceImpl() { @Override public Response addChannelVerifiedTenant(ChannelVerifiedTenantModel channelVerifiedTenantModel) { + if (log.isDebugEnabled()) { + log.debug("Adding channel verified tenant for domain: " + + (channelVerifiedTenantModel != null ? channelVerifiedTenantModel.getDomain() : null)); + } String resourceId = tenantManagementService.addTenant(channelVerifiedTenantModel); + log.info("Channel verified tenant created successfully with ID: " + resourceId); return Response.created(getResourceLocation(resourceId)).build(); } diff --git a/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.v1/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/v1/impl/TenantsApiServiceImpl.java b/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.v1/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/v1/impl/TenantsApiServiceImpl.java index fb55b2a6fe..ac0ea18d18 100644 --- a/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.v1/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/v1/impl/TenantsApiServiceImpl.java +++ b/components/org.wso2.carbon.identity.api.server.tenant.management/org.wso2.carbon.identity.api.server.tenant.management.v1/src/main/java/org/wso2/carbon/identity/api/server/tenant/management/v1/impl/TenantsApiServiceImpl.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.tenant.management.v1.impl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.common.Constants; import org.wso2.carbon.identity.api.server.common.ContextLoader; import org.wso2.carbon.identity.api.server.tenant.management.common.TenantManagementConstants; @@ -37,12 +39,17 @@ */ public class TenantsApiServiceImpl implements TenantsApiService { + private static final Log log = LogFactory.getLog(TenantsApiServiceImpl.class); private final ServerTenantManagementService tenantManagementService; public TenantsApiServiceImpl() { try { + if (log.isDebugEnabled()) { + log.debug("Initializing TenantsApiServiceImpl"); + } this.tenantManagementService = ServerTenantManagementServiceFactory.getServerTenantManagementService(); } catch (IllegalStateException e) { + log.error("Error occurred while initiating ServerTenantManagementService", e); throw new RuntimeException("Error occurred while initiating ServerTenantManagementService.", e); } } @@ -50,38 +57,59 @@ public TenantsApiServiceImpl() { @Override public Response addTenant(TenantModel tenantModel) { + if (log.isDebugEnabled()) { + log.debug("Adding tenant for domain: " + + (tenantModel != null ? tenantModel.getDomain() : null)); + } String resourceId = tenantManagementService.addTenant(tenantModel); + log.info("Tenant created successfully with ID: " + resourceId); return Response.created(getResourceLocation(resourceId)).build(); } @Override public Response deleteTenantMetadata(String tenantId) { + if (log.isDebugEnabled()) { + log.debug("Deleting metadata for tenant ID: " + tenantId); + } tenantManagementService.deleteTenantMetadata(tenantId); + log.info("Tenant metadata deleted successfully for tenant ID: " + tenantId); return Response.noContent().build(); } @Override public Response getOwner(String tenantId, String ownerId, String additionalClaims) { + if (log.isDebugEnabled()) { + log.debug("Retrieving owner details for tenant ID: " + tenantId + ", owner ID: " + ownerId); + } return Response.ok().entity(tenantManagementService.getOwner(tenantId, ownerId, additionalClaims)).build(); } @Override public Response getOwners(String tenantUniqueIdentifier) { + if (log.isDebugEnabled()) { + log.debug("Retrieving owners for tenant ID: " + tenantUniqueIdentifier); + } return Response.ok().entity(tenantManagementService.getOwners(tenantUniqueIdentifier)).build(); } @Override public Response getTenant(String tenantId) { + if (log.isDebugEnabled()) { + log.debug("Retrieving tenant details for tenant ID: " + tenantId); + } return Response.ok().entity(tenantManagementService.getTenant(tenantId)).build(); } @Override public Response retrieveTenants(Integer limit, Integer offset, String sortOrder, String sortBy, String filter) { + if (log.isDebugEnabled()) { + log.debug("Retrieving tenants list with limit: " + limit + ", offset: " + offset); + } return Response.ok().entity(tenantManagementService.listTenants(limit, offset, sortOrder, sortBy, filter)). build(); } @@ -89,14 +117,23 @@ public Response retrieveTenants(Integer limit, Integer offset, String sortOrder, @Override public Response updateOwner(String tenantId, String ownerId, OwnerPutModel ownerPutModel) { + if (log.isDebugEnabled()) { + log.debug("Updating owner for tenant ID: " + tenantId + ", owner ID: " + ownerId); + } tenantManagementService.updateOwner(tenantId, ownerId, ownerPutModel); + log.info("Owner updated successfully for tenant ID: " + tenantId); return Response.ok().build(); } @Override public Response updateTenantStatus(String tenantId, TenantPutModel tenantPutModel) { + boolean activated = tenantPutModel != null ? tenantPutModel.getActivated() : false; + if (log.isDebugEnabled()) { + log.debug("Updating tenant status for tenant ID: " + tenantId + ", activated: " + activated); + } String resourceId = tenantManagementService.updateTenantStatus(tenantId, tenantPutModel); + log.info("Tenant status updated successfully for tenant ID: " + tenantId); return Response.ok().entity(getResourceLocation(resourceId)).build(); } @@ -109,12 +146,18 @@ private URI getResourceLocation(String resourceId) { @Override public Response getTenantByDomain(String tenantDomain) { + if (log.isDebugEnabled()) { + log.debug("Retrieving tenant by domain: " + tenantDomain); + } return Response.ok().entity(tenantManagementService.getTenantByDomain(tenantDomain)).build(); } @Override public Response isDomainExist(String tenantDomain) { + if (log.isDebugEnabled()) { + log.debug("Checking domain availability for: " + tenantDomain); + } if (tenantManagementService.isDomainAvailable(tenantDomain)) { return Response.status(Response.Status.NOT_FOUND).build(); } else { diff --git a/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.common/src/main/java/org/wso2/carbon/identity/api/server/userstore/common/UserStoreConfigServiceHolder.java b/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.common/src/main/java/org/wso2/carbon/identity/api/server/userstore/common/UserStoreConfigServiceHolder.java index 9b7385ede4..c19dd554f7 100644 --- a/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.common/src/main/java/org/wso2/carbon/identity/api/server/userstore/common/UserStoreConfigServiceHolder.java +++ b/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.common/src/main/java/org/wso2/carbon/identity/api/server/userstore/common/UserStoreConfigServiceHolder.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.userstore.common; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.identity.claim.metadata.mgt.ClaimMetadataManagementService; import org.wso2.carbon.identity.user.store.configuration.UserStoreConfigService; @@ -28,6 +30,8 @@ */ public class UserStoreConfigServiceHolder { + private static final Log LOG = LogFactory.getLog(UserStoreConfigServiceHolder.class); + private UserStoreConfigServiceHolder() {} private static class UserStoreServiceHolder { @@ -55,6 +59,11 @@ private static class ClaimMetadataManagementServiceHolder { */ public static UserStoreConfigService getUserStoreConfigService() { + if (UserStoreServiceHolder.SERVICE == null) { + LOG.warn("UserStoreConfigService OSGi service is not available."); + } else if (LOG.isDebugEnabled()) { + LOG.debug("UserStoreConfigService OSGi service retrieved successfully."); + } return UserStoreServiceHolder.SERVICE; } @@ -65,6 +74,11 @@ public static UserStoreConfigService getUserStoreConfigService() { */ public static RealmService getRealmService() { + if (RealmServiceHolder.SERVICE == null) { + LOG.warn("RealmService OSGi service is not available."); + } else if (LOG.isDebugEnabled()) { + LOG.debug("RealmService OSGi service retrieved successfully."); + } return RealmServiceHolder.SERVICE; } @@ -75,6 +89,11 @@ public static RealmService getRealmService() { */ public static ClaimMetadataManagementService getClaimMetadataManagementService() { + if (ClaimMetadataManagementServiceHolder.SERVICE == null) { + LOG.warn("ClaimMetadataManagementService OSGi service is not available."); + } else if (LOG.isDebugEnabled()) { + LOG.debug("ClaimMetadataManagementService OSGi service retrieved successfully."); + } return ClaimMetadataManagementServiceHolder.SERVICE; } } diff --git a/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.v1/src/main/java/org/wso2/carbon/identity/api/server/userstore/v1/core/ServerUserStoreService.java b/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.v1/src/main/java/org/wso2/carbon/identity/api/server/userstore/v1/core/ServerUserStoreService.java index 143d80a3d8..5260806eb1 100644 --- a/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.v1/src/main/java/org/wso2/carbon/identity/api/server/userstore/v1/core/ServerUserStoreService.java +++ b/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.v1/src/main/java/org/wso2/carbon/identity/api/server/userstore/v1/core/ServerUserStoreService.java @@ -114,7 +114,8 @@ import static org.wso2.carbon.identity.api.server.common.Constants.V1_API_PATH_COMPONENT; import static org.wso2.carbon.identity.api.server.common.Constants.XML_FILE_EXTENSION; import static org.wso2.carbon.identity.api.server.common.Constants.YAML_FILE_EXTENSION; -import static org.wso2.carbon.identity.api.server.userstore.common.UserStoreConstants.ErrorMessage.ERROR_CODE_USER_STORE_LIMIT_REACHED; +import static org.wso2.carbon.identity.api.server.userstore.common.UserStoreConstants.ErrorMessage. + ERROR_CODE_USER_STORE_LIMIT_REACHED; import static org.wso2.carbon.identity.core.util.IdentityUtil.isValidFileName; /** @@ -163,8 +164,16 @@ public ServerUserStoreService(UserStoreConfigService userStoreConfigService, Rea public UserStoreResponse addUserStore(UserStoreReq userStoreReq) { try { + if (LOG.isDebugEnabled()) { + LOG.debug("Adding user store: " + (userStoreReq != null ? userStoreReq.getName() : "null")); + } + if (userStoreReq == null) { + throw handleException(Response.Status.BAD_REQUEST, + UserStoreConstants.ErrorMessage.ERROR_CODE_REQUEST_BODY_NOT_FOUND); + } validateMandatoryProperties(userStoreReq); if (!isAvailableUserStoreTypes(getAvailableUserStoreTypes(), userStoreReq.getTypeId())) { + LOG.warn("Invalid user store type: " + userStoreReq.getTypeId()); throw handleException(Response.Status.BAD_REQUEST, UserStoreConstants.ErrorMessage.ERROR_CODE_INVALID_USERSTORE_TYPE); } @@ -185,8 +194,10 @@ public UserStoreResponse addUserStore(UserStoreReq userStoreReq) { updateClaimMappings(userstoreDomain, tenantDomain, localClaimList); } + LOG.info("User store added successfully: " + userStoreReq.getName()); return buildUserStoreResponseDTO(userStoreReq); } catch (IdentityUserStoreMgtException e) { + LOG.error("Error adding user store: " + (userStoreReq != null ? userStoreReq.getName() : "unknown"), e); UserStoreConstants.ErrorMessage errorEnum = UserStoreConstants.ErrorMessage.ERROR_CODE_ERROR_ADDING_USER_STORE; throw handleIdentityUserStoreMgtException(e, errorEnum); @@ -201,12 +212,19 @@ public UserStoreResponse addUserStore(UserStoreReq userStoreReq) { public void deleteUserStore(String userstoreDomainId) { try { - userStoreConfigService.deleteUserStore(base64URLDecodeId(userstoreDomainId)); + String decodedId = base64URLDecodeId(userstoreDomainId); + if (LOG.isDebugEnabled()) { + LOG.debug("Deleting user store: " + decodedId); + } + userStoreConfigService.deleteUserStore(decodedId); + LOG.info("User store deleted successfully: " + decodedId); } catch (IdentityUserStoreClientException e) { + LOG.warn("User store not found for deletion: " + userstoreDomainId); if (LOG.isDebugEnabled()) { LOG.debug(e); } } catch (IdentityUserStoreMgtException e) { + LOG.error("Error deleting user store: " + userstoreDomainId, e); UserStoreConstants.ErrorMessage errorEnum = UserStoreConstants.ErrorMessage.ERROR_CODE_ERROR_DELETING_USER_STORE; throw handleIdentityUserStoreMgtException(e, errorEnum); @@ -228,6 +246,9 @@ public UserStoreResponse editUserStore(String domainId, UserStoreReq userStoreRe createUserStoreDTO(userStoreReq, domainId)); */ try { + if (LOG.isDebugEnabled()) { + LOG.debug("Editing user store: " + domainId); + } validateUserstoreUpdateRequest(domainId, userStoreReq); String userstoreDomain = userStoreReq.getName(); String tenantDomain = ContextLoader.getTenantDomainFromContext(); @@ -241,8 +262,10 @@ public UserStoreResponse editUserStore(String domainId, UserStoreReq userStoreRe if (claimAttributeMappingList != null) { updateClaimMappings(userstoreDomain, tenantDomain, localClaimList); } + LOG.info("User store updated successfully: " + userstoreDomain); return buildUserStoreResponseDTO(userStoreReq); } catch (IdentityUserStoreMgtException e) { + LOG.error("Error updating user store: " + domainId, e); UserStoreConstants.ErrorMessage errorEnum = UserStoreConstants.ErrorMessage.ERROR_CODE_ERROR_UPDATING_USER_STORE; throw handleIdentityUserStoreMgtException(e, errorEnum); @@ -313,19 +336,31 @@ public FileContent exportUserStore(String domainId, String fileType) { */ public String importUserStore(InputStream fileInputStream, Attachment fileDetail) { + String fileName = fileDetail != null && fileDetail.getDataHandler() != null ? + fileDetail.getDataHandler().getName() : "unknown"; + if (LOG.isDebugEnabled()) { + LOG.debug("Importing user store from file: " + fileName); + } + if (fileInputStream == null || fileDetail == null) { + throw handleException(Response.Status.BAD_REQUEST, + UserStoreConstants.ErrorMessage.ERROR_CODE_INVALID_INPUT); + } UserStoreReq userStoreConfigs; try { userStoreConfigs = getUserStoreFromFile(fileInputStream, fileDetail); } catch (UserStoreException e) { + LOG.error("Error importing user store from file: " + fileName, e); throw handleException(Response.Status.INTERNAL_SERVER_ERROR, UserStoreConstants.ErrorMessage.ERROR_CODE_ERROR_IMPORTING_USER_STORE); } catch (IdentityUserStoreMgtException e) { + LOG.error("Error importing user store from file: " + fileName, e); UserStoreConstants.ErrorMessage errorEnum = UserStoreConstants.ErrorMessage.ERROR_CODE_ERROR_IMPORTING_USER_STORE; throw handleIdentityUserStoreMgtException(e, errorEnum); } UserStoreResponse userStoreResponse = addUserStore(userStoreConfigs); + LOG.info("User store imported successfully from file: " + fileName + ", ID: " + userStoreResponse.getId()); return userStoreResponse.getId(); } @@ -340,19 +375,31 @@ public String importUserStore(InputStream fileInputStream, Attachment fileDetail public String updateUserStoreFromFile(String userstoreDomainID, InputStream fileInputStream, Attachment fileDetail) { + String fileName = fileDetail != null && fileDetail.getDataHandler() != null ? + fileDetail.getDataHandler().getName() : "unknown"; + if (LOG.isDebugEnabled()) { + LOG.debug("Updating user store from file: " + fileName + ", domain: " + userstoreDomainID); + } + if (fileInputStream == null || fileDetail == null) { + throw handleException(Response.Status.BAD_REQUEST, + UserStoreConstants.ErrorMessage.ERROR_CODE_INVALID_INPUT); + } UserStoreReq userStoreConfigs; try { userStoreConfigs = getUserStoreFromFile(fileInputStream, fileDetail); } catch (UserStoreException e) { + LOG.error("Error updating user store from file: " + fileName, e); throw handleException(Response.Status.INTERNAL_SERVER_ERROR, UserStoreConstants.ErrorMessage.ERROR_CODE_ERROR_UPDATING_USER_STORE); } catch (IdentityUserStoreMgtException e) { + LOG.error("Error updating user store from file: " + fileName, e); UserStoreConstants.ErrorMessage errorEnum = UserStoreConstants.ErrorMessage.ERROR_CODE_ERROR_UPDATING_USER_STORE; throw handleIdentityUserStoreMgtException(e, errorEnum); } UserStoreResponse userStoreResponse = editUserStore(userstoreDomainID, userStoreConfigs); + LOG.info("User store updated successfully from file: " + fileName + ", ID: " + userStoreResponse.getId()); return userStoreResponse.getId(); } @@ -363,6 +410,9 @@ public String updateUserStoreFromFile(String userstoreDomainID, InputStream file */ public List getAvailableUserStoreTypes() { + if (LOG.isDebugEnabled()) { + LOG.debug("Retrieving available user store types"); + } Set classNames; try { classNames = userStoreConfigService.getAvailableUserStoreClasses(); @@ -386,8 +436,12 @@ public List getAvailableUserStoreTypes() { propertiesToAdd.add(availableUserStoreClassesResDTO); } + if (LOG.isDebugEnabled()) { + LOG.debug("Retrieved " + propertiesToAdd.size() + " available user store types"); + } return propertiesToAdd; } catch (IdentityUserStoreMgtException e) { + LOG.error("Error retrieving available user store types", e); UserStoreConstants.ErrorMessage errorEnum = UserStoreConstants.ErrorMessage.ERROR_CODE_RETRIEVING_USER_STORE_TYPE; throw handleIdentityUserStoreMgtException(e, errorEnum); @@ -406,13 +460,21 @@ public List getAvailableUserStoreTypes() { public List getUserStoreList(Integer limit, Integer offset, String filter, String sort, String requiredAttributes) { + if (LOG.isDebugEnabled()) { + LOG.debug("Retrieving user store list"); + } handleNotImplementedBehaviour(limit, offset, filter, sort); try { UserStoreDTO[] userStoreDTOS = userStoreConfigService.getUserStores(); - return buildUserStoreListResponse(userStoreDTOS, requiredAttributes); + List response = buildUserStoreListResponse(userStoreDTOS, requiredAttributes); + if (LOG.isDebugEnabled()) { + LOG.debug("Retrieved " + response.size() + " user stores"); + } + return response; } catch (IdentityUserStoreMgtException e) { + LOG.error("Error retrieving user store list", e); UserStoreConstants.ErrorMessage errorEnum = UserStoreConstants.ErrorMessage.ERROR_CODE_ERROR_RETRIEVING_USER_STORE; throw handleIdentityUserStoreMgtException(e, errorEnum); @@ -564,6 +626,9 @@ public ConnectionEstablishedResponse testRDBMSConnection(RDBMSConnectionReq rdBM ConnectionEstablishedResponse connectionEstablishedResponse = new ConnectionEstablishedResponse(); boolean isConnectionEstablished; connectionEstablishedResponse.setConnection(false); + if (rdBMSConnectionReq == null) { + return connectionEstablishedResponse; + } try { isConnectionEstablished = userStoreConfigService.testRDBMSConnection(rdBMSConnectionReq.getDomain(), rdBMSConnectionReq.getDriverName(), rdBMSConnectionReq.getConnectionURL(), @@ -1405,7 +1470,6 @@ private APIError handleClaimManagementClientException(ClaimMetadataException ex private void validateUserstoreUpdateRequest(String domainID, UserStoreReq userStoreReq) throws IdentityUserStoreClientException { - validateUserStoreProperty(userStoreReq); if (StringUtils.isBlank(domainID)) { throw new IdentityUserStoreClientException( UserStoreConstants.ErrorMessage.ERROR_CODE_EMPTY_DOMAIN_ID.getCode(), @@ -1416,6 +1480,7 @@ private void validateUserstoreUpdateRequest(String domainID, UserStoreReq userSt UserStoreConstants.ErrorMessage.ERROR_CODE_REQUEST_BODY_NOT_FOUND.getCode(), UserStoreConstants.ErrorMessage.ERROR_CODE_REQUEST_BODY_NOT_FOUND.getMessage()); } + validateUserStoreProperty(userStoreReq); if (StringUtils.isBlank(userStoreReq.getName())) { throw new IdentityUserStoreClientException( UserStoreConstants.ErrorMessage.ERROR_CODE_EMPTY_DOMAIN_NAME.getCode(), diff --git a/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.v1/src/main/java/org/wso2/carbon/identity/api/server/userstore/v1/core/functions/userstore/AttributeMappingsToApiModel.java b/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.v1/src/main/java/org/wso2/carbon/identity/api/server/userstore/v1/core/functions/userstore/AttributeMappingsToApiModel.java index 1cc849e2f2..6535ab5c13 100644 --- a/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.v1/src/main/java/org/wso2/carbon/identity/api/server/userstore/v1/core/functions/userstore/AttributeMappingsToApiModel.java +++ b/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.v1/src/main/java/org/wso2/carbon/identity/api/server/userstore/v1/core/functions/userstore/AttributeMappingsToApiModel.java @@ -19,6 +19,8 @@ package org.wso2.carbon.identity.api.server.userstore.v1.core.functions.userstore; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.userstore.v1.model.UserStoreAttributeResponse; import org.wso2.carbon.identity.user.store.configuration.model.UserStoreAttribute; @@ -33,10 +35,15 @@ public class AttributeMappingsToApiModel implements Function, List> { + private static final Log LOG = LogFactory.getLog(AttributeMappingsToApiModel.class); + @Override public List apply(List userStoreAttributeDOs) { if (CollectionUtils.isNotEmpty(userStoreAttributeDOs)) { + if (LOG.isDebugEnabled()) { + LOG.debug("Converting " + userStoreAttributeDOs.size() + " user store attributes to API model"); + } List userStoreAttributes = new ArrayList<>(); userStoreAttributeDOs.stream().forEach( @@ -48,8 +55,14 @@ public List apply(List userStore userStoreAttributeResponse.displayName(userStoreAttribute.getDisplayName()); userStoreAttributes.add(userStoreAttributeResponse); }); + if (LOG.isDebugEnabled()) { + LOG.debug("Converted " + userStoreAttributes.size() + " user store attributes successfully"); + } return userStoreAttributes; } + if (LOG.isDebugEnabled()) { + LOG.debug("No user store attributes to convert"); + } return Collections.emptyList(); } } diff --git a/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.v1/src/main/java/org/wso2/carbon/identity/api/server/userstore/v1/factories/ServerUserStoreServiceFactory.java b/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.v1/src/main/java/org/wso2/carbon/identity/api/server/userstore/v1/factories/ServerUserStoreServiceFactory.java index cfdf3a4f20..fe14e12b0c 100644 --- a/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.v1/src/main/java/org/wso2/carbon/identity/api/server/userstore/v1/factories/ServerUserStoreServiceFactory.java +++ b/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.v1/src/main/java/org/wso2/carbon/identity/api/server/userstore/v1/factories/ServerUserStoreServiceFactory.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.userstore.v1.factories; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.userstore.common.UserStoreConfigServiceHolder; import org.wso2.carbon.identity.api.server.userstore.v1.core.ServerUserStoreService; import org.wso2.carbon.identity.claim.metadata.mgt.ClaimMetadataManagementService; @@ -29,6 +31,7 @@ */ public class ServerUserStoreServiceFactory { + private static final Log LOG = LogFactory.getLog(ServerUserStoreServiceFactory.class); private static final ServerUserStoreService SERVICE; static { @@ -38,18 +41,24 @@ public class ServerUserStoreServiceFactory { .getClaimMetadataManagementService(); if (userStoreConfigService == null) { + LOG.error("UserStoreConfigService is not available from OSGi context"); throw new IllegalStateException("UserStoreConfigService is not available from OSGi context."); } if (realmService == null) { + LOG.error("RealmService is not available from OSGi context"); throw new IllegalStateException("RealmService is not available from OSGi context."); } if (claimMetadataManagementService == null) { + LOG.error("ClaimMetadataManagementService is not available from OSGi context"); throw new IllegalStateException("ClaimMetadataManagementService is not available from OSGi context."); } SERVICE = new ServerUserStoreService(userStoreConfigService, realmService, claimMetadataManagementService); + if (LOG.isDebugEnabled()) { + LOG.debug("ServerUserStoreService initialized successfully"); + } } /** diff --git a/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.v1/src/main/java/org/wso2/carbon/identity/api/server/userstore/v1/impl/UserstoresApiServiceImpl.java b/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.v1/src/main/java/org/wso2/carbon/identity/api/server/userstore/v1/impl/UserstoresApiServiceImpl.java index 8feea256db..81398cb8a6 100644 --- a/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.v1/src/main/java/org/wso2/carbon/identity/api/server/userstore/v1/impl/UserstoresApiServiceImpl.java +++ b/components/org.wso2.carbon.identity.api.server.userstore/org.wso2.carbon.identity.api.server.userstore.v1/src/main/java/org/wso2/carbon/identity/api/server/userstore/v1/impl/UserstoresApiServiceImpl.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.userstore.v1.impl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.cxf.jaxrs.ext.multipart.Attachment; import org.apache.http.HttpHeaders; import org.wso2.carbon.identity.api.server.common.ContextLoader; @@ -46,13 +48,18 @@ */ public class UserstoresApiServiceImpl implements UserstoresApiService { + private static final Log LOG = LogFactory.getLog(UserstoresApiServiceImpl.class); private final ServerUserStoreService serverUserStoreService; public UserstoresApiServiceImpl() { try { this.serverUserStoreService = ServerUserStoreServiceFactory.getServerUserStoreService(); + if (LOG.isDebugEnabled()) { + LOG.debug("UserstoresApiServiceImpl initialized successfully"); + } } catch (IllegalStateException e) { + LOG.error("Error occurred while initiating ServerUserStoreService", e); throw new RuntimeException("Error occurred while initiating ServerUserStoreService.", e); } } @@ -60,22 +67,34 @@ public UserstoresApiServiceImpl() { @Override public Response addUserStore(UserStoreReq userStoreReq) { + if (LOG.isDebugEnabled()) { + LOG.debug("Adding user store: " + (userStoreReq != null ? userStoreReq.getName() : "null")); + } UserStoreResponse response = serverUserStoreService.addUserStore(userStoreReq); + LOG.info("User store added successfully with ID: " + response.getId()); return Response.created(getResourceLocation(response.getId())).entity(response).build(); } @Override public Response deleteUserStore(String userstoreDomainId) { + if (LOG.isDebugEnabled()) { + LOG.debug("Deleting user store with domain ID: " + userstoreDomainId); + } serverUserStoreService.deleteUserStore(userstoreDomainId); + LOG.info("User store deleted successfully with domain ID: " + userstoreDomainId); return Response.noContent().build(); } @Override public Response exportUserStoreToFile(String userstoreDomainId, String accept) { + if (LOG.isDebugEnabled()) { + LOG.debug("Exporting user store with domain ID: " + userstoreDomainId + ", format: " + accept); + } FileContent fileContent = serverUserStoreService.exportUserStore(userstoreDomainId, accept); + LOG.info("User store exported successfully: " + fileContent.getFileName()); return Response.ok() .type(fileContent.getFileType()) .header("Content-Disposition", "attachment; filename=\"" @@ -143,7 +162,13 @@ public Response updateAttributeMappings(String userstoreDomainId, @Override public Response importUserStoreFromFile(InputStream fileInputStream, Attachment fileDetail) { + String fileName = fileDetail != null && fileDetail.getDataHandler() != null ? + fileDetail.getDataHandler().getName() : "unknown"; + if (LOG.isDebugEnabled()) { + LOG.debug("Importing user store from file: " + fileName); + } String resourceId = serverUserStoreService.importUserStore(fileInputStream, fileDetail); + LOG.info("User store imported successfully from file: " + fileName + ", resource ID: " + resourceId); URI location = ContextLoader.buildURIForHeader(V1_API_PATH_COMPONENT + USER_STORE_PATH_COMPONENT + "/" + resourceId); return Response.created(location).build(); @@ -164,15 +189,26 @@ public Response testRDBMSConnection(RDBMSConnectionReq rdBMSConnectionReq) { @Override public Response updateUserStore(String userstoreDomainId, UserStoreReq userStoreReq) { - return Response.ok().entity(serverUserStoreService.editUserStore(userstoreDomainId, userStoreReq)).build(); + if (LOG.isDebugEnabled()) { + LOG.debug("Updating user store with domain ID: " + userstoreDomainId); + } + UserStoreResponse response = serverUserStoreService.editUserStore(userstoreDomainId, userStoreReq); + LOG.info("User store updated successfully with domain ID: " + userstoreDomainId); + return Response.ok().entity(response).build(); } @Override public Response updateUserStoreFromFile(String userstoreDomainId, InputStream fileInputStream, Attachment fileDetail) { + String fileName = fileDetail != null && fileDetail.getDataHandler() != null ? + fileDetail.getDataHandler().getName() : "unknown"; + if (LOG.isDebugEnabled()) { + LOG.debug("Updating user store from file: " + fileName + ", domain ID: " + userstoreDomainId); + } String resourceId = serverUserStoreService.updateUserStoreFromFile(userstoreDomainId, fileInputStream, fileDetail); + LOG.info("User store updated successfully from file: " + fileName + ", domain ID: " + userstoreDomainId); return Response.ok().location(getResourceLocation(resourceId)).build(); } diff --git a/components/org.wso2.carbon.identity.api.server.webhook.management/org.wso2.carbon.identity.api.server.webhook.management.common/src/main/java/org/wso2/carbon/identity/api/server/webhook/management/common/WebhookManagementServiceHolder.java b/components/org.wso2.carbon.identity.api.server.webhook.management/org.wso2.carbon.identity.api.server.webhook.management.common/src/main/java/org/wso2/carbon/identity/api/server/webhook/management/common/WebhookManagementServiceHolder.java index f92e671bb7..35688f2189 100644 --- a/components/org.wso2.carbon.identity.api.server.webhook.management/org.wso2.carbon.identity.api.server.webhook.management.common/src/main/java/org/wso2/carbon/identity/api/server/webhook/management/common/WebhookManagementServiceHolder.java +++ b/components/org.wso2.carbon.identity.api.server.webhook.management/org.wso2.carbon.identity.api.server.webhook.management.common/src/main/java/org/wso2/carbon/identity/api/server/webhook/management/common/WebhookManagementServiceHolder.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.webhook.management.common; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.identity.webhook.management.api.service.WebhookManagementService; @@ -26,6 +28,8 @@ */ public class WebhookManagementServiceHolder { + private static final Log log = LogFactory.getLog(WebhookManagementServiceHolder.class); + private WebhookManagementServiceHolder() { } @@ -43,6 +47,13 @@ private static class WebhookManagementServiceHolderInstance { */ public static WebhookManagementService getWebhookManagementService() { - return WebhookManagementServiceHolderInstance.SERVICE; + if (log.isDebugEnabled()) { + log.debug("Retrieving WebhookManagementService from OSGi service registry."); + } + WebhookManagementService service = WebhookManagementServiceHolderInstance.SERVICE; + if (service == null && log.isDebugEnabled()) { + log.debug("WebhookManagementService is not available in the OSGi service registry."); + } + return service; } } diff --git a/components/org.wso2.carbon.identity.api.server.webhook.management/org.wso2.carbon.identity.api.server.webhook.management.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/management/v1/core/ServerWebhookManagementService.java b/components/org.wso2.carbon.identity.api.server.webhook.management/org.wso2.carbon.identity.api.server.webhook.management.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/management/v1/core/ServerWebhookManagementService.java index 851d4c67d3..ff1e0f32d7 100644 --- a/components/org.wso2.carbon.identity.api.server.webhook.management/org.wso2.carbon.identity.api.server.webhook.management.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/management/v1/core/ServerWebhookManagementService.java +++ b/components/org.wso2.carbon.identity.api.server.webhook.management/org.wso2.carbon.identity.api.server.webhook.management.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/management/v1/core/ServerWebhookManagementService.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.webhook.management.v1.core; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.CarbonContext; import org.wso2.carbon.identity.api.server.common.ContextLoader; import org.wso2.carbon.identity.api.server.webhook.management.v1.model.WebhookList; @@ -39,14 +41,17 @@ import javax.ws.rs.core.Response; import static org.wso2.carbon.identity.api.server.common.Constants.V1_API_PATH_COMPONENT; -import static org.wso2.carbon.identity.api.server.webhook.management.v1.constants.WebhookMgtEndpointConstants.ErrorMessage.ERROR_NO_WEBHOOK_FOUND_ON_GIVEN_ID; -import static org.wso2.carbon.identity.api.server.webhook.management.v1.constants.WebhookMgtEndpointConstants.WEBHOOK_PATH_COMPONENT; +import static org.wso2.carbon.identity.api.server.webhook.management.v1.constants + .WebhookMgtEndpointConstants.ErrorMessage.ERROR_NO_WEBHOOK_FOUND_ON_GIVEN_ID; +import static org.wso2.carbon.identity.api.server.webhook.management.v1.constants + .WebhookMgtEndpointConstants.WEBHOOK_PATH_COMPONENT; /** * Call internal osgi services to perform webhook management operations. */ public class ServerWebhookManagementService { + private static final Log LOG = LogFactory.getLog(ServerWebhookManagementService.class); private final WebhookManagementService webhookManagementService; public ServerWebhookManagementService(WebhookManagementService webhookManagementService) { @@ -61,13 +66,20 @@ public ServerWebhookManagementService(WebhookManagementService webhookManagement */ public WebhookList getWebhooks() { + String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain(); + if (LOG.isDebugEnabled()) { + LOG.debug("Retrieving webhooks for tenant: " + tenantDomain); + } try { - List webhooks = - webhookManagementService.getWebhooks(CarbonContext.getThreadLocalCarbonContext().getTenantDomain()); + List webhooks = webhookManagementService.getWebhooks(tenantDomain); + if (LOG.isDebugEnabled()) { + LOG.debug("Found " + webhooks.size() + " webhooks for tenant: " + tenantDomain); + } return new WebhookList().webhooks(webhooks.stream() .map(this::toWebhookSummary) .collect(Collectors.toList())); } catch (WebhookMgtException e) { + LOG.error("Error retrieving webhooks for tenant: " + tenantDomain, e); throw WebhookManagementAPIErrorBuilder.buildAPIError(e); } } @@ -80,15 +92,20 @@ public WebhookList getWebhooks() { */ public WebhookResponse getWebhook(String webhookId) { + String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain(); + if (LOG.isDebugEnabled()) { + LOG.debug("Retrieving webhook with ID: " + webhookId + " for tenant: " + tenantDomain); + } try { - Webhook webhook = webhookManagementService.getWebhook(webhookId, - CarbonContext.getThreadLocalCarbonContext().getTenantDomain()); + Webhook webhook = webhookManagementService.getWebhook(webhookId, tenantDomain); if (webhook == null) { + LOG.warn("Webhook not found with ID: " + webhookId + " for tenant: " + tenantDomain); throw WebhookManagementAPIErrorBuilder.buildAPIError(Response.Status.NOT_FOUND, ERROR_NO_WEBHOOK_FOUND_ON_GIVEN_ID, webhookId); } return getWebhookResponse(webhook); } catch (WebhookMgtException e) { + LOG.error("Error retrieving webhook with ID: " + webhookId + " for tenant: " + tenantDomain, e); throw WebhookManagementAPIErrorBuilder.buildAPIError(e); } } @@ -101,11 +118,22 @@ public WebhookResponse getWebhook(String webhookId) { */ public WebhookResponse createWebhook(WebhookRequest webhookRequest) { + String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain(); + String webhookName = webhookRequest != null ? webhookRequest.getName() : "null"; + if (LOG.isDebugEnabled()) { + LOG.debug("Creating webhook with name: " + webhookName + " for tenant: " + tenantDomain); + } + if (webhookRequest == null) { + throw new IllegalArgumentException("Webhook request cannot be null"); + } try { Webhook webhook = buildWebhook(null, webhookRequest); - return getWebhookResponse(webhookManagementService.createWebhook(webhook, - CarbonContext.getThreadLocalCarbonContext().getTenantDomain())); + WebhookResponse response = getWebhookResponse( + webhookManagementService.createWebhook(webhook, tenantDomain)); + LOG.info("Webhook created successfully with ID: " + response.getId() + " for tenant: " + tenantDomain); + return response; } catch (WebhookMgtException e) { + LOG.error("Error creating webhook with name: " + webhookName + " for tenant: " + tenantDomain, e); throw WebhookManagementAPIErrorBuilder.buildAPIError(e); } } @@ -119,11 +147,18 @@ public WebhookResponse createWebhook(WebhookRequest webhookRequest) { */ public WebhookResponse updateWebhook(String webhookId, WebhookRequest webhookRequest) { + String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain(); + if (LOG.isDebugEnabled()) { + LOG.debug("Updating webhook with ID: " + webhookId + " for tenant: " + tenantDomain); + } try { Webhook webhook = buildWebhook(webhookId, webhookRequest); - return getWebhookResponse(webhookManagementService.updateWebhook(webhookId, webhook, - CarbonContext.getThreadLocalCarbonContext().getTenantDomain())); + WebhookResponse response = getWebhookResponse( + webhookManagementService.updateWebhook(webhookId, webhook, tenantDomain)); + LOG.info("Webhook updated successfully with ID: " + webhookId + " for tenant: " + tenantDomain); + return response; } catch (WebhookMgtException e) { + LOG.error("Error updating webhook with ID: " + webhookId + " for tenant: " + tenantDomain, e); throw WebhookManagementAPIErrorBuilder.buildAPIError(e); } } @@ -135,10 +170,15 @@ public WebhookResponse updateWebhook(String webhookId, WebhookRequest webhookReq */ public void deleteWebhook(String webhookId) { + String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain(); + if (LOG.isDebugEnabled()) { + LOG.debug("Deleting webhook with ID: " + webhookId + " for tenant: " + tenantDomain); + } try { - webhookManagementService.deleteWebhook(webhookId, - CarbonContext.getThreadLocalCarbonContext().getTenantDomain()); + webhookManagementService.deleteWebhook(webhookId, tenantDomain); + LOG.info("Webhook deleted successfully with ID: " + webhookId + " for tenant: " + tenantDomain); } catch (WebhookMgtException e) { + LOG.error("Error deleting webhook with ID: " + webhookId + " for tenant: " + tenantDomain, e); throw WebhookManagementAPIErrorBuilder.buildAPIError(e); } } @@ -151,10 +191,17 @@ public void deleteWebhook(String webhookId) { */ public WebhookResponse activateWebhook(String webhookId) { + String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain(); + if (LOG.isDebugEnabled()) { + LOG.debug("Activating webhook with ID: " + webhookId + " for tenant: " + tenantDomain); + } try { - return getWebhookResponse(webhookManagementService.activateWebhook(webhookId, - CarbonContext.getThreadLocalCarbonContext().getTenantDomain())); + WebhookResponse response = getWebhookResponse( + webhookManagementService.activateWebhook(webhookId, tenantDomain)); + LOG.info("Webhook activated successfully with ID: " + webhookId + " for tenant: " + tenantDomain); + return response; } catch (WebhookMgtException e) { + LOG.error("Error activating webhook with ID: " + webhookId + " for tenant: " + tenantDomain, e); throw WebhookManagementAPIErrorBuilder.buildAPIError(e); } } @@ -167,10 +214,17 @@ public WebhookResponse activateWebhook(String webhookId) { */ public WebhookResponse deactivateWebhook(String webhookId) { + String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain(); + if (LOG.isDebugEnabled()) { + LOG.debug("Deactivating webhook with ID: " + webhookId + " for tenant: " + tenantDomain); + } try { - return getWebhookResponse(webhookManagementService.deactivateWebhook(webhookId, - CarbonContext.getThreadLocalCarbonContext().getTenantDomain())); + WebhookResponse response = getWebhookResponse( + webhookManagementService.deactivateWebhook(webhookId, tenantDomain)); + LOG.info("Webhook deactivated successfully with ID: " + webhookId + " for tenant: " + tenantDomain); + return response; } catch (WebhookMgtException e) { + LOG.error("Error deactivating webhook with ID: " + webhookId + " for tenant: " + tenantDomain, e); throw WebhookManagementAPIErrorBuilder.buildAPIError(e); } } @@ -183,10 +237,17 @@ public WebhookResponse deactivateWebhook(String webhookId) { */ public WebhookResponse retryWebhook(String webhookId) { + String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain(); + if (LOG.isDebugEnabled()) { + LOG.debug("Retrying webhook with ID: " + webhookId + " for tenant: " + tenantDomain); + } try { - return getWebhookResponse(webhookManagementService.retryWebhook(webhookId, - CarbonContext.getThreadLocalCarbonContext().getTenantDomain())); + WebhookResponse response = getWebhookResponse( + webhookManagementService.retryWebhook(webhookId, tenantDomain)); + LOG.info("Webhook retry initiated successfully for ID: " + webhookId + " for tenant: " + tenantDomain); + return response; } catch (WebhookMgtException e) { + LOG.error("Error retrying webhook with ID: " + webhookId + " for tenant: " + tenantDomain, e); throw WebhookManagementAPIErrorBuilder.buildAPIError(e); } } @@ -273,6 +334,7 @@ private WebhookResponse getWebhookResponse(Webhook webhook) { webhookResponse.setChannelsSubscribed(null); } } catch (WebhookMgtException e) { + LOG.warn("Error setting channels subscribed for webhook ID: " + webhook.getId(), e); webhookResponse.setChannelsSubscribed(null); } return webhookResponse; diff --git a/components/org.wso2.carbon.identity.api.server.webhook.management/org.wso2.carbon.identity.api.server.webhook.management.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/management/v1/factories/ServerWebhookManagementServiceFactory.java b/components/org.wso2.carbon.identity.api.server.webhook.management/org.wso2.carbon.identity.api.server.webhook.management.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/management/v1/factories/ServerWebhookManagementServiceFactory.java index 11ee3bf185..428ee8ae73 100644 --- a/components/org.wso2.carbon.identity.api.server.webhook.management/org.wso2.carbon.identity.api.server.webhook.management.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/management/v1/factories/ServerWebhookManagementServiceFactory.java +++ b/components/org.wso2.carbon.identity.api.server.webhook.management/org.wso2.carbon.identity.api.server.webhook.management.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/management/v1/factories/ServerWebhookManagementServiceFactory.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.webhook.management.v1.factories; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.webhook.management.common.WebhookManagementServiceHolder; import org.wso2.carbon.identity.api.server.webhook.management.v1.core.ServerWebhookManagementService; import org.wso2.carbon.identity.webhook.management.api.service.WebhookManagementService; @@ -27,15 +29,18 @@ */ public class ServerWebhookManagementServiceFactory { + private static final Log LOG = LogFactory.getLog(ServerWebhookManagementServiceFactory.class); private static final ServerWebhookManagementService SERVICE; static { WebhookManagementService webhookManagementService = WebhookManagementServiceHolder.getWebhookManagementService(); if (webhookManagementService == null) { + LOG.error("WebhookManagementService is not available from OSGi context."); throw new IllegalStateException("WebhookManagementService is not available from OSGi context."); } SERVICE = new ServerWebhookManagementService(webhookManagementService); + LOG.info("ServerWebhookManagementService initialized successfully."); } /** diff --git a/components/org.wso2.carbon.identity.api.server.webhook.management/org.wso2.carbon.identity.api.server.webhook.management.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/management/v1/impl/WebhooksApiServiceImpl.java b/components/org.wso2.carbon.identity.api.server.webhook.management/org.wso2.carbon.identity.api.server.webhook.management.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/management/v1/impl/WebhooksApiServiceImpl.java index 52cf2a4621..86bcb54576 100644 --- a/components/org.wso2.carbon.identity.api.server.webhook.management/org.wso2.carbon.identity.api.server.webhook.management.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/management/v1/impl/WebhooksApiServiceImpl.java +++ b/components/org.wso2.carbon.identity.api.server.webhook.management/org.wso2.carbon.identity.api.server.webhook.management.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/management/v1/impl/WebhooksApiServiceImpl.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.webhook.management.v1.impl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.common.Constants; import org.wso2.carbon.identity.api.server.common.ContextLoader; import org.wso2.carbon.identity.api.server.webhook.management.v1.WebhooksApiService; @@ -37,6 +39,7 @@ */ public class WebhooksApiServiceImpl implements WebhooksApiService { + private static final Log LOG = LogFactory.getLog(WebhooksApiServiceImpl.class); private final ServerWebhookManagementService serverWebhookManagementService; public WebhooksApiServiceImpl() { @@ -44,6 +47,7 @@ public WebhooksApiServiceImpl() { try { serverWebhookManagementService = ServerWebhookManagementServiceFactory.getServerWebhookManagementService(); } catch (IllegalStateException e) { + LOG.error("Error occurred while retrieving WebhookManagementService.", e); throw new RuntimeException("Error occurred while retrieving WebhookManagementService.", e); } } @@ -51,6 +55,9 @@ public WebhooksApiServiceImpl() { @Override public Response getWebhooks() { + if (LOG.isDebugEnabled()) { + LOG.debug("Getting all webhooks."); + } WebhookList webhooks = serverWebhookManagementService.getWebhooks(); return Response.ok().entity(webhooks).build(); } @@ -58,6 +65,9 @@ public Response getWebhooks() { @Override public Response getWebhookByWebhookId(String webhookId) { + if (LOG.isDebugEnabled()) { + LOG.debug("Getting webhook by ID: " + webhookId); + } WebhookResponse webhook = serverWebhookManagementService.getWebhook(webhookId); return Response.ok().entity(webhook).build(); } @@ -65,6 +75,9 @@ public Response getWebhookByWebhookId(String webhookId) { @Override public Response createWebhook(WebhookRequest webhookRequest) { + if (LOG.isDebugEnabled()) { + LOG.debug("Creating webhook with name: " + (webhookRequest != null ? webhookRequest.getName() : "null")); + } WebhookResponse createdWebhook = serverWebhookManagementService.createWebhook(webhookRequest); URI location = ContextLoader.buildURIForBody(String.format(Constants.V1_API_PATH_COMPONENT + "/webhooks/%s", createdWebhook.getId())); @@ -74,6 +87,9 @@ public Response createWebhook(WebhookRequest webhookRequest) { @Override public Response updateWebhook(String webhookId, WebhookRequest webhookRequest) { + if (LOG.isDebugEnabled()) { + LOG.debug("Updating webhook with ID: " + webhookId); + } WebhookResponse updatedWebhook = serverWebhookManagementService.updateWebhook(webhookId, webhookRequest); return Response.ok().entity(updatedWebhook).build(); } @@ -81,6 +97,9 @@ public Response updateWebhook(String webhookId, WebhookRequest webhookRequest) { @Override public Response deleteWebhook(String webhookId) { + if (LOG.isDebugEnabled()) { + LOG.debug("Deleting webhook with ID: " + webhookId); + } serverWebhookManagementService.deleteWebhook(webhookId); return Response.noContent().build(); } @@ -88,18 +107,27 @@ public Response deleteWebhook(String webhookId) { @Override public Response activateWebhook(String webhookId) { + if (LOG.isDebugEnabled()) { + LOG.debug("Activating webhook with ID: " + webhookId); + } return Response.ok().entity(serverWebhookManagementService.activateWebhook(webhookId)).build(); } @Override public Response deactivateWebhook(String webhookId) { + if (LOG.isDebugEnabled()) { + LOG.debug("Deactivating webhook with ID: " + webhookId); + } return Response.ok().entity(serverWebhookManagementService.deactivateWebhook(webhookId)).build(); } @Override public Response retryWebhook(String webhookId) { + if (LOG.isDebugEnabled()) { + LOG.debug("Retrying webhook with ID: " + webhookId); + } return Response.ok().entity(serverWebhookManagementService.retryWebhook(webhookId)).build(); } } diff --git a/components/org.wso2.carbon.identity.api.server.webhook.metadata/org.wso2.carbon.identity.api.server.webhook.metadata.common/src/main/java/org/wso2/carbon/identity/api/server/webhook/metadata/common/WebhookMetadataServiceHolder.java b/components/org.wso2.carbon.identity.api.server.webhook.metadata/org.wso2.carbon.identity.api.server.webhook.metadata.common/src/main/java/org/wso2/carbon/identity/api/server/webhook/metadata/common/WebhookMetadataServiceHolder.java index dd3a5720fa..0e34f18796 100644 --- a/components/org.wso2.carbon.identity.api.server.webhook.metadata/org.wso2.carbon.identity.api.server.webhook.metadata.common/src/main/java/org/wso2/carbon/identity/api/server/webhook/metadata/common/WebhookMetadataServiceHolder.java +++ b/components/org.wso2.carbon.identity.api.server.webhook.metadata/org.wso2.carbon.identity.api.server.webhook.metadata.common/src/main/java/org/wso2/carbon/identity/api/server/webhook/metadata/common/WebhookMetadataServiceHolder.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.webhook.metadata.common; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.identity.webhook.metadata.api.service.EventAdapterMetadataService; import org.wso2.carbon.identity.webhook.metadata.api.service.WebhookMetadataService; @@ -27,6 +29,8 @@ */ public class WebhookMetadataServiceHolder { + private static final Log log = LogFactory.getLog(WebhookMetadataServiceHolder.class); + private WebhookMetadataServiceHolder() { } @@ -48,7 +52,14 @@ private static class WebhookMetadataServiceHolderInstance { */ public static WebhookMetadataService getWebhookMetadataService() { - return WebhookMetadataServiceHolderInstance.WEBHOOK_METADATA_SERVICE; + if (log.isDebugEnabled()) { + log.debug("Retrieving WebhookMetadataService from OSGi service registry."); + } + WebhookMetadataService service = WebhookMetadataServiceHolderInstance.WEBHOOK_METADATA_SERVICE; + if (service == null) { + log.warn("WebhookMetadataService is not available in the OSGi service registry."); + } + return service; } /** @@ -58,6 +69,13 @@ public static WebhookMetadataService getWebhookMetadataService() { */ public static EventAdapterMetadataService getEventAdapterMetadataService() { - return WebhookMetadataServiceHolderInstance.EVENT_ADAPTER_METADATA_SERVICE; + if (log.isDebugEnabled()) { + log.debug("Retrieving EventAdapterMetadataService from OSGi service registry."); + } + EventAdapterMetadataService service = WebhookMetadataServiceHolderInstance.EVENT_ADAPTER_METADATA_SERVICE; + if (service == null) { + log.warn("EventAdapterMetadataService is not available in the OSGi service registry."); + } + return service; } } diff --git a/components/org.wso2.carbon.identity.api.server.webhook.metadata/org.wso2.carbon.identity.api.server.webhook.metadata.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/metadata/v1/core/ServerWebhookMetadataService.java b/components/org.wso2.carbon.identity.api.server.webhook.metadata/org.wso2.carbon.identity.api.server.webhook.metadata.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/metadata/v1/core/ServerWebhookMetadataService.java index 33eea1d643..bffacc74f0 100644 --- a/components/org.wso2.carbon.identity.api.server.webhook.metadata/org.wso2.carbon.identity.api.server.webhook.metadata.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/metadata/v1/core/ServerWebhookMetadataService.java +++ b/components/org.wso2.carbon.identity.api.server.webhook.metadata/org.wso2.carbon.identity.api.server.webhook.metadata.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/metadata/v1/core/ServerWebhookMetadataService.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.webhook.metadata.v1.core; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.CarbonContext; import org.wso2.carbon.identity.api.server.common.ContextLoader; import org.wso2.carbon.identity.api.server.webhook.metadata.common.WebhookMetadataServiceHolder; @@ -49,6 +51,8 @@ */ public class ServerWebhookMetadataService { + private static final Log LOG = LogFactory.getLog(ServerWebhookMetadataService.class); + /** * Get an event profile by name. * @@ -57,10 +61,16 @@ public class ServerWebhookMetadataService { */ public EventProfile getEventProfile(String profileName) { + if (LOG.isDebugEnabled()) { + LOG.debug("Retrieving event profile: " + profileName); + } try { org.wso2.carbon.identity.webhook.metadata.api.model.EventProfile eventProfile = WebhookMetadataServiceHolder.getWebhookMetadataService().getEventProfile(profileName); if (eventProfile == null) { + if (LOG.isDebugEnabled()) { + LOG.debug("Event profile not found: " + profileName); + } throw WebhookMetadataAPIErrorBuilder.buildAPIError(Response.Status.NOT_FOUND, ERROR_CODE_PROFILE_NOT_FOUND, profileName); } @@ -77,6 +87,9 @@ public EventProfile getEventProfile(String profileName) { */ public WebhookMetadata getWebhookMetadata() { + if (LOG.isDebugEnabled()) { + LOG.debug("Retrieving webhook metadata including all event profiles and active adapter"); + } try { List eventProfiles = WebhookMetadataServiceHolder.getWebhookMetadataService().getSupportedEventProfiles(); @@ -91,6 +104,10 @@ public WebhookMetadata getWebhookMetadata() { WebhookMetadata webhookMetadata = new WebhookMetadata(); webhookMetadata.setProfiles(eventProfileMetadataList); webhookMetadata.setAdapter(webhookMetadataAdapter); + if (LOG.isDebugEnabled()) { + LOG.debug("Successfully retrieved webhook metadata with " + eventProfileMetadataList.size() + + " event profiles"); + } return webhookMetadata; } catch (WebhookMetadataException e) { throw WebhookMetadataAPIErrorBuilder.buildAPIError(e); @@ -100,11 +117,18 @@ public WebhookMetadata getWebhookMetadata() { public WebhookMetadata updateWebhookMetadataProperties( WebhookMetadataProperties webhookMetadataProperties) { + if (LOG.isDebugEnabled()) { + LOG.debug("Updating webhook metadata properties for tenant: " + + CarbonContext.getThreadLocalCarbonContext().getTenantDomain()); + } try { WebhookMetadataServiceHolder.getWebhookMetadataService() .updateWebhookMetadataProperties(mapWebhookMetadataProperties(webhookMetadataProperties), CarbonContext.getThreadLocalCarbonContext() .getTenantDomain()); + if (LOG.isDebugEnabled()) { + LOG.debug("Successfully updated webhook metadata properties"); + } return getWebhookMetadata(); } catch (WebhookMetadataException e) { throw WebhookMetadataAPIErrorBuilder.buildAPIError(e); diff --git a/components/org.wso2.carbon.identity.api.server.webhook.metadata/org.wso2.carbon.identity.api.server.webhook.metadata.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/metadata/v1/factories/ServerWebhookMetadataServiceFactory.java b/components/org.wso2.carbon.identity.api.server.webhook.metadata/org.wso2.carbon.identity.api.server.webhook.metadata.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/metadata/v1/factories/ServerWebhookMetadataServiceFactory.java index 15f69e2e2e..b2aeef0e11 100644 --- a/components/org.wso2.carbon.identity.api.server.webhook.metadata/org.wso2.carbon.identity.api.server.webhook.metadata.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/metadata/v1/factories/ServerWebhookMetadataServiceFactory.java +++ b/components/org.wso2.carbon.identity.api.server.webhook.metadata/org.wso2.carbon.identity.api.server.webhook.metadata.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/metadata/v1/factories/ServerWebhookMetadataServiceFactory.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.webhook.metadata.v1.factories; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.webhook.metadata.v1.core.ServerWebhookMetadataService; /** @@ -25,6 +27,7 @@ */ public class ServerWebhookMetadataServiceFactory { + private static final Log LOG = LogFactory.getLog(ServerWebhookMetadataServiceFactory.class); private static ServerWebhookMetadataService service = new ServerWebhookMetadataService(); /** @@ -34,6 +37,9 @@ public class ServerWebhookMetadataServiceFactory { */ public static ServerWebhookMetadataService getServerWebhookMetadataService() { + if (LOG.isDebugEnabled()) { + LOG.debug("Returning ServerWebhookMetadataService instance"); + } return service; } } diff --git a/components/org.wso2.carbon.identity.api.server.webhook.metadata/org.wso2.carbon.identity.api.server.webhook.metadata.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/metadata/v1/impl/WebhooksApiServiceImpl.java b/components/org.wso2.carbon.identity.api.server.webhook.metadata/org.wso2.carbon.identity.api.server.webhook.metadata.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/metadata/v1/impl/WebhooksApiServiceImpl.java index 9bdecd49f1..16eff980eb 100644 --- a/components/org.wso2.carbon.identity.api.server.webhook.metadata/org.wso2.carbon.identity.api.server.webhook.metadata.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/metadata/v1/impl/WebhooksApiServiceImpl.java +++ b/components/org.wso2.carbon.identity.api.server.webhook.metadata/org.wso2.carbon.identity.api.server.webhook.metadata.v1/src/main/java/org/wso2/carbon/identity/api/server/webhook/metadata/v1/impl/WebhooksApiServiceImpl.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.webhook.metadata.v1.impl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.webhook.metadata.v1.WebhooksApiService; import org.wso2.carbon.identity.api.server.webhook.metadata.v1.core.ServerWebhookMetadataService; import org.wso2.carbon.identity.api.server.webhook.metadata.v1.factories.ServerWebhookMetadataServiceFactory; @@ -32,9 +34,14 @@ */ public class WebhooksApiServiceImpl implements WebhooksApiService { + private static final Log LOG = LogFactory.getLog(WebhooksApiServiceImpl.class); + @Override public Response getEventProfile(String profileName) { + if (LOG.isDebugEnabled()) { + LOG.debug("Received request to get event profile: " + profileName); + } ServerWebhookMetadataService webhookMetadataService = ServerWebhookMetadataServiceFactory.getServerWebhookMetadataService(); EventProfile eventProfile = webhookMetadataService.getEventProfile(profileName); @@ -44,6 +51,9 @@ public Response getEventProfile(String profileName) { @Override public Response getEventProfiles() { + if (LOG.isDebugEnabled()) { + LOG.debug("Received request to get all event profiles"); + } ServerWebhookMetadataService webhookMetadataService = ServerWebhookMetadataServiceFactory.getServerWebhookMetadataService(); WebhookMetadata webhookMetadata = webhookMetadataService.getWebhookMetadata(); @@ -53,6 +63,9 @@ public Response getEventProfiles() { @Override public Response patchWebhookMetadata(WebhookMetadataProperties webhookMetadataProperties) { + if (LOG.isDebugEnabled()) { + LOG.debug("Received request to patch webhook metadata properties"); + } ServerWebhookMetadataService webhookMetadataService = ServerWebhookMetadataServiceFactory.getServerWebhookMetadataService(); return Response.ok().entity(webhookMetadataService.updateWebhookMetadataProperties(webhookMetadataProperties)) @@ -62,6 +75,9 @@ public Response patchWebhookMetadata(WebhookMetadataProperties webhookMetadataPr @Override public Response putWebhookMetadataNotAllowed() { + if (LOG.isDebugEnabled()) { + LOG.debug("Received PUT request which is not allowed for webhook metadata"); + } return Response.status(Response.Status.METHOD_NOT_ALLOWED).build(); } } diff --git a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.api.server.workflow.common/src/main/java/org/wso2/carbon/identity/api/server/workflow/common/WorkflowServiceHolder.java b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.api.server.workflow.common/src/main/java/org/wso2/carbon/identity/api/server/workflow/common/WorkflowServiceHolder.java index d2c26e9166..5b23fefc5d 100644 --- a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.api.server.workflow.common/src/main/java/org/wso2/carbon/identity/api/server/workflow/common/WorkflowServiceHolder.java +++ b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.api.server.workflow.common/src/main/java/org/wso2/carbon/identity/api/server/workflow/common/WorkflowServiceHolder.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.api.server.workflow.common; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.workflow.engine.ApprovalTaskService; import org.wso2.carbon.identity.workflow.engine.ApprovalTaskServiceImpl; import org.wso2.carbon.identity.workflow.impl.WorkflowImplServiceImpl; @@ -29,22 +31,32 @@ */ public class WorkflowServiceHolder { + private static final Log log = LogFactory.getLog(WorkflowServiceHolder.class); private static final WorkflowManagementService workflowService = new WorkflowManagementServiceImpl(); private static final ApprovalTaskService approvalTaskService = new ApprovalTaskServiceImpl(); public static WorkflowManagementService getWorkflowManagementService() { + if (log.isDebugEnabled()) { + log.debug("Retrieving WorkflowManagementService instance."); + } return workflowService; } public static ApprovalTaskService getApprovalTaskService() { + if (log.isDebugEnabled()) { + log.debug("Retrieving ApprovalTaskService instance."); + } return approvalTaskService; } // This is a placeholder for the actual implementation of WorkflowImplServiceImpl. public static WorkflowImplServiceImpl getWorkflowImplService() { + if (log.isWarnEnabled()) { + log.warn("WorkflowImplService is not implemented. Returning null."); + } return null; } } diff --git a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/core/WorkflowEngineService.java b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/core/WorkflowEngineService.java index 2faa8c6209..494ef44d4e 100644 --- a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/core/WorkflowEngineService.java +++ b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/core/WorkflowEngineService.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.rest.api.server.workflow.v1.core; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.common.ContextLoader; import org.wso2.carbon.identity.api.server.common.error.APIError; import org.wso2.carbon.identity.api.server.common.error.ErrorResponse; @@ -31,27 +33,36 @@ import java.util.stream.Collectors; import javax.ws.rs.core.Response; -import static org.wso2.carbon.identity.rest.api.server.workflow.v1.core.WorkflowEngineConstants.ErrorMessage.ERROR_CODE_ERROR_RETRIEVING_BPS_PROFILES; +import static org.wso2.carbon.identity.rest.api.server.workflow.v1.core.WorkflowEngineConstants.ErrorMessage + .ERROR_CODE_ERROR_RETRIEVING_BPS_PROFILES; /** * Workflow engine service class */ public class WorkflowEngineService { + private static final Log log = LogFactory.getLog(WorkflowEngineService.class); private final WorkflowImplServiceImpl workflowImplService; public WorkflowEngineService(WorkflowImplServiceImpl workflowImplService) { + log.debug("Initializing WorkflowEngineService"); this.workflowImplService = workflowImplService; } public List listWorkflowEngines() { + log.debug("Listing workflow engines"); try { int tenantId = IdentityTenantUtil.getTenantId(ContextLoader.getTenantDomainFromContext()); - return workflowImplService.listBPSProfiles(tenantId).stream().map(new BPSProfilesToExternal()) - .collect(Collectors.toList()); + List engines = workflowImplService.listBPSProfiles(tenantId).stream() + .map(new BPSProfilesToExternal()).collect(Collectors.toList()); + if (log.isDebugEnabled()) { + log.debug("Found " + engines.size() + " workflow engines"); + } + return engines; } catch (WorkflowImplException e) { + log.error("Error retrieving BPS profiles for workflow engines", e); throw handleError(Response.Status.INTERNAL_SERVER_ERROR, ERROR_CODE_ERROR_RETRIEVING_BPS_PROFILES); } } diff --git a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/core/WorkflowService.java b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/core/WorkflowService.java index 1127489d86..1a9df70273 100644 --- a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/core/WorkflowService.java +++ b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/core/WorkflowService.java @@ -96,6 +96,9 @@ public WorkflowService(WorkflowManagementService workflowManagementService, */ public WorkflowResponse addWorkflow(WorkflowRequest workflow) { + if (workflow == null) { + throw new IllegalArgumentException("Workflow request cannot be null"); + } Workflow currentWorkflow; try { String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain(); @@ -224,6 +227,9 @@ public void removeWorkflow(String workflowId) { */ public WorkflowAssociationResponse addAssociation(WorkflowAssociationRequest workflowAssociation) { + if (workflowAssociation == null) { + throw new IllegalArgumentException("Workflow association request cannot be null"); + } try { Workflow currentWorkflow = workflowManagementService.getWorkflow(workflowAssociation.getWorkflowId()); WorkflowEvent event = workflowManagementService.getEvent(workflowAssociation.getOperation().toString()); diff --git a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/core/function/BPSProfilesToExternal.java b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/core/function/BPSProfilesToExternal.java index 72eab6f54e..80163ace26 100644 --- a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/core/function/BPSProfilesToExternal.java +++ b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/core/function/BPSProfilesToExternal.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.rest.api.server.workflow.v1.core.function; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.rest.api.server.workflow.v1.dto.WorkFlowEngineDTO; import org.wso2.carbon.identity.workflow.impl.bean.BPSProfile; @@ -28,9 +30,18 @@ */ public class BPSProfilesToExternal implements Function { + private static final Log log = LogFactory.getLog(BPSProfilesToExternal.class); + @Override public WorkFlowEngineDTO apply(BPSProfile bpsProfile) { + if (log.isDebugEnabled()) { + log.debug("Transforming BPSProfile to WorkFlowEngineDTO for profile: " + + (bpsProfile != null ? bpsProfile.getProfileName() : "null")); + } + if (bpsProfile == null) { + return new WorkFlowEngineDTO(); + } WorkFlowEngineDTO workFlowEngineDTO = new WorkFlowEngineDTO(); workFlowEngineDTO.setProfileName(bpsProfile.getProfileName()); workFlowEngineDTO.setManagerHostURL(bpsProfile.getManagerHostURL()); diff --git a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/factories/WorkflowEngineServiceFactory.java b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/factories/WorkflowEngineServiceFactory.java index 496b17ff8d..e538b5fc1d 100644 --- a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/factories/WorkflowEngineServiceFactory.java +++ b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/factories/WorkflowEngineServiceFactory.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.rest.api.server.workflow.v1.factories; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.workflow.common.WorkflowServiceHolder; import org.wso2.carbon.identity.rest.api.server.workflow.v1.core.WorkflowEngineService; @@ -26,9 +28,11 @@ */ public class WorkflowEngineServiceFactory { + private static final Log log = LogFactory.getLog(WorkflowEngineServiceFactory.class); private static final WorkflowEngineService SERVICE; static { + log.debug("Initializing WorkflowEngineService in factory"); SERVICE = new WorkflowEngineService(WorkflowServiceHolder.getWorkflowImplService()); } diff --git a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/factories/WorkflowServiceFactory.java b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/factories/WorkflowServiceFactory.java index 9ea8d19bfb..0f21c97439 100644 --- a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/factories/WorkflowServiceFactory.java +++ b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/factories/WorkflowServiceFactory.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.rest.api.server.workflow.v1.factories; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.workflow.common.WorkflowServiceHolder; import org.wso2.carbon.identity.rest.api.server.workflow.v1.core.WorkflowService; @@ -26,9 +28,11 @@ */ public class WorkflowServiceFactory { + private static final Log log = LogFactory.getLog(WorkflowServiceFactory.class); private static final WorkflowService SERVICE; static { + log.debug("Initializing WorkflowService in factory"); SERVICE = new WorkflowService(WorkflowServiceHolder.getWorkflowManagementService(), WorkflowServiceHolder.getApprovalTaskService()); } diff --git a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/impl/WorkflowAssociationsApiServiceImpl.java b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/impl/WorkflowAssociationsApiServiceImpl.java index cafba76752..7d3ad2b39f 100644 --- a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/impl/WorkflowAssociationsApiServiceImpl.java +++ b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/impl/WorkflowAssociationsApiServiceImpl.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.rest.api.server.workflow.v1.impl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.common.ContextLoader; import org.wso2.carbon.identity.rest.api.server.workflow.v1.WorkflowAssociationsApiService; import org.wso2.carbon.identity.rest.api.server.workflow.v1.core.WorkflowService; @@ -38,39 +40,52 @@ */ public class WorkflowAssociationsApiServiceImpl implements WorkflowAssociationsApiService { + private static final Log log = LogFactory.getLog(WorkflowAssociationsApiServiceImpl.class); private final WorkflowService workflowService; public WorkflowAssociationsApiServiceImpl() { - this.workflowService = WorkflowServiceFactory.getWorkflowService(); + log.debug("Initializing WorkflowAssociationsApiServiceImpl"); + this.workflowService = WorkflowServiceFactory.getWorkflowService(); } @Override public Response addWorkflowAssociation(WorkflowAssociationRequest workflowAssociationRequest) { + if (log.isDebugEnabled()) { + log.debug("Adding workflow association: " + (workflowAssociationRequest != null ? + workflowAssociationRequest.getAssociationName() : "null")); + } WorkflowAssociationResponse workflowAssociationResponse = workflowService.addAssociation(workflowAssociationRequest); URI location = ContextLoader.buildURIForHeader(V1_API_PATH_COMPONENT + WORKFLOW_ASSOCIATION_PATH_COMPONENT + "/" + workflowAssociationResponse.getId()); + log.info("Successfully added workflow association with ID: " + workflowAssociationResponse.getId()); return Response.created(location).entity(workflowAssociationResponse).build(); } @Override public Response deleteWorkflowAssociationById(String associationId) { + log.debug("Deleting workflow association with ID: " + associationId); workflowService.removeAssociation(associationId); + log.info("Successfully deleted workflow association with ID: " + associationId); return Response.noContent().build(); } @Override public Response getWorkflowAssociationById(String associationId) { + log.debug("Retrieving workflow association with ID: " + associationId); return Response.ok().entity(workflowService.getAssociation(associationId)).build(); } @Override public Response getWorkflowAssociations(Integer limit, Integer offset, String filter) { + if (log.isDebugEnabled()) { + log.debug("Listing workflow associations with limit: " + limit + ", offset: " + offset); + } return Response.ok().entity(workflowService.listPaginatedAssociations(limit, offset, filter)).build(); } @@ -78,7 +93,10 @@ public Response getWorkflowAssociations(Integer limit, Integer offset, String fi public Response updateAssociation(String associationId, WorkflowAssociationPatchRequest workflowAssociationPatchRequest) { - return Response.ok().entity(workflowService.updateAssociation(associationId, - workflowAssociationPatchRequest)).build(); + log.debug("Updating workflow association with ID: " + associationId); + WorkflowAssociationResponse response = workflowService.updateAssociation(associationId, + workflowAssociationPatchRequest); + log.info("Successfully updated workflow association with ID: " + associationId); + return Response.ok().entity(response).build(); } } diff --git a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/impl/WorkflowEnginesApiServiceImpl.java b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/impl/WorkflowEnginesApiServiceImpl.java index 7c8eb2b8d7..97a67053d2 100644 --- a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/impl/WorkflowEnginesApiServiceImpl.java +++ b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/impl/WorkflowEnginesApiServiceImpl.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.rest.api.server.workflow.v1.impl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.rest.api.server.workflow.v1.WorkflowEnginesApiService; import org.wso2.carbon.identity.rest.api.server.workflow.v1.core.WorkflowEngineService; import org.wso2.carbon.identity.rest.api.server.workflow.v1.factories.WorkflowEngineServiceFactory; @@ -29,16 +31,19 @@ */ public class WorkflowEnginesApiServiceImpl implements WorkflowEnginesApiService { + private static final Log log = LogFactory.getLog(WorkflowEnginesApiServiceImpl.class); private final WorkflowEngineService workflowEngineService; public WorkflowEnginesApiServiceImpl() { + log.debug("Initializing WorkflowEnginesApiServiceImpl"); this.workflowEngineService = WorkflowEngineServiceFactory.getWorkflowEngineService(); } @Override public Response searchWorkFlowEngines() { + log.debug("Searching for workflow engines"); return Response.ok().entity(workflowEngineService.listWorkflowEngines()).build(); } } diff --git a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/impl/WorkflowInstancesApiServiceImpl.java b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/impl/WorkflowInstancesApiServiceImpl.java index e17c58780c..6894ff0be5 100644 --- a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/impl/WorkflowInstancesApiServiceImpl.java +++ b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/impl/WorkflowInstancesApiServiceImpl.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.rest.api.server.workflow.v1.impl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.rest.api.server.workflow.v1.WorkflowInstancesApiService; import org.wso2.carbon.identity.rest.api.server.workflow.v1.core.WorkflowService; import org.wso2.carbon.identity.rest.api.server.workflow.v1.factories.WorkflowServiceFactory; @@ -29,23 +31,28 @@ */ public class WorkflowInstancesApiServiceImpl implements WorkflowInstancesApiService { + private static final Log log = LogFactory.getLog(WorkflowInstancesApiServiceImpl.class); private final WorkflowService workflowService; public WorkflowInstancesApiServiceImpl() { + log.debug("Initializing WorkflowInstancesApiServiceImpl"); this.workflowService = WorkflowServiceFactory.getWorkflowService(); } @Override public Response deleteWorkflowInstance(String instanceId) { + log.debug("Deleting workflow instance with ID: " + instanceId); workflowService.deleteWorkflowInstance(instanceId); + log.info("Successfully deleted workflow instance with ID: " + instanceId); return Response.noContent().build(); } @Override public Response getWorkflowInstanceById(String instanceId) { + log.debug("Retrieving workflow instance with ID: " + instanceId); return Response.ok().entity(workflowService.getWorkflowInstanceById(instanceId)).build(); } @@ -53,6 +60,9 @@ public Response getWorkflowInstanceById(String instanceId) { public Response getWorkflowInstances(Integer limit, Integer offset, String filter, String sortBy, String sortOrder) { + if (log.isDebugEnabled()) { + log.debug("Listing workflow instances with limit: " + limit + ", offset: " + offset); + } return Response.ok().entity(workflowService.getWorkflowInstances(limit, offset, filter)).build(); } } diff --git a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/impl/WorkflowsApiServiceImpl.java b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/impl/WorkflowsApiServiceImpl.java index ff122e3e3a..69d26e1821 100644 --- a/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/impl/WorkflowsApiServiceImpl.java +++ b/components/org.wso2.carbon.identity.api.server.workflow/org.wso2.carbon.identity.rest.api.server.workflow.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/workflow/v1/impl/WorkflowsApiServiceImpl.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.rest.api.server.workflow.v1.impl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.api.server.common.ContextLoader; import org.wso2.carbon.identity.rest.api.server.workflow.v1.WorkflowsApiService; import org.wso2.carbon.identity.rest.api.server.workflow.v1.core.WorkflowService; @@ -37,44 +39,59 @@ */ public class WorkflowsApiServiceImpl implements WorkflowsApiService { + private static final Log log = LogFactory.getLog(WorkflowsApiServiceImpl.class); private final WorkflowService workflowService; public WorkflowsApiServiceImpl() { + log.debug("Initializing WorkflowsApiServiceImpl"); this.workflowService = WorkflowServiceFactory.getWorkflowService(); } @Override public Response addWorkflow(WorkflowRequest workflowRequest) { + if (log.isDebugEnabled()) { + log.debug("Adding workflow: " + (workflowRequest != null ? workflowRequest.getName() : "null")); + } WorkflowResponse workflowResponse = workflowService.addWorkflow(workflowRequest); URI location = ContextLoader.buildURIForHeader(V1_API_PATH_COMPONENT + WORKFLOW_PATH_COMPONENT + "/" + workflowResponse.getId()); + log.info("Successfully added workflow with ID: " + workflowResponse.getId()); return Response.created(location).entity(workflowResponse).build(); } @Override public Response deleteWorkflowById(String workflowId) { + log.debug("Deleting workflow with ID: " + workflowId); workflowService.removeWorkflow(workflowId); + log.info("Successfully deleted workflow with ID: " + workflowId); return Response.noContent().build(); } @Override public Response getWorkflowById(String workflowId) { + log.debug("Retrieving workflow with ID: " + workflowId); return Response.ok().entity(workflowService.getWorkflow(workflowId)).build(); } @Override public Response getWorkflows(Integer limit, Integer offset, String filter) { + if (log.isDebugEnabled()) { + log.debug("Listing workflows with limit: " + limit + ", offset: " + offset); + } return Response.ok().entity(workflowService.listPaginatedWorkflows(limit, offset, filter)).build(); } @Override public Response updateWorkflow(String workflowId, WorkflowRequest workflowRequest) { - return Response.ok().entity(workflowService.updateWorkflow(workflowRequest, workflowId)).build(); + log.debug("Updating workflow with ID: " + workflowId); + WorkflowResponse response = workflowService.updateWorkflow(workflowRequest, workflowId); + log.info("Successfully updated workflow with ID: " + workflowId); + return Response.ok().entity(response).build(); } }