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;
+ }
}