diff --git a/components/org.wso2.carbon.identity.api.user.common/src/main/java/org/wso2/carbon/identity/api/user/common/Constants.java b/components/org.wso2.carbon.identity.api.user.common/src/main/java/org/wso2/carbon/identity/api/user/common/Constants.java index 2c2e29cd..3828a008 100644 --- a/components/org.wso2.carbon.identity.api.user.common/src/main/java/org/wso2/carbon/identity/api/user/common/Constants.java +++ b/components/org.wso2.carbon.identity.api.user.common/src/main/java/org/wso2/carbon/identity/api/user/common/Constants.java @@ -29,6 +29,8 @@ public class Constants { public static final String TENANT_CONTEXT_PATH_COMPONENT = "/t/%s"; public static final String ORGANIZATION_CONTEXT_PATH_COMPONENT = "/o"; public static final String USER_API_PATH_COMPONENT = "/api/users"; + public static final String SERVER_API_PATH_COMPONENT = "/api/servers"; + /** * Enum for user error prefixes diff --git a/components/org.wso2.carbon.identity.api.user.common/src/main/java/org/wso2/carbon/identity/api/user/common/ContextLoader.java b/components/org.wso2.carbon.identity.api.user.common/src/main/java/org/wso2/carbon/identity/api/user/common/ContextLoader.java index 252a7b4e..0634898a 100644 --- a/components/org.wso2.carbon.identity.api.user.common/src/main/java/org/wso2/carbon/identity/api/user/common/ContextLoader.java +++ b/components/org.wso2.carbon.identity.api.user.common/src/main/java/org/wso2/carbon/identity/api/user/common/ContextLoader.java @@ -41,6 +41,7 @@ import static org.wso2.carbon.identity.api.user.common.Constants.ErrorMessage.ERROR_CODE_INVALID_USERNAME; import static org.wso2.carbon.identity.api.user.common.Constants.ErrorMessage.ERROR_CODE_SERVER_ERROR; import static org.wso2.carbon.identity.api.user.common.Constants.ORGANIZATION_CONTEXT_PATH_COMPONENT; +import static org.wso2.carbon.identity.api.user.common.Constants.SERVER_API_PATH_COMPONENT; import static org.wso2.carbon.identity.api.user.common.Constants.TENANT_CONTEXT_PATH_COMPONENT; import static org.wso2.carbon.identity.api.user.common.Constants.TENANT_NAME_FROM_CONTEXT; import static org.wso2.carbon.identity.api.user.common.Constants.USER_API_PATH_COMPONENT; @@ -184,8 +185,13 @@ public static URI buildURI(String endpoint) { */ public static URI buildURIForBody(String endpoint) { + return buildURIForBody(endpoint, false); + } + + public static URI buildURIForBody(String endpoint, boolean isServerResource) { + String url; - String context = getContext(endpoint); + String context = getContext(endpoint, isServerResource); try { url = ServiceURLBuilder.create().addPath(context).build().getRelativePublicURL(); @@ -207,7 +213,7 @@ public static URI buildURIForBody(String endpoint) { public static URI buildURIForHeader(String endpoint) { URI loc; - String context = getContext(endpoint); + String context = getContext(endpoint, false); try { String url = ServiceURLBuilder.create().addPath(context).build().getAbsolutePublicURL(); @@ -225,14 +231,19 @@ public static URI buildURIForHeader(String endpoint) { * in non tenant qualified mode we need to append the tenant domain to the path manually. * * @param endpoint Relative endpoint path. + * @param isServerResource Is service URL builds for server resource. * @return Context of the API. */ - private static String getContext(String endpoint) { + private static String getContext(String endpoint, boolean isServerResource) { String context; String organizationId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getOrganizationId(); if (IdentityTenantUtil.isTenantQualifiedUrlsEnabled()) { - context = USER_API_PATH_COMPONENT + endpoint; + if (isServerResource) { + context = SERVER_API_PATH_COMPONENT + endpoint; + } else { + context = USER_API_PATH_COMPONENT + endpoint; + } if (StringUtils.isNotEmpty(organizationId)) { String tenantDomain = (String) IdentityUtil.threadLocalProperties.get() .get(OrganizationManagementConstants.ROOT_TENANT_DOMAIN); diff --git a/components/org.wso2.carbon.identity.api.user.organization/org.wso2.carbon.identity.rest.api.user.organization.v1/src/main/java/org/wso2/carbon/identity/rest/api/user/organization/v1/core/UserOrganizationService.java b/components/org.wso2.carbon.identity.api.user.organization/org.wso2.carbon.identity.rest.api.user.organization.v1/src/main/java/org/wso2/carbon/identity/rest/api/user/organization/v1/core/UserOrganizationService.java index 50d08538..a11f11c6 100644 --- a/components/org.wso2.carbon.identity.api.user.organization/org.wso2.carbon.identity.rest.api.user.organization.v1/src/main/java/org/wso2/carbon/identity/rest/api/user/organization/v1/core/UserOrganizationService.java +++ b/components/org.wso2.carbon.identity.api.user.organization/org.wso2.carbon.identity.rest.api.user.organization.v1/src/main/java/org/wso2/carbon/identity/rest/api/user/organization/v1/core/UserOrganizationService.java @@ -59,7 +59,7 @@ import static org.wso2.carbon.identity.rest.api.user.organization.v1.util.Util.getError; import static org.wso2.carbon.identity.rest.api.user.organization.v1.util.Util.handleError; import static org.wso2.carbon.identity.rest.api.user.organization.v1.util.Util.handleOrganizationManagementException; -import static org.wso2.carbon.identity.rest.api.user.organization.v1.util.Util.organizationGetURL; +import static org.wso2.carbon.identity.rest.api.user.organization.v1.util.Util.buildOrganizationURL; /** * Call internal OSGi services to perform user organization management related operations. @@ -238,7 +238,7 @@ private OrganizationsResponse getAuthorizedOrganizationsResponse(Integer limit, organizationDTO.setId(organization.getId()); organizationDTO.setName(organization.getName()); organizationDTO.setStatus(Organization.StatusEnum.valueOf(organization.getStatus())); - organizationDTO.setRef(organizationGetURL(organization.getId()).toString()); + organizationDTO.setRef(buildOrganizationURL(organization.getId()).toString()); organizationDTOs.add(organizationDTO); } organizationsResponse.setOrganizations(organizationDTOs); diff --git a/components/org.wso2.carbon.identity.api.user.organization/org.wso2.carbon.identity.rest.api.user.organization.v1/src/main/java/org/wso2/carbon/identity/rest/api/user/organization/v1/util/Util.java b/components/org.wso2.carbon.identity.api.user.organization/org.wso2.carbon.identity.rest.api.user.organization.v1/src/main/java/org/wso2/carbon/identity/rest/api/user/organization/v1/util/Util.java index 21b6884b..0faef463 100644 --- a/components/org.wso2.carbon.identity.api.user.organization/org.wso2.carbon.identity.rest.api.user.organization.v1/src/main/java/org/wso2/carbon/identity/rest/api/user/organization/v1/util/Util.java +++ b/components/org.wso2.carbon.identity.api.user.organization/org.wso2.carbon.identity.rest.api.user.organization.v1/src/main/java/org/wso2/carbon/identity/rest/api/user/organization/v1/util/Util.java @@ -38,13 +38,9 @@ import javax.ws.rs.core.Response; -import static org.wso2.carbon.identity.api.user.common.Constants.ORGANIZATION_CONTEXT_PATH_COMPONENT; -import static org.wso2.carbon.identity.api.user.common.Constants.TENANT_CONTEXT_PATH_COMPONENT; -import static org.wso2.carbon.identity.api.user.common.Constants.USER_API_PATH_COMPONENT; -import static org.wso2.carbon.identity.application.common.util.IdentityApplicationConstants.Error.UNEXPECTED_SERVER_ERROR; +import static org.wso2.carbon.identity.api.user.common.ContextLoader.buildURIForBody; import static org.wso2.carbon.identity.organization.management.service.constant.OrganizationManagementConstants.ORGANIZATION_PATH; import static org.wso2.carbon.identity.organization.management.service.constant.OrganizationManagementConstants.PATH_SEPARATOR; -import static org.wso2.carbon.identity.organization.management.service.constant.OrganizationManagementConstants.SERVER_API_PATH_COMPONENT; import static org.wso2.carbon.identity.organization.management.service.constant.OrganizationManagementConstants.V1_API_PATH_COMPONENT; /** @@ -150,57 +146,9 @@ private static String buildErrorDescription(OrganizationManagementConstants.Erro * @param organizationId The unique identifier of the organization. * @return URI */ - public static URI organizationGetURL(String organizationId) { + public static URI buildOrganizationURL(String organizationId) { return buildURIForBody(V1_API_PATH_COMPONENT + PATH_SEPARATOR + ORGANIZATION_PATH + - PATH_SEPARATOR + organizationId); - } - - private static URI buildURIForBody(String endpoint) { - - String url; - String context = getContext(endpoint); - - try { - url = ServiceURLBuilder.create().addPath(context).build().getRelativePublicURL(); - } catch (URLBuilderException e) { - String errorDescription = "Server encountered an error while building URL for response body."; - throw buildInternalServerError(e, errorDescription); - } - return URI.create(url); - } - - private static String getContext(String endpoint) { - - String context; - String organizationId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getOrganizationId(); - if (IdentityTenantUtil.isTenantQualifiedUrlsEnabled()) { - context = SERVER_API_PATH_COMPONENT + endpoint; - if (StringUtils.isNotEmpty(organizationId)) { - String tenantDomain = (String) IdentityUtil.threadLocalProperties.get() - .get(OrganizationManagementConstants.ROOT_TENANT_DOMAIN); - context = String.format(TENANT_CONTEXT_PATH_COMPONENT, tenantDomain) + - ORGANIZATION_CONTEXT_PATH_COMPONENT + context; - } - } else { - context = String.format(TENANT_CONTEXT_PATH_COMPONENT, IdentityTenantUtil.resolveTenantDomain()) + - USER_API_PATH_COMPONENT + endpoint; - } - return context; - } - - private static APIError buildInternalServerError(Exception e, String errorDescription) { - - String errorCode = UNEXPECTED_SERVER_ERROR.getCode(); - String errorMessage = "Error while building response."; - - ErrorResponse errorResponse = new ErrorResponse.Builder(). - withCode(errorCode) - .withMessage(errorMessage) - .withDescription(errorDescription) - .build(LOG, e, errorDescription); - - Response.Status status = Response.Status.INTERNAL_SERVER_ERROR; - return new APIError(status, errorResponse); + PATH_SEPARATOR + organizationId, true); } }