diff --git a/pom.xml b/pom.xml index 0cbd86f15..d174ed226 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.spotinst spotinst-sdk-java - 1.0.116-SNAPSHOT + 1.0.117-SNAPSHOT jar spotinst-sdk-java A Spotinst Java SDK diff --git a/src/main/java/com/spotinst/sdkjava/model/ISpotAccountAdminRepo.java b/src/main/java/com/spotinst/sdkjava/model/ISpotAccountAdminRepo.java index 8f04e895e..baff051dd 100644 --- a/src/main/java/com/spotinst/sdkjava/model/ISpotAccountAdminRepo.java +++ b/src/main/java/com/spotinst/sdkjava/model/ISpotAccountAdminRepo.java @@ -1,10 +1,28 @@ package com.spotinst.sdkjava.model; import com.spotinst.sdkjava.model.bl.admin.account.*; +import com.spotinst.sdkjava.model.bl.admin.organization.Policy; +import com.spotinst.sdkjava.model.requests.admin.account.AssignUsersToAccountsRequest; import com.spotinst.sdkjava.model.requests.admin.account.UpdateAccountRequest; +import com.spotinst.sdkjava.model.requests.admin.account.UpdateUserPermissionsRequest; +import com.spotinst.sdkjava.model.requests.admin.account.UserDetachRequest; + +import java.util.List; public interface ISpotAccountAdminRepo extends IRepository { RepoGenericResponse create(String accountName, String authToken); RepoGenericResponse update(UpdateAccountRequest request, String authToken, String account); + + RepoGenericResponse> getUsers(String authToken, String accountId); + + RepoGenericResponse updateUserPermissions(String authToken, UpdateUserPermissionsRequest request, String accountId); + + RepoGenericResponse> getUsersPermissions(String authToken, String accountId); + + RepoGenericResponse assignUsersToAccounts(String authToken, AssignUsersToAccountsRequest request, String accountId); + + RepoGenericResponse detachUser(String accountId, String authToken, UserDetachRequest request); + + RepoGenericResponse> listAccessPolicies(String authToken, String accountId); } diff --git a/src/main/java/com/spotinst/sdkjava/model/SpotinstAccountAdminClient.java b/src/main/java/com/spotinst/sdkjava/model/SpotinstAccountAdminClient.java index bed9e9bc8..0dce2fe35 100755 --- a/src/main/java/com/spotinst/sdkjava/model/SpotinstAccountAdminClient.java +++ b/src/main/java/com/spotinst/sdkjava/model/SpotinstAccountAdminClient.java @@ -5,9 +5,8 @@ import com.spotinst.sdkjava.exception.HttpError; import com.spotinst.sdkjava.exception.SpotinstHttpException; import com.spotinst.sdkjava.model.bl.admin.account.*; -import com.spotinst.sdkjava.model.requests.admin.account.AccountDeleteRequest; -import com.spotinst.sdkjava.model.requests.admin.account.ListAllAccountsRequest; -import com.spotinst.sdkjava.model.requests.admin.account.UpdateAccountRequest; +import com.spotinst.sdkjava.model.bl.admin.organization.Policy; +import com.spotinst.sdkjava.model.requests.admin.account.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -156,5 +155,141 @@ public Boolean deleteAccount(AccountDeleteRequest accountDeletionRequest) { return retVal; } - //endregion + public List getUsers(String accountId) { + + List retVal; + + RepoGenericResponse> listAccountResponse = + getSpotAccountAdminRepo().getUsers(authToken, accountId); + + if (listAccountResponse.isRequestSucceed()) { + retVal = listAccountResponse.getValue(); + } + else { + List httpExceptions = listAccountResponse.getHttpExceptions(); + HttpError httpException = httpExceptions.get(0); + LOGGER.error( + String.format("Error encountered while attempting to get the list of users. Code: %s. Message: %s.", + httpException.getCode(), httpException.getMessage())); + throw new SpotinstHttpException(httpException.getMessage()); + } + + return retVal; + } + + public Boolean updateUserPermissions(UpdateUserPermissionsRequest request, String accountId) { + + Boolean retVal; + + RepoGenericResponse isUserPermissionUpdated = + getSpotAccountAdminRepo().updateUserPermissions(authToken, request, accountId); + + if (isUserPermissionUpdated.isRequestSucceed()) { + retVal = isUserPermissionUpdated.getValue(); + } + else { + List httpExceptions = isUserPermissionUpdated.getHttpExceptions(); + HttpError httpException = httpExceptions.get(0); + + LOGGER.error( + String.format("Error encountered while attempting to update user permissions: %s. Code: %s. Message: %s.", + accountId, httpException.getCode(), httpException.getMessage())); + + throw new SpotinstHttpException(httpException.getMessage()); + } + + return retVal; + } + + public List getUsersPermissions(String accountId) { + + List retVal; + + RepoGenericResponse> response = + getSpotAccountAdminRepo().getUsersPermissions(authToken, accountId); + + if (response.isRequestSucceed()) { + retVal = response.getValue(); + } + else { + List httpExceptions = response.getHttpExceptions(); + HttpError httpException = httpExceptions.get(0); + LOGGER.error( + String.format("Error encountered while attempting to get the list of users. Code: %s. Message: %s.", + httpException.getCode(), httpException.getMessage())); + throw new SpotinstHttpException(httpException.getMessage()); + } + + return retVal; + } + + public Boolean assignUsersToAccounts(AssignUsersToAccountsRequest request, String accountId) { + + Boolean retVal; + + RepoGenericResponse response = + getSpotAccountAdminRepo().assignUsersToAccounts(authToken, request, accountId); + + if (response.isRequestSucceed()) { + retVal = response.getValue(); + } + else { + List httpExceptions = response.getHttpExceptions(); + HttpError httpException = httpExceptions.get(0); + + LOGGER.error( + String.format("Error encountered while attempting to add users to account: %s. Code: %s. Message: %s.", + accountId, httpException.getCode(), httpException.getMessage())); + + throw new SpotinstHttpException(httpException.getMessage()); + } + + return retVal; + } + + public Boolean detachUser(UserDetachRequest userDetachRequest, String accountId) { + + Boolean retVal; + + RepoGenericResponse userDetachResponse = + getSpotAccountAdminRepo().detachUser(accountId, authToken, userDetachRequest); + + if (userDetachResponse.isRequestSucceed()) { + retVal = userDetachResponse.getValue(); + } + else { + List httpExceptions = userDetachResponse.getHttpExceptions(); + HttpError httpException = httpExceptions.get(0); + + LOGGER.error( + String.format("Error encountered while attempting to detach user from account: %s. Code: %s. Message: %s.", + accountId, httpException.getCode(), httpException.getMessage())); + + throw new SpotinstHttpException(httpException.getMessage()); + } + + return retVal; + } + + public List listAccessPolicies(String accountId) { + + List retVal; + + RepoGenericResponse> listPoliciesResponse = + getSpotAccountAdminRepo().listAccessPolicies(authToken, accountId); + + if (listPoliciesResponse.isRequestSucceed()) { + retVal = listPoliciesResponse.getValue(); + } + else { + List httpExceptions = listPoliciesResponse.getHttpExceptions(); + HttpError httpException = httpExceptions.get(0); + LOGGER.error( + String.format("Error encountered while attempting to get the list of acess policies. Code: %s. Message: %s.", + httpException.getCode(), httpException.getMessage())); + throw new SpotinstHttpException(httpException.getMessage()); + } + + return retVal; + } } diff --git a/src/main/java/com/spotinst/sdkjava/model/api/admin/account/ApiUserPermissions.java b/src/main/java/com/spotinst/sdkjava/model/api/admin/account/ApiUserPermissions.java new file mode 100644 index 000000000..dad253101 --- /dev/null +++ b/src/main/java/com/spotinst/sdkjava/model/api/admin/account/ApiUserPermissions.java @@ -0,0 +1,98 @@ +package com.spotinst.sdkjava.model.api.admin.account; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.util.HashSet; +import java.util.Set; +import java.util.List; + +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ApiUserPermissions { + //region Members + @JsonIgnore + private Set isSet; + private String permissionStrategy; + private String role; + private List policyIds; + private String userId; + //endregion + + //region Constructor + private ApiUserPermissions() { + isSet = new HashSet<>(); + } + //endregion + + //region Getters & Setters + public Set getIsSet() { + return isSet; + } + + public void setIsSet(Set isSet) { + this.isSet = isSet; + } + + public String getPermissionStrategy() { + return permissionStrategy; + } + + public void setPermissionStrategy(String permissionStrategy) { + isSet.add("permissionStrategy"); + this.permissionStrategy = permissionStrategy; + } + + public String getRole() { + return role; + } + + public void setRole(String role) { + isSet.add("role"); + this.role = role; + } + + public List getPolicyIds() { + return policyIds; + } + + public void setPolicyIds(List policyIds) { + isSet.add("policyIds"); + this.policyIds = policyIds; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + isSet.add("userId"); + this.userId = userId; + } + + //endregion + + //region isSet methods + @JsonIgnore + public boolean isPermissionStrategySet() { + return isSet.contains("permissionStrategy"); + } + + @JsonIgnore + public boolean isRoleSet() { + return isSet.contains("role"); + } + + @JsonIgnore + public boolean isPolicyIdsSet() { + return isSet.contains("PolicyIds"); + } + + @JsonIgnore + public boolean isUserIdSet() { + return isSet.contains("userId"); + } + + //endregion +} diff --git a/src/main/java/com/spotinst/sdkjava/model/api/admin/account/ApiUsers.java b/src/main/java/com/spotinst/sdkjava/model/api/admin/account/ApiUsers.java new file mode 100644 index 000000000..3849e1fcd --- /dev/null +++ b/src/main/java/com/spotinst/sdkjava/model/api/admin/account/ApiUsers.java @@ -0,0 +1,101 @@ +package com.spotinst.sdkjava.model.api.admin.account; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.spotinst.sdkjava.client.rest.IPartialUpdateEntity; + +import java.util.HashSet; +import java.util.Set; +import java.util.List; + +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonFilter("PartialUpdateEntityFilter") +public class ApiUsers implements IPartialUpdateEntity { + //region Members + @JsonIgnore + private Set isSet; + private String displayName; + private String email; + private List mappedAccountIds; + private String userId; + //endregion + + //region Constructor + private ApiUsers() { + isSet = new HashSet<>(); + } + //endregion + + //region Getters & Setters + public Set getIsSet() { + return isSet; + } + + public void setIsSet(Set isSet) { + this.isSet = isSet; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + isSet.add("displayName"); + this.displayName = displayName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + isSet.add("email"); + this.email = email; + } + + public List getMappedAccountIds() { + return mappedAccountIds; + } + + public void setMappedAccountIds(List mappedAccountIds) { + isSet.add("mappedAccountIds"); + this.mappedAccountIds = mappedAccountIds; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + isSet.add("userId"); + this.userId = userId; + } + + //endregion + + //region isSet methods + @JsonIgnore + public boolean isDisplayNameSet() { + return isSet.contains("displayName"); + } + + @JsonIgnore + public boolean isEmailSet() { + return isSet.contains("email"); + } + + @JsonIgnore + public boolean isMappedAccountIdsSet() { + return isSet.contains("mappedAccountIds"); + } + + @JsonIgnore + public boolean isUserIdSet() { + return isSet.contains("userId"); + } + + //endregion +} diff --git a/src/main/java/com/spotinst/sdkjava/model/bl/admin/account/UserPermissions.java b/src/main/java/com/spotinst/sdkjava/model/bl/admin/account/UserPermissions.java new file mode 100644 index 000000000..aeacb01cf --- /dev/null +++ b/src/main/java/com/spotinst/sdkjava/model/bl/admin/account/UserPermissions.java @@ -0,0 +1,136 @@ +package com.spotinst.sdkjava.model.bl.admin.account; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class UserPermissions { + //region Members + @JsonIgnore + private Set isSet; + private String permissionStrategy; + private String role; + private List policyIds; + private String userId; + //endregion + + //region Constructor + private UserPermissions() { + isSet = new HashSet<>(); + } + //endregion + + //region Getters & Setters + public Set getIsSet() { + return isSet; + } + + public void setIsSet(Set isSet) { + this.isSet = isSet; + } + + public String getPermissionStrategy() { + return permissionStrategy; + } + + public void setPermissionStrategy(String permissionStrategy) { + isSet.add("permissionStrategy"); + this.permissionStrategy = permissionStrategy; + } + + public String getRole() { + return role; + } + + public void setRole(String role) { + isSet.add("role"); + this.role = role; + } + + public List getPolicyIds() { + return policyIds; + } + + public void setPolicyIds(List policyIds) { + isSet.add("policyIds"); + this.policyIds = policyIds; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + isSet.add("userId"); + this.userId = userId; + } + + //endregion + + //region Builder class + public static class Builder { + private UserPermissions account; + + private Builder() { + this.account = new UserPermissions(); + } + + public static Builder get() { + return new Builder(); + } + + public Builder setPermissionStrategy(final String permissionStrategy) { + account.setPermissionStrategy(permissionStrategy); + return this; + } + + public Builder setRole(final String role) { + account.setRole(role); + return this; + } + + public Builder setPolicyIds(final List policyIds) { + account.setPolicyIds(policyIds); + return this; + } + + public Builder setUserId(final String userId) { + account.setUserId(userId); + return this; + } + + public UserPermissions build() { + return account; + } + } + //endregion + + //region isSet methods + @JsonIgnore + public boolean isPermissionStrategySet() { + return isSet.contains("permissionStrategy"); + } + + @JsonIgnore + public boolean isRoleSet() { + return isSet.contains("role"); + } + + @JsonIgnore + public boolean isPolicyIdsSet() { + return isSet.contains("PolicyIds"); + } + + @JsonIgnore + public boolean isUserIdSet() { + return isSet.contains("userId"); + } + + //endregion +} diff --git a/src/main/java/com/spotinst/sdkjava/model/bl/admin/account/Users.java b/src/main/java/com/spotinst/sdkjava/model/bl/admin/account/Users.java new file mode 100644 index 000000000..5078926ca --- /dev/null +++ b/src/main/java/com/spotinst/sdkjava/model/bl/admin/account/Users.java @@ -0,0 +1,136 @@ +package com.spotinst.sdkjava.model.bl.admin.account; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.util.HashSet; +import java.util.Set; +import java.util.List; + +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Users { + //region Members + @JsonIgnore + private Set isSet; + private String displayName; + private String email; + private List mappedAccountIds; + private String userId; + //endregion + + //region Constructor + private Users() { + isSet = new HashSet<>(); + } + //endregion + + //region Getters & Setters + public Set getIsSet() { + return isSet; + } + + public void setIsSet(Set isSet) { + this.isSet = isSet; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + isSet.add("displayName"); + this.displayName = displayName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + isSet.add("email"); + this.email = email; + } + + public List getMappedAccountIds() { + return mappedAccountIds; + } + + public void setMappedAccountIds(List mappedAccountIds) { + isSet.add("mappedAccountIds"); + this.mappedAccountIds = mappedAccountIds; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + isSet.add("userId"); + this.userId = userId; + } + + //endregion + + //region Builder class + public static class Builder { + private Users account; + + private Builder() { + this.account = new Users(); + } + + public static Builder get() { + return new Builder(); + } + + public Builder setDisplayName(final String displayName) { + account.setDisplayName(displayName); + return this; + } + + public Builder setEmail(final String email) { + account.setEmail(email); + return this; + } + + public Builder setMappedAccountIds(final List mappedAccountIds) { + account.setMappedAccountIds(mappedAccountIds); + return this; + } + + public Builder setUserId(final String userId) { + account.setUserId(userId); + return this; + } + + public Users build() { + return account; + } + } + //endregion + + //region isSet methods + @JsonIgnore + public boolean isDisplayNameSet() { + return isSet.contains("displayName"); + } + + @JsonIgnore + public boolean isEmailSet() { + return isSet.contains("email"); + } + + @JsonIgnore + public boolean isMappedAccountIdsSet() { + return isSet.contains("mappedAccountIds"); + } + + @JsonIgnore + public boolean isUserIdSet() { + return isSet.contains("userId"); + } + + //endregion +} diff --git a/src/main/java/com/spotinst/sdkjava/model/converters/admin/account/AccountConverter.java b/src/main/java/com/spotinst/sdkjava/model/converters/admin/account/AccountConverter.java index 636a34c12..fb04168aa 100644 --- a/src/main/java/com/spotinst/sdkjava/model/converters/admin/account/AccountConverter.java +++ b/src/main/java/com/spotinst/sdkjava/model/converters/admin/account/AccountConverter.java @@ -1,8 +1,19 @@ package com.spotinst.sdkjava.model.converters.admin.account; import com.spotinst.sdkjava.model.api.admin.account.*; +import com.spotinst.sdkjava.model.api.admin.organization.ApiPolicy; +import com.spotinst.sdkjava.model.api.admin.organization.ApiPolicyContent; import com.spotinst.sdkjava.model.bl.admin.account.Account; import com.spotinst.sdkjava.model.bl.admin.account.BlAccountAdmin; +import com.spotinst.sdkjava.model.bl.admin.account.Users; +import com.spotinst.sdkjava.model.bl.admin.account.UserPermissions; +import com.spotinst.sdkjava.model.bl.admin.organization.Policy; +import com.spotinst.sdkjava.model.bl.admin.organization.PolicyContent; +import com.spotinst.sdkjava.model.bl.admin.organization.PolicyStatement; +import com.spotinst.sdkjava.model.converters.admin.organization.AdminOrganizationConverter; + +import java.util.List; +import java.util.stream.Collectors; public class AccountConverter { @@ -75,6 +86,118 @@ public static BlAccountAdmin toBl(ApiAccountAdmin src) { } //endregion + //region DAL -> BL + public static Users toBl(ApiUsers src) { + Users retVal = null; + + if (src != null) { + Users.Builder accountUserBuilder = Users.Builder.get(); + + if (src.isDisplayNameSet()) { + accountUserBuilder.setDisplayName(src.getDisplayName()); + } + + if (src.isEmailSet()) { + accountUserBuilder.setEmail(src.getEmail()); + } + + if (src.isMappedAccountIdsSet()) { + accountUserBuilder.setMappedAccountIds(src.getMappedAccountIds()); + } + + if (src.isUserIdSet()) { + accountUserBuilder.setUserId(src.getUserId()); + } + + retVal = accountUserBuilder.build(); + + } + + return retVal; + } + //endregion + + public static UserPermissions toBl(ApiUserPermissions src) { + UserPermissions retVal = null; + + if (src != null) { + UserPermissions.Builder accountUserBuilder = UserPermissions.Builder.get(); + + if (src.isPermissionStrategySet()) { + accountUserBuilder.setPermissionStrategy(src.getPermissionStrategy()); + } + + if (src.isPolicyIdsSet()) { + accountUserBuilder.setPolicyIds(src.getPolicyIds()); + } + + if (src.isRoleSet()) { + accountUserBuilder.setRole(src.getRole()); + } + + if (src.isUserIdSet()) { + accountUserBuilder.setUserId(src.getUserId()); + } + + retVal = accountUserBuilder.build(); + + } + + return retVal; + } + + public static Policy toBl(ApiPolicy src) { + Policy retVal = null; + + if (src != null) { + Policy.Builder accessPolicyBuilder = Policy.Builder.get(); + + if (src.isCreatedAtSet()) { + accessPolicyBuilder.setCreatedAt(src.getCreatedAt()); + } + + if (src.isDescriptionSet()) { + accessPolicyBuilder.setDescription(src.getDescription()); + } + + if (src.isIdSet()) { + accessPolicyBuilder.setId(src.getId()); + } + + if (src.isNameSet()) { + accessPolicyBuilder.setName(src.getName()); + } + + if (src.isPolicyContentSet()) { + accessPolicyBuilder.setPolicyContent(toBl(src.getPolicyContent())); + } + + if (src.isUpdatedAtSet()) { + accessPolicyBuilder.setUpdatedAt(src.getUpdatedAt()); + } + + retVal = accessPolicyBuilder.build(); + + } + + return retVal; + } + + public static PolicyContent toBl(ApiPolicyContent src) { + PolicyContent policyContent = null; + + if (src != null) { + policyContent = new PolicyContent(); + + if (src.isStatementSet()) { + List statements = + src.getStatements().stream().map(AdminOrganizationConverter::toBl).collect(Collectors.toList()); + policyContent.setStatements(statements); + } + } + return policyContent; + } + //region DAL -> BL public static Account toBl(ApiAccount src) { Account retVal = null; diff --git a/src/main/java/com/spotinst/sdkjava/model/repo/admin/account/SpotAccountAdminRepo.java b/src/main/java/com/spotinst/sdkjava/model/repo/admin/account/SpotAccountAdminRepo.java index c0c6cec89..fe8779623 100644 --- a/src/main/java/com/spotinst/sdkjava/model/repo/admin/account/SpotAccountAdminRepo.java +++ b/src/main/java/com/spotinst/sdkjava/model/repo/admin/account/SpotAccountAdminRepo.java @@ -6,10 +6,19 @@ import com.spotinst.sdkjava.model.RepoGenericResponse; import com.spotinst.sdkjava.model.api.admin.account.ApiAccountAdmin; import com.spotinst.sdkjava.model.api.admin.account.ApiAccount; +import com.spotinst.sdkjava.model.api.admin.account.ApiUsers; +import com.spotinst.sdkjava.model.api.admin.account.ApiUserPermissions; +import com.spotinst.sdkjava.model.api.admin.organization.ApiPolicy; +import com.spotinst.sdkjava.model.bl.admin.account.Users; +import com.spotinst.sdkjava.model.bl.admin.account.UserPermissions; +import com.spotinst.sdkjava.model.bl.admin.organization.Policy; import com.spotinst.sdkjava.model.converters.admin.account.AccountConverter; import com.spotinst.sdkjava.model.bl.admin.account.BlAccountAdmin; import com.spotinst.sdkjava.model.bl.admin.account.Account; +import com.spotinst.sdkjava.model.requests.admin.account.AssignUsersToAccountsRequest; import com.spotinst.sdkjava.model.requests.admin.account.UpdateAccountRequest; +import com.spotinst.sdkjava.model.requests.admin.account.UpdateUserPermissionsRequest; +import com.spotinst.sdkjava.model.requests.admin.account.UserDetachRequest; import com.spotinst.sdkjava.model.service.admin.account.SpotAccountAdminService; import java.util.List; @@ -90,4 +99,97 @@ public RepoGenericResponse delete(String identifier, String authToken, return retVal; } + @Override + public RepoGenericResponse> getUsers(String authToken, String accountId) { + RepoGenericResponse> retVal; + + try { + List apiUsersList = SpotAccountAdminService.listUsers(accountId, authToken); + List usersList = apiUsersList.stream().map(AccountConverter::toBl).collect(Collectors.toList()); + retVal = new RepoGenericResponse<>(usersList); + } + catch (SpotinstHttpException e) { + retVal = ExceptionHelper.handleHttpException(e); + } + + return retVal; + } + + @Override + public RepoGenericResponse updateUserPermissions(String authToken, UpdateUserPermissionsRequest request, String accountId) { + RepoGenericResponse retVal; + + try { + Boolean updatePermissions = SpotAccountAdminService.updatePermissions(authToken, request, accountId); + retVal = new RepoGenericResponse<>(updatePermissions); + } + catch (SpotinstHttpException e) { + retVal = ExceptionHelper.handleHttpException(e); + } + + return retVal; + } + + @Override + public RepoGenericResponse> getUsersPermissions(String authToken, String accountId) { + RepoGenericResponse> retVal; + + try { + List apiUserPermissions = SpotAccountAdminService.getUsersPermissions(accountId, authToken); + List userPermissions = apiUserPermissions.stream().map(AccountConverter::toBl).collect(Collectors.toList()); + retVal = new RepoGenericResponse<>(userPermissions); + } + catch (SpotinstHttpException e) { + retVal = ExceptionHelper.handleHttpException(e); + } + + return retVal; + } + + @Override + public RepoGenericResponse assignUsersToAccounts(String authToken, AssignUsersToAccountsRequest request, String accountId) { + RepoGenericResponse retVal; + + try { + Boolean assignUsers = SpotAccountAdminService.assignUsersToAccounts(request, accountId, authToken); + retVal = new RepoGenericResponse<>(assignUsers); + } + catch (SpotinstHttpException e) { + retVal = ExceptionHelper.handleHttpException(e); + } + + return retVal; + } + + @Override + public RepoGenericResponse detachUser(String accountId, String authToken, UserDetachRequest request) { + RepoGenericResponse retVal; + + try { + Boolean updated = SpotAccountAdminService.detachUser(accountId, authToken, request); + retVal = new RepoGenericResponse<>(updated); + + } + catch (SpotinstHttpException e) { + retVal = ExceptionHelper.handleHttpException(e); + } + + return retVal; + } + + @Override + public RepoGenericResponse> listAccessPolicies(String authToken, String accountId) { + RepoGenericResponse> retVal; + + try { + List apiPolicyList = SpotAccountAdminService.listAccessPolicies(accountId, authToken); + List usersList = apiPolicyList.stream().map(AccountConverter::toBl).collect(Collectors.toList()); + retVal = new RepoGenericResponse<>(usersList); + } + catch (SpotinstHttpException e) { + retVal = ExceptionHelper.handleHttpException(e); + } + + return retVal; + } } diff --git a/src/main/java/com/spotinst/sdkjava/model/requests/admin/account/AssignUsersToAccountsRequest.java b/src/main/java/com/spotinst/sdkjava/model/requests/admin/account/AssignUsersToAccountsRequest.java new file mode 100644 index 000000000..9f35a8ac6 --- /dev/null +++ b/src/main/java/com/spotinst/sdkjava/model/requests/admin/account/AssignUsersToAccountsRequest.java @@ -0,0 +1,108 @@ +package com.spotinst.sdkjava.model.requests.admin.account; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +public class AssignUsersToAccountsRequest { + //region Members + @JsonIgnore + private String accountId; + private String permissionStrategy; + private String role; + private String policyIds; + private String userId; + private String userEmail; + //endregion + + //region Constructor + private AssignUsersToAccountsRequest() { + } + //endregion + public String getAccountId() { + return this.accountId; + } + + public void setAccountId(String accountId) { + this.accountId = accountId; + } + + public String getPermissionStrategy() { + return this.permissionStrategy; + } + + public void setPermissionStrategy(String permissionStrategy) { + this.permissionStrategy = permissionStrategy; + } + + public String getRole() { + return this.role; + } + + public void setRole(String role) { + this.role = role; + } + + public String getPolicyIds() { + return this.policyIds; + } + + public void setPolicyIds(String policyIds) { + this.policyIds = policyIds; + } + + public String getUserId() { + return this.userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getUserEmail() { + return this.userEmail; + } + + public void setUserEmail(String userEmail) { + this.userEmail = userEmail; + } + + //endregion + + //region Builder class + public static class Builder { + private AssignUsersToAccountsRequest request; + + private Builder() { + this.request = new AssignUsersToAccountsRequest(); + } + + public static AssignUsersToAccountsRequest.Builder get() { + return new Builder(); + } + + public AssignUsersToAccountsRequest.Builder setPermissionStrategy(final String permissionStrategy) { + request.setPermissionStrategy(permissionStrategy); + return this; + } + + public AssignUsersToAccountsRequest.Builder setRole(final String role) { + request.setRole(role); + return this; + } + + public AssignUsersToAccountsRequest.Builder setPolicyIds(final String policyIds) { + request.setPolicyIds(policyIds); + return this; + } + + public AssignUsersToAccountsRequest.Builder setUserId(final String userId) { + request.setUserId(userId); + return this; + } + + public AssignUsersToAccountsRequest build() { + return request; + } + } + //endregion + +} diff --git a/src/main/java/com/spotinst/sdkjava/model/requests/admin/account/UpdateUserPermissionsRequest.java b/src/main/java/com/spotinst/sdkjava/model/requests/admin/account/UpdateUserPermissionsRequest.java new file mode 100644 index 000000000..7574aae91 --- /dev/null +++ b/src/main/java/com/spotinst/sdkjava/model/requests/admin/account/UpdateUserPermissionsRequest.java @@ -0,0 +1,93 @@ +package com.spotinst.sdkjava.model.requests.admin.account; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; + +public class UpdateUserPermissionsRequest { + //region Members + @JsonIgnore + private String permissionStrategy; + private String role; + private String policyIds; + private String userId; + //endregion + + //region Constructor + private UpdateUserPermissionsRequest() { + } + //endregion + + public String getPermissionStrategy() { + return this.permissionStrategy; + } + + public void setPermissionStrategy(String permissionStrategy) { + this.permissionStrategy = permissionStrategy; + } + + public String getRole() { + return this.role; + } + + public void setRole(String role) { + this.role = role; + } + + public String getPolicyIds() { + return this.policyIds; + } + + public void setPolicyIds(String policyIds) { + this.policyIds = policyIds; + } + + public String getUserId() { + return this.userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + //endregion + + //region Builder class + public static class Builder { + private UpdateUserPermissionsRequest request; + + private Builder() { + this.request = new UpdateUserPermissionsRequest(); + } + + public static UpdateUserPermissionsRequest.Builder get() { + return new Builder(); + } + + public UpdateUserPermissionsRequest.Builder setPermissionStrategy(final String permissionStrategy) { + request.setPermissionStrategy(permissionStrategy); + return this; + } + + public UpdateUserPermissionsRequest.Builder setRole(final String role) { + request.setRole(role); + return this; + } + + public UpdateUserPermissionsRequest.Builder setPolicyIds(final String policyIds) { + request.setPolicyIds(policyIds); + return this; + } + + public UpdateUserPermissionsRequest.Builder setUserId(final String userId) { + request.setUserId(userId); + return this; + } + + public UpdateUserPermissionsRequest build() { + return request; + } + } + //endregion + +} diff --git a/src/main/java/com/spotinst/sdkjava/model/requests/admin/account/UserDetachRequest.java b/src/main/java/com/spotinst/sdkjava/model/requests/admin/account/UserDetachRequest.java new file mode 100644 index 000000000..9c4dfbbbe --- /dev/null +++ b/src/main/java/com/spotinst/sdkjava/model/requests/admin/account/UserDetachRequest.java @@ -0,0 +1,43 @@ +package com.spotinst.sdkjava.model.requests.admin.account; + +public class UserDetachRequest { + + private String userEmail; + + private UserDetachRequest() { + } + + //Getters & Setters + public String getUserEmail() { + return userEmail; + } + + public void setUserEmail(String email) { + this.userEmail = email; + } + + //Builder class + public static class Builder { + + private UserDetachRequest request; + + private Builder() { + this.request = new UserDetachRequest(); + } + + public static UserDetachRequest.Builder get() { + return new Builder(); + } + + public UserDetachRequest.Builder setUserEmail(final String email) { + request.setUserEmail(email); + return this; + } + + public UserDetachRequest build() { + return request; + } + + } + +} diff --git a/src/main/java/com/spotinst/sdkjava/model/responses/admin/account/GetAccountUsersApiResponse.java b/src/main/java/com/spotinst/sdkjava/model/responses/admin/account/GetAccountUsersApiResponse.java new file mode 100644 index 000000000..97ff04b43 --- /dev/null +++ b/src/main/java/com/spotinst/sdkjava/model/responses/admin/account/GetAccountUsersApiResponse.java @@ -0,0 +1,14 @@ +package com.spotinst.sdkjava.model.responses.admin.account; + +import com.spotinst.sdkjava.client.response.BaseServiceItemsResponse; +import com.spotinst.sdkjava.model.api.admin.account.ApiAccountAdmin; +import com.spotinst.sdkjava.model.api.admin.account.ApiUsers; + + +/** + * Created by Amrutha Ramanathan on 19-01-2023. + */ + +public class GetAccountUsersApiResponse extends BaseServiceItemsResponse { +} + diff --git a/src/main/java/com/spotinst/sdkjava/model/responses/admin/account/GetUserPermissionsApiResponse.java b/src/main/java/com/spotinst/sdkjava/model/responses/admin/account/GetUserPermissionsApiResponse.java new file mode 100644 index 000000000..a5278f198 --- /dev/null +++ b/src/main/java/com/spotinst/sdkjava/model/responses/admin/account/GetUserPermissionsApiResponse.java @@ -0,0 +1,13 @@ +package com.spotinst.sdkjava.model.responses.admin.account; + +import com.spotinst.sdkjava.client.response.BaseServiceItemsResponse; +import com.spotinst.sdkjava.model.api.admin.account.ApiUserPermissions; + + +/** + * Created by Amrutha Ramanathan on 19-01-2023. + */ + +public class GetUserPermissionsApiResponse extends BaseServiceItemsResponse { +} + diff --git a/src/main/java/com/spotinst/sdkjava/model/service/admin/account/SpotAccountAdminService.java b/src/main/java/com/spotinst/sdkjava/model/service/admin/account/SpotAccountAdminService.java index 50e55cf13..3bfbaef59 100644 --- a/src/main/java/com/spotinst/sdkjava/model/service/admin/account/SpotAccountAdminService.java +++ b/src/main/java/com/spotinst/sdkjava/model/service/admin/account/SpotAccountAdminService.java @@ -6,15 +6,19 @@ import com.spotinst.sdkjava.exception.SpotinstHttpException; import com.spotinst.sdkjava.model.api.admin.account.ApiAccountAdmin; import com.spotinst.sdkjava.model.api.admin.account.ApiAccount; +import com.spotinst.sdkjava.model.api.admin.account.ApiUsers; +import com.spotinst.sdkjava.model.api.admin.account.ApiUserPermissions; +import com.spotinst.sdkjava.model.api.admin.organization.ApiPolicy; +import com.spotinst.sdkjava.model.requests.admin.account.AssignUsersToAccountsRequest; import com.spotinst.sdkjava.model.requests.admin.account.UpdateAccountRequest; +import com.spotinst.sdkjava.model.requests.admin.account.UpdateUserPermissionsRequest; +import com.spotinst.sdkjava.model.requests.admin.account.UserDetachRequest; import com.spotinst.sdkjava.model.responses.admin.account.*; +import com.spotinst.sdkjava.model.responses.admin.organization.PolicyApiResponse; import org.apache.http.HttpStatus; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; +import java.util.*; public class SpotAccountAdminService extends BaseSpotinstService { @@ -153,4 +157,220 @@ public static Boolean deleteAccount(String accountId, String authToken) throws S return retVal; } + public static List listUsers(String cloudAccountId, String authToken) throws SpotinstHttpException { + + // Init retVal + List retVal = new ArrayList<>(); + + // Get endpoint + SpotinstHttpConfig config = SpotinstHttpContext.getInstance().getConfiguration(); + String apiEndpoint = config.getEndpoint(); + + Map queryParams = new HashMap<>(); + + // Add account Id Query param + if (cloudAccountId != null) { + queryParams.put("accountId", cloudAccountId); + } + + // Get the headers for AWS. + Map headers = buildHeaders(authToken); + + //Build URI + String uri = String.format("%s/setup/user", apiEndpoint); + + // Send the request. + RestResponse response = RestClient.sendGet(uri, headers, queryParams); + + // Handle the response. + GetAccountUsersApiResponse accountUsersResponse = getCastedResponse(response, GetAccountUsersApiResponse.class); + + if (accountUsersResponse.getResponse().getCount() > 0) { + retVal = accountUsersResponse.getResponse().getItems(); + } + + return retVal; + } + + public static Boolean updatePermissions(String authToken, UpdateUserPermissionsRequest request, String accountId) throws SpotinstHttpException { + + // Init retVal + Boolean retVal = false; + + // Get endpoint + SpotinstHttpConfig config = SpotinstHttpContext.getInstance().getConfiguration(); + String apiEndpoint = config.getEndpoint(); + + Map queryParams = new HashMap<>(); + + // Add account Id Query param + if (accountId != null) { + queryParams.put("accountId", accountId); + } + + // Get the headers for AWS. + Map headers = buildHeaders(authToken); + + //Build URI + String uri = String.format("%s/setup/account/%s/user", apiEndpoint, accountId); + + // Write to json + Map updateRequest = new HashMap<>(); + updateRequest.put("account", request); + String body = JsonMapper.toJson(updateRequest); + + // Send the request. + RestResponse response = RestClient.sendPut(uri, body, headers, queryParams); + + // Handle the response. + BaseServiceEmptyResponse emptyResponse = getCastedResponse(response, BaseServiceEmptyResponse.class); + if (emptyResponse.getResponse().getStatus().getCode() == HttpStatus.SC_OK) { + retVal = true; + } + + return retVal; + } + + public static List getUsersPermissions(String cloudAccountId, String authToken) throws SpotinstHttpException { + + // Init retVal + List retVal = new ArrayList<>(); + + // Get endpoint + SpotinstHttpConfig config = SpotinstHttpContext.getInstance().getConfiguration(); + String apiEndpoint = config.getEndpoint(); + + Map queryParams = new HashMap<>(); + + // Add account Id Query param + if (cloudAccountId != null) { + queryParams.put("accountId", cloudAccountId); + } + + // Get the headers for AWS. + Map headers = buildHeaders(authToken); + + //Build URI + String uri = String.format("%s/setup/user/permission", apiEndpoint); + + // Send the request. + RestResponse response = RestClient.sendGet(uri, headers, queryParams); + + // Handle the response. + GetUserPermissionsApiResponse accountUsersResponse = getCastedResponse(response, GetUserPermissionsApiResponse.class); + + if (accountUsersResponse.getResponse().getCount() > 0) { + retVal = accountUsersResponse.getResponse().getItems(); + } + + return retVal; + } + + public static Boolean assignUsersToAccounts(AssignUsersToAccountsRequest request, String accountId, String authToken) throws SpotinstHttpException { + + // Init retVal + Boolean retVal = false; + + // Get endpoint + SpotinstHttpConfig config = SpotinstHttpContext.getInstance().getConfiguration(); + String apiEndpoint = config.getEndpoint(); + + // Get the headers for AWS. + Map headers = buildHeaders(authToken); + + Map queryParams = new HashMap<>(); + + // Add account Id Query param + if (accountId != null) { + queryParams.put("accountId", accountId); + } + + //Build URI + String uri = String.format("%s/setup/accountUserMapping", apiEndpoint); + + // Write to json + Map updateRequest = new HashMap<>(); + updateRequest.put("account", request); + String body = JsonMapper.toJson(updateRequest); + + // Send the request. + RestResponse response = RestClient.sendPost(uri, body, headers, null); + + // Handle the response. + BaseServiceEmptyResponse emptyResponse = getCastedResponse(response, BaseServiceEmptyResponse.class); + if (emptyResponse.getResponse().getStatus().getCode() == HttpStatus.SC_OK) { + retVal = true; + } + + return retVal; + } + + public static Boolean detachUser(String accountId, String authToken, UserDetachRequest request) throws SpotinstHttpException { + + // Init retVal + Boolean retVal = false; + + // Get endpoint + SpotinstHttpConfig config = SpotinstHttpContext.getInstance().getConfiguration(); + String apiEndpoint = config.getEndpoint(); + + Map queryParams = new HashMap<>(); + + // Get the headers for AWS. + Map headers = buildHeaders(authToken); + + //Build URI + String uri = String.format("%s/setup/account/%s/user", apiEndpoint, accountId); + + // Write to json + Map userDetachRequestMap = new HashMap<>(); + userDetachRequestMap.put("account", request); + String body = JsonMapper.toJson(userDetachRequestMap); + + // Send the request. + RestResponse response = RestClient.sendDelete(uri, body, headers, queryParams); + + // Handle the response. + BaseServiceEmptyResponse emptyResponse = getCastedResponse(response, BaseServiceEmptyResponse.class); + if (emptyResponse.getResponse().getStatus().getCode() == HttpStatus.SC_OK) { + retVal = true; + } + + return retVal; + } + + public static List listAccessPolicies(String cloudAccountId, String authToken) throws SpotinstHttpException { + + // Init retVal + List retVal = new ArrayList<>(); + + // Get endpoint + SpotinstHttpConfig config = SpotinstHttpContext.getInstance().getConfiguration(); + String apiEndpoint = config.getEndpoint(); + + Map queryParams = new HashMap<>(); + + // Add account Id Query param + if (cloudAccountId != null) { + queryParams.put("accountId", cloudAccountId); + } + + // Get the headers for AWS. + Map headers = buildHeaders(authToken); + + //Build URI + String uri = String.format("%s/setup/access/policy", apiEndpoint); + + // Send the request. + RestResponse response = RestClient.sendGet(uri, headers, queryParams); + + // Handle the response. + PolicyApiResponse accessPoliciesResponse = getCastedResponse(response, PolicyApiResponse.class); + + if (accessPoliciesResponse.getResponse().getCount() > 0) { + retVal = accessPoliciesResponse.getResponse().getItems(); + } + + return retVal; + } }