From 0e1d1b96a7aaea22d3125916080bd6f4321d89a5 Mon Sep 17 00:00:00 2001 From: kanapriya Date: Tue, 5 Dec 2023 15:28:56 +0530 Subject: [PATCH] Address review comments --- .../common/UserInvitationMgtConstants.java | 3 +- .../v1/model/InvitationSuccessResponse.java | 61 ++----- .../InvitationSuccessResponseResult.java | 164 ++++++++++++++++++ .../v1/core/GuestApiServiceCore.java | 52 +++--- .../organization-user-invitation.yaml | 26 +-- 5 files changed, 219 insertions(+), 87 deletions(-) create mode 100644 components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/user/invitation/management/v1/model/InvitationSuccessResponseResult.java diff --git a/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.common/src/main/java/org/wso2/carbon/identity/api/server/organization/user/invitation/management/common/UserInvitationMgtConstants.java b/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.common/src/main/java/org/wso2/carbon/identity/api/server/organization/user/invitation/management/common/UserInvitationMgtConstants.java index 2282428e3a..6b0e2f9b70 100644 --- a/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.common/src/main/java/org/wso2/carbon/identity/api/server/organization/user/invitation/management/common/UserInvitationMgtConstants.java +++ b/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.common/src/main/java/org/wso2/carbon/identity/api/server/organization/user/invitation/management/common/UserInvitationMgtConstants.java @@ -24,6 +24,7 @@ public class UserInvitationMgtConstants { public static final String ERROR_PREFIX = "OUI-"; + public static final String ERROR_FAIL_STATUS = "Fail"; /** * Enum for shared user invitation management related errors. @@ -45,7 +46,7 @@ public enum ErrorMessage { "Could not validate the confirmation code %s."), ERROR_CODE_MULTIPLE_INVITATIONS_FOR_USER("60003", "Unable to create the invitation.", - "Multiple invitations found for the user %s."), + "Multiple invitations found for users given in the list %s."), ERROR_CODE_UNSUPPORTED_LIMIT("60004", "Unsupported param.", "Limit param is not supported yet."), diff --git a/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/user/invitation/management/v1/model/InvitationSuccessResponse.java b/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/user/invitation/management/v1/model/InvitationSuccessResponse.java index 0389a1bfef..eae65df955 100644 --- a/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/user/invitation/management/v1/model/InvitationSuccessResponse.java +++ b/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/user/invitation/management/v1/model/InvitationSuccessResponse.java @@ -22,9 +22,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import java.util.ArrayList; -import java.util.List; -import org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1.model.RoleAssignmentResponse; +import org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1.model.InvitationSuccessResponseResult; import javax.validation.constraints.*; @@ -36,9 +34,7 @@ public class InvitationSuccessResponse { private String username; - private String email; - private List roles = new ArrayList<>(); - + private InvitationSuccessResponseResult result; /** * Username of the user who will be invited to the organization. This can be an email or an alphanumeric username. @@ -62,53 +58,26 @@ public void setUsername(String username) { } /** - * Email of the user who will be invited to the organization. **/ - public InvitationSuccessResponse email(String email) { + public InvitationSuccessResponse result(InvitationSuccessResponseResult result) { - this.email = email; + this.result = result; return this; } - @ApiModelProperty(example = "alex@gmail.com", required = true, value = "Email of the user who will be invited to the organization.") - @JsonProperty("email") + @ApiModelProperty(required = true, value = "") + @JsonProperty("result") @Valid - @NotNull(message = "Property email cannot be null.") + @NotNull(message = "Property result cannot be null.") - public String getEmail() { - return email; + public InvitationSuccessResponseResult getResult() { + return result; } - public void setEmail(String email) { - this.email = email; + public void setResult(InvitationSuccessResponseResult result) { + this.result = result; } - /** - * Role assignments which the user will be assigned to. - **/ - public InvitationSuccessResponse roles(List roles) { - - this.roles = roles; - return this; - } - - @ApiModelProperty(required = true, value = "Role assignments which the user will be assigned to.") - @JsonProperty("roles") - @Valid - @NotNull(message = "Property roles cannot be null.") - public List getRoles() { - return roles; - } - public void setRoles(List roles) { - this.roles = roles; - } - - public InvitationSuccessResponse addRolesItem(RoleAssignmentResponse rolesItem) { - this.roles.add(rolesItem); - return this; - } - - @Override public boolean equals(java.lang.Object o) { @@ -121,13 +90,12 @@ public boolean equals(java.lang.Object o) { } InvitationSuccessResponse invitationSuccessResponse = (InvitationSuccessResponse) o; return Objects.equals(this.username, invitationSuccessResponse.username) && - Objects.equals(this.email, invitationSuccessResponse.email) && - Objects.equals(this.roles, invitationSuccessResponse.roles); + Objects.equals(this.result, invitationSuccessResponse.result); } @Override public int hashCode() { - return Objects.hash(username, email, roles); + return Objects.hash(username, result); } @Override @@ -137,8 +105,7 @@ public String toString() { sb.append("class InvitationSuccessResponse {\n"); sb.append(" username: ").append(toIndentedString(username)).append("\n"); - sb.append(" email: ").append(toIndentedString(email)).append("\n"); - sb.append(" roles: ").append(toIndentedString(roles)).append("\n"); + sb.append(" result: ").append(toIndentedString(result)).append("\n"); sb.append("}"); return sb.toString(); } diff --git a/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/user/invitation/management/v1/model/InvitationSuccessResponseResult.java b/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/user/invitation/management/v1/model/InvitationSuccessResponseResult.java new file mode 100644 index 0000000000..a52911e4d0 --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/user/invitation/management/v1/model/InvitationSuccessResponseResult.java @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2023, WSO2 LLC. (http://www.wso2.com). + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import javax.validation.constraints.*; + +/** + * Role assignments which the user will be assigned to. + **/ + +import io.swagger.annotations.*; +import java.util.Objects; +import javax.validation.Valid; +import javax.xml.bind.annotation.*; +@ApiModel(description = "Role assignments which the user will be assigned to.") +public class InvitationSuccessResponseResult { + + private String status; + private String errorCode; + private String errorMessage; + private String errorDescription; + + /** + **/ + public InvitationSuccessResponseResult status(String status) { + + this.status = status; + return this; + } + + @ApiModelProperty(example = "Success/Fail", value = "") + @JsonProperty("status") + @Valid + public String getStatus() { + return status; + } + public void setStatus(String status) { + this.status = status; + } + + /** + **/ + public InvitationSuccessResponseResult errorCode(String errorCode) { + + this.errorCode = errorCode; + return this; + } + + @ApiModelProperty(example = "OUI-00000", value = "") + @JsonProperty("errorCode") + @Valid + public String getErrorCode() { + return errorCode; + } + public void setErrorCode(String errorCode) { + this.errorCode = errorCode; + } + + /** + **/ + public InvitationSuccessResponseResult errorMessage(String errorMessage) { + + this.errorMessage = errorMessage; + return this; + } + + @ApiModelProperty(example = "Some Error Message", value = "") + @JsonProperty("errorMessage") + @Valid + public String getErrorMessage() { + return errorMessage; + } + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + + /** + **/ + public InvitationSuccessResponseResult errorDescription(String errorDescription) { + + this.errorDescription = errorDescription; + return this; + } + + @ApiModelProperty(example = "Some Error Description", value = "") + @JsonProperty("errorDescription") + @Valid + public String getErrorDescription() { + return errorDescription; + } + public void setErrorDescription(String errorDescription) { + this.errorDescription = errorDescription; + } + + + + @Override + public boolean equals(java.lang.Object o) { + + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InvitationSuccessResponseResult invitationSuccessResponseResult = (InvitationSuccessResponseResult) o; + return Objects.equals(this.status, invitationSuccessResponseResult.status) && + Objects.equals(this.errorCode, invitationSuccessResponseResult.errorCode) && + Objects.equals(this.errorMessage, invitationSuccessResponseResult.errorMessage) && + Objects.equals(this.errorDescription, invitationSuccessResponseResult.errorDescription); + } + + @Override + public int hashCode() { + return Objects.hash(status, errorCode, errorMessage, errorDescription); + } + + @Override + public String toString() { + + StringBuilder sb = new StringBuilder(); + sb.append("class InvitationSuccessResponseResult {\n"); + + sb.append(" status: ").append(toIndentedString(status)).append("\n"); + sb.append(" errorCode: ").append(toIndentedString(errorCode)).append("\n"); + sb.append(" errorMessage: ").append(toIndentedString(errorMessage)).append("\n"); + sb.append(" errorDescription: ").append(toIndentedString(errorDescription)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n"); + } +} + diff --git a/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1/src/main/java/org/wso2/carbon/identity/api/server/organization/user/invitation/management/v1/core/GuestApiServiceCore.java b/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1/src/main/java/org/wso2/carbon/identity/api/server/organization/user/invitation/management/v1/core/GuestApiServiceCore.java index ce5b3b8b84..8632d909f4 100644 --- a/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1/src/main/java/org/wso2/carbon/identity/api/server/organization/user/invitation/management/v1/core/GuestApiServiceCore.java +++ b/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1/src/main/java/org/wso2/carbon/identity/api/server/organization/user/invitation/management/v1/core/GuestApiServiceCore.java @@ -28,29 +28,30 @@ import org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1.model.InvitationRequestBody; import org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1.model.InvitationResponse; import org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1.model.InvitationSuccessResponse; +import org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1.model.InvitationSuccessResponseResult; import org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1.model.InvitationsListResponse; import org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1.model.RoleAssignmentResponse; import org.wso2.carbon.identity.organization.user.invitation.management.InvitationCoreServiceImpl; import org.wso2.carbon.identity.organization.user.invitation.management.exception.UserInvitationMgtException; +import org.wso2.carbon.identity.organization.user.invitation.management.models.CreatedInvitation; import org.wso2.carbon.identity.organization.user.invitation.management.models.Invitation; +import org.wso2.carbon.identity.organization.user.invitation.management.models.InvitationDO; import org.wso2.carbon.identity.organization.user.invitation.management.models.RoleAssignments; import java.util.ArrayList; import java.util.List; import javax.ws.rs.core.Response; -import static org.wso2.carbon.identity.organization.user.invitation.management.constant.UserInvitationMgtConstants.ErrorMessage.ERROR_CODE_ACTIVE_INVITATION_EXISTS; +import static org.wso2.carbon.identity.api.server.organization.user.invitation.management.common.UserInvitationMgtConstants.ErrorMessage.ERROR_CODE_MULTIPLE_INVITATIONS_FOR_USER; import static org.wso2.carbon.identity.organization.user.invitation.management.constant.UserInvitationMgtConstants.ErrorMessage.ERROR_CODE_INVALID_CONFIRMATION_CODE; import static org.wso2.carbon.identity.organization.user.invitation.management.constant.UserInvitationMgtConstants.ErrorMessage.ERROR_CODE_INVALID_FILTER; import static org.wso2.carbon.identity.organization.user.invitation.management.constant.UserInvitationMgtConstants.ErrorMessage.ERROR_CODE_INVALID_INVITATION_ID; import static org.wso2.carbon.identity.organization.user.invitation.management.constant.UserInvitationMgtConstants.ErrorMessage.ERROR_CODE_INVALID_ROLE; import static org.wso2.carbon.identity.organization.user.invitation.management.constant.UserInvitationMgtConstants.ErrorMessage.ERROR_CODE_INVALID_USER; -import static org.wso2.carbon.identity.organization.user.invitation.management.constant.UserInvitationMgtConstants.ErrorMessage.ERROR_CODE_MULTIPLE_INVITATIONS_FOR_USER; import static org.wso2.carbon.identity.organization.user.invitation.management.constant.UserInvitationMgtConstants.ErrorMessage.ERROR_CODE_STORE_ROLES_APP_ID_INVALID; import static org.wso2.carbon.identity.organization.user.invitation.management.constant.UserInvitationMgtConstants.ErrorMessage.ERROR_CODE_UNSUPPORTED_FILTER_ATTRIBUTE; import static org.wso2.carbon.identity.organization.user.invitation.management.constant.UserInvitationMgtConstants.ErrorMessage.ERROR_CODE_UNSUPPORTED_FILTER_ATTRIBUTE_VALUE; import static org.wso2.carbon.identity.organization.user.invitation.management.constant.UserInvitationMgtConstants.ErrorMessage.ERROR_CODE_USER_ALREADY_EXISTS; -import static org.wso2.carbon.identity.organization.user.invitation.management.constant.UserInvitationMgtConstants.ErrorMessage.ERROR_CODE_USER_NOT_FOUND; import static javax.ws.rs.core.Response.Status.BAD_REQUEST; import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR; @@ -89,7 +90,7 @@ private static List buildRoleAssignmentResponse(Invitati public List createInvitation(InvitationRequestBody invitationRequestBody) { InvitationCoreServiceImpl invitationCoreService = new InvitationCoreServiceImpl(); - Invitation invitation = new Invitation(); + InvitationDO invitation = new InvitationDO(); invitation.setUsernamesList(invitationRequestBody.getUsernames()); invitation.setUserDomain(invitationRequestBody.getUserDomain()); if (invitationRequestBody.getRoles() != null) { @@ -101,19 +102,13 @@ public List createInvitation(InvitationRequestBody in } invitation.setRoleAssignments(roleAssignments.toArray(new RoleAssignments[0])); } - List invitationResponse; + List invitationResponse; try { invitationResponse = invitationCoreService.createInvitations(invitation); } catch (UserInvitationMgtException e) { - if (ERROR_CODE_USER_NOT_FOUND.getCode().equals(e.getErrorCode())) { - throw handleException(BAD_REQUEST, UserInvitationMgtConstants.ErrorMessage - .ERROR_CODE_USER_NOT_FOUND, invitation.getUsername()); - } else if (ERROR_CODE_MULTIPLE_INVITATIONS_FOR_USER.getCode().equals(e.getErrorCode())) { - throw handleException(BAD_REQUEST, UserInvitationMgtConstants.ErrorMessage - .ERROR_CODE_MULTIPLE_INVITATIONS_FOR_USER, invitation.getUsername()); - } else if (ERROR_CODE_ACTIVE_INVITATION_EXISTS.getCode().equals(e.getErrorCode())) { - throw handleException(BAD_REQUEST, UserInvitationMgtConstants.ErrorMessage - .ERROR_CODE_ACTIVE_INVITATION_AVAILABLE, invitation.getUsername()); + if (ERROR_CODE_MULTIPLE_INVITATIONS_FOR_USER.getCode().equals(e.getErrorCode())) { + throw handleException(BAD_REQUEST, ERROR_CODE_MULTIPLE_INVITATIONS_FOR_USER, + invitation.getUsernamesList().toString()); } else if (ERROR_CODE_STORE_ROLES_APP_ID_INVALID.getCode().equals(e.getErrorCode())) { throw handleException(BAD_REQUEST, UserInvitationMgtConstants.ErrorMessage .ERROR_CODE_INVALID_APPLICATION, StringUtils.EMPTY); @@ -123,7 +118,7 @@ public List createInvitation(InvitationRequestBody in } throw handleException(Response.Status.INTERNAL_SERVER_ERROR, UserInvitationMgtConstants.ErrorMessage.ERROR_CODE_CREATE_INVITATION, - invitation.getUsername()); + invitation.getUsernamesList().toString()); } return createInvitationSuccessResponse(invitationResponse); } @@ -252,23 +247,22 @@ private String includeData(UserInvitationMgtConstants.ErrorMessage error, String return error.getDescription(); } - private List createInvitationSuccessResponse(List invitationList) { + private List createInvitationSuccessResponse(List invitationList) { List invitationSuccessResponseList = new ArrayList<>(); - for (Invitation invitation : invitationList) { - if (invitation.getSkippedUsersList().isEmpty()) { - InvitationSuccessResponse invitationSuccessResponse = new InvitationSuccessResponse(); - invitationSuccessResponse.setUsername(invitation.getUsername()); - invitationSuccessResponse.setEmail(invitation.getEmail()); - if (invitation.getRoleAssignments().length > 0) { - List roleAssignmentResponses = buildRoleAssignmentResponse(invitation); - invitationSuccessResponse.setRoles(roleAssignmentResponses); - invitationSuccessResponseList.add(invitationSuccessResponse); - } - } else { - throw handleException(BAD_REQUEST, UserInvitationMgtConstants.ErrorMessage - .ERROR_CODE_INVALID_USER_INFORMATION, invitation.getSkippedUsersList().toString()); + for (CreatedInvitation invitation : invitationList) { + InvitationSuccessResponse invitationSuccessResponse = new InvitationSuccessResponse(); + InvitationSuccessResponseResult invitationSuccessResponseResult = new InvitationSuccessResponseResult(); + if (UserInvitationMgtConstants.ERROR_FAIL_STATUS.equals(invitation.getResult().getStatus())) { + invitationSuccessResponseResult.setErrorCode(invitation.getResult().getErrorMsg().getCode()); + invitationSuccessResponseResult.setErrorMessage(invitation.getResult().getErrorMsg().getMessage()); + invitationSuccessResponseResult.setErrorDescription(invitation.getResult().getErrorMsg() + .getDescription()); } + invitationSuccessResponseResult.setStatus(invitation.getResult().getStatus()); + invitationSuccessResponse.setUsername(invitation.getUsername()); + invitationSuccessResponse.setResult(invitationSuccessResponseResult); + invitationSuccessResponseList.add(invitationSuccessResponse); } return invitationSuccessResponseList; } diff --git a/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1/src/main/resources/organization-user-invitation.yaml b/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1/src/main/resources/organization-user-invitation.yaml index 4fca0b09b7..a84d1b48c7 100644 --- a/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1/src/main/resources/organization-user-invitation.yaml +++ b/components/org.wso2.carbon.identity.api.server.organization.user.invitation.management/org.wso2.carbon.identity.api.server.organization.user.invitation.management.v1/src/main/resources/organization-user-invitation.yaml @@ -322,23 +322,29 @@ components: type: object required: - username - - email - - roles + - result properties: username: type: string description: Username of the user who will be invited to the organization. This can be an email or an alphanumeric username. example: alex@gmail.com/alex - email: - type: string - description: Email of the user who will be invited to the organization. - example: alex@gmail.com - roles: - type: array + result: + type: object description: Role assignments which the user will be assigned to. - items: - $ref: '#/components/schemas/RoleAssignmentResponse' + properties: + status: + type: string + example: Success/Fail + errorCode: + type: string + example: OUI-00000 + errorMessage: + type: string + example: Some Error Message + errorDescription: + type: string + example: Some Error Description IntrospectRequestBody: type: object required: