This is an automated email from the ASF dual-hosted git repository.
bhliva pushed a commit to branch feature/projects
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
The following commit(s) were added to refs/heads/feature/projects by this push:
new 8f60582 DLAB-654 added possibility to define project for analytical
tool
8f60582 is described below
commit 8f60582f1177e8492705d911eceb51d158d281cc
Author: bhliva <[email protected]>
AuthorDate: Tue May 28 11:54:29 2019 +0300
DLAB-654 added possibility to define project for analytical tool
---
.../java/com/epam/dlab/dto/UserInstanceDTO.java | 7 +++
.../dlab/dto/exploratory/ExploratoryBaseDTO.java | 71 +++++++++++++---------
.../src/main/java/com/epam/dlab/auth/UserInfo.java | 6 +-
services/self-service/self-service.yml | 11 +++-
.../auth/SelfServiceSecurityAuthorizer.java | 2 +-
.../dlab/backendapi/dao/aws/AwsBillingDAO.java | 2 +-
.../dlab/backendapi/dao/azure/AzureBillingDAO.java | 2 +-
.../epam/dlab/backendapi/domain/ProjectDTO.java | 2 +-
.../backendapi/resources/ExploratoryResource.java | 4 +-
.../resources/InfrastructureTemplateResource.java | 19 +++---
.../resources/aws/ComputationalResourceAws.java | 14 +++--
.../azure/ComputationalResourceAzure.java | 12 ++--
.../resources/dto/ComputationalCreateFormDTO.java | 4 ++
.../resources/dto/ExploratoryCreateFormDTO.java | 12 ++++
.../resources/gcp/ComputationalResourceGcp.java | 16 ++---
.../com/epam/dlab/backendapi/roles/UserRoles.java | 25 +++++---
.../service/InfrastructureTemplateService.java | 4 +-
.../service/impl/ExploratoryServiceImpl.java | 7 ++-
.../impl/InfrastructureTemplateServiceBase.java | 35 ++++++++---
.../resources/ExploratoryResourceTest.java | 5 +-
.../InfrastructureTemplateResourceTest.java | 36 +++++------
.../epam/dlab/backendapi/roles/UserRolesTest.java | 16 ++---
.../InfrastructureTemplateServiceBaseTest.java | 27 +++++---
23 files changed, 212 insertions(+), 127 deletions(-)
diff --git
a/services/dlab-model/src/main/java/com/epam/dlab/dto/UserInstanceDTO.java
b/services/dlab-model/src/main/java/com/epam/dlab/dto/UserInstanceDTO.java
index a4a3e47..8cbfadb 100644
--- a/services/dlab-model/src/main/java/com/epam/dlab/dto/UserInstanceDTO.java
+++ b/services/dlab-model/src/main/java/com/epam/dlab/dto/UserInstanceDTO.java
@@ -51,6 +51,8 @@ public class UserInstanceDTO {
private String imageName;
@JsonProperty("version")
private String imageVersion;
+ @JsonProperty("version")
+ private String project;
@JsonProperty("template_name")
private String templateName;
@JsonProperty
@@ -145,6 +147,11 @@ public class UserInstanceDTO {
return this;
}
+ public UserInstanceDTO withProject(String project) {
+ setProject(project);
+ return this;
+ }
+
/**
* Sets a list of user's computational resources for notebook.
*/
diff --git
a/services/dlab-model/src/main/java/com/epam/dlab/dto/exploratory/ExploratoryBaseDTO.java
b/services/dlab-model/src/main/java/com/epam/dlab/dto/exploratory/ExploratoryBaseDTO.java
index fe97f95..1c68c75 100644
---
a/services/dlab-model/src/main/java/com/epam/dlab/dto/exploratory/ExploratoryBaseDTO.java
+++
b/services/dlab-model/src/main/java/com/epam/dlab/dto/exploratory/ExploratoryBaseDTO.java
@@ -24,32 +24,47 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.MoreObjects.ToStringHelper;
public class ExploratoryBaseDTO<T extends ExploratoryBaseDTO<?>> extends
ResourceEnvBaseDTO<T> {
- @SuppressWarnings("unchecked")
- private final T self = (T) this;
- @JsonProperty("notebook_image")
- private String notebookImage;
-
- public String getNotebookImage() {
- return notebookImage;
- }
-
- public void setNotebookImage(String notebookImage) {
- this.notebookImage = notebookImage;
- }
-
- public T withNotebookImage(String notebookImage) {
- setNotebookImage(notebookImage);
- return self;
- }
-
- @Override
- public ToStringHelper toStringHelper(Object self) {
- return super.toStringHelper(self)
- .add("notebookImage", notebookImage);
- }
-
- @Override
- public String toString() {
- return toStringHelper(this).toString();
- }
+ @SuppressWarnings("unchecked")
+ private final T self = (T) this;
+ @JsonProperty("notebook_image")
+ private String notebookImage;
+ @JsonProperty("project")
+ private String project;
+
+ public String getNotebookImage() {
+ return notebookImage;
+ }
+
+ public void setNotebookImage(String notebookImage) {
+ this.notebookImage = notebookImage;
+ }
+
+ public T withNotebookImage(String notebookImage) {
+ setNotebookImage(notebookImage);
+ return self;
+ }
+
+ public T withProject(String project) {
+ setProject(project);
+ return self;
+ }
+
+ @Override
+ public ToStringHelper toStringHelper(Object self) {
+ return super.toStringHelper(self)
+ .add("notebookImage", notebookImage);
+ }
+
+ public String getProject() {
+ return project;
+ }
+
+ public void setProject(String project) {
+ this.project = project;
+ }
+
+ @Override
+ public String toString() {
+ return toStringHelper(this).toString();
+ }
}
diff --git
a/services/dlab-webapp-common/src/main/java/com/epam/dlab/auth/UserInfo.java
b/services/dlab-webapp-common/src/main/java/com/epam/dlab/auth/UserInfo.java
index 8668a91..b0c05bf 100644
--- a/services/dlab-webapp-common/src/main/java/com/epam/dlab/auth/UserInfo.java
+++ b/services/dlab-webapp-common/src/main/java/com/epam/dlab/auth/UserInfo.java
@@ -67,7 +67,7 @@ public class UserInfo implements Principal {
}
@JsonProperty("roles")
- public Collection<String> getRoles() {
+ public Set<String> getRoles() {
return roles;
}
@@ -121,6 +121,8 @@ public class UserInfo implements Principal {
return newInfo;
}
+
+
public boolean isAwsUser() {
return awsUser;
}
@@ -161,6 +163,8 @@ public class UserInfo implements Principal {
}
+
+
@Override
public int hashCode() {
return Objects.hash(username,
diff --git a/services/self-service/self-service.yml
b/services/self-service/self-service.yml
index 855950d..0f2dcc1 100644
--- a/services/self-service/self-service.yml
+++ b/services/self-service/self-service.yml
@@ -81,7 +81,7 @@ server:
- type: https
port: 8443
certAlias: dlab
- validateCerts: true
+ validateCerts: false
keyStorePath: ${KEY_STORE_PATH}
keyStorePassword: ${KEY_STORE_PASSWORD}
trustStorePath: ${TRUST_STORE_PATH}
@@ -92,7 +92,7 @@ server:
- type: https
port: 8444
certAlias: dlab
- validateCerts: true
+ validateCerts: false
keyStorePath: ${KEY_STORE_PATH}
keyStorePassword: ${KEY_STORE_PASSWORD}
trustStorePath: ${TRUST_STORE_PATH}
@@ -105,6 +105,7 @@ logging:
loggers:
com.epam: TRACE
com.novemberain: ERROR
+ io.swagger.v3: DEBUG
appenders:
<#if DEV_MODE == "true">
- type: console
@@ -157,8 +158,12 @@ schedulers:
enabled: true
cron: "0 0 * ? * * *"
checkUserQuoteScheduler:
- enabled: true
+ enabled: false
cron: "0 0 * ? * * *"
+ checkProjectQuoteScheduler:
+ enabled: true
+ cron: "0 * * ? * * *"
+
guacamole:
connectionProtocol: ssh
diff --git
a/services/self-service/src/main/java/com/epam/dlab/backendapi/auth/SelfServiceSecurityAuthorizer.java
b/services/self-service/src/main/java/com/epam/dlab/backendapi/auth/SelfServiceSecurityAuthorizer.java
index 9b348e9..2d93b74 100644
---
a/services/self-service/src/main/java/com/epam/dlab/backendapi/auth/SelfServiceSecurityAuthorizer.java
+++
b/services/self-service/src/main/java/com/epam/dlab/backendapi/auth/SelfServiceSecurityAuthorizer.java
@@ -29,6 +29,6 @@ import io.dropwizard.auth.Authorizer;
public class SelfServiceSecurityAuthorizer implements Authorizer<UserInfo> {
@Override
public boolean authorize(UserInfo principal, String role) {
- return UserRoles.checkAccess(principal, RoleType.PAGE, role);
+ return UserRoles.checkAccess(principal, RoleType.PAGE, role,
principal.getRoles());
}
}
diff --git
a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/aws/AwsBillingDAO.java
b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/aws/AwsBillingDAO.java
index 43f4a9c..c5e0c92 100644
---
a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/aws/AwsBillingDAO.java
+++
b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/aws/AwsBillingDAO.java
@@ -84,7 +84,7 @@ public class AwsBillingDAO extends
BaseBillingDAO<AwsBillingFilter> {
public Document getReport(UserInfo userInfo, AwsBillingFilter filter) {
// Create filter
List<Bson> conditions = new ArrayList<>();
- boolean isFullReport = UserRoles.checkAccess(userInfo, RoleType.PAGE,
"/api/infrastructure_provision/billing");
+ boolean isFullReport = UserRoles.checkAccess(userInfo, RoleType.PAGE,
"/api/infrastructure_provision/billing", userInfo.getRoles());
setUserFilter(userInfo, filter, isFullReport);
addCondition(conditions, USER, filter.getUser());
addCondition(conditions, FIELD_PRODUCT, filter.getProduct());
diff --git
a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/azure/AzureBillingDAO.java
b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/azure/AzureBillingDAO.java
index 5b4db2a..42bccbc 100644
---
a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/azure/AzureBillingDAO.java
+++
b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/azure/AzureBillingDAO.java
@@ -57,7 +57,7 @@ public class AzureBillingDAO extends
BaseBillingDAO<AzureBillingFilter> {
public Document getReport(UserInfo userInfo, AzureBillingFilter filter) {
- boolean isFullReport = UserRoles.checkAccess(userInfo, RoleType.PAGE,
"/api/infrastructure_provision/billing");
+ boolean isFullReport = UserRoles.checkAccess(userInfo, RoleType.PAGE,
"/api/infrastructure_provision/billing", userInfo.getRoles());
setUserFilter(userInfo, filter, isFullReport);
List<Bson> matchCriteria = matchCriteria(filter);
diff --git
a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java
b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java
index 2eb6a05..1b60b59 100644
---
a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java
+++
b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java
@@ -12,7 +12,7 @@ public class ProjectDTO {
@NotNull
private final String name;
@NotNull
- private final Set<String>endpoints;
+ private final Set<String> endpoints;
@NotNull
private final Set<String> groups;
private final Integer budget;
diff --git
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ExploratoryResource.java
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ExploratoryResource.java
index 6e951c6..be7ad6a 100644
---
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ExploratoryResource.java
+++
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ExploratoryResource.java
@@ -79,11 +79,11 @@ public class ExploratoryResource implements ExploratoryAPI {
@Valid @NotNull
ExploratoryCreateFormDTO formDTO) {
log.debug("Creating exploratory environment {} with name {} for
user {}",
formDTO.getImage(), formDTO.getName(),
userInfo.getName());
- if (!UserRoles.checkAccess(userInfo, RoleType.EXPLORATORY,
formDTO.getImage())) {
+ if (!UserRoles.checkAccess(userInfo, RoleType.EXPLORATORY,
formDTO.getImage(), userInfo.getRoles())) {
log.warn("Unauthorized attempt to create a {} by user
{}", formDTO.getImage(), userInfo.getName());
throw new DlabException("You do not have the privileges
to create a " + formDTO.getTemplateName());
}
- String uuid = exploratoryService.create(userInfo,
getExploratory(formDTO), "");
+ String uuid = exploratoryService.create(userInfo,
getExploratory(formDTO), formDTO.getProject());
return Response.ok(uuid).build();
}
diff --git
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/InfrastructureTemplateResource.java
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/InfrastructureTemplateResource.java
index 5d8adfe..14a6572 100644
---
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/InfrastructureTemplateResource.java
+++
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/InfrastructureTemplateResource.java
@@ -32,10 +32,7 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.Authorization;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
+import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
/**
@@ -61,11 +58,12 @@ public class InfrastructureTemplateResource implements
DockerAPI {
* @param userInfo user info.
*/
@GET
- @Path("/computational_templates")
+ @Path("/{project}/computational_templates")
@ApiOperation("Returns list of cluster's templates")
public Iterable<FullComputationalTemplate>
getComputationalTemplates(@ApiParam(hidden = true)
-
@Auth UserInfo
userInfo) {
- return
infrastructureTemplateService.getComputationalTemplates(userInfo);
+
@Auth UserInfo
userInfo,
+
@PathParam("project") String project) {
+ return
infrastructureTemplateService.getComputationalTemplates(userInfo, project);
}
/**
@@ -74,10 +72,11 @@ public class InfrastructureTemplateResource implements
DockerAPI {
* @param userInfo user info.
*/
@GET
- @Path("/exploratory_templates")
+ @Path("/{project}/exploratory_templates")
@ApiOperation("Returns list of notebook's templates")
- public Iterable<ExploratoryMetadataDTO>
getExploratoryTemplates(@ApiParam(hidden = true) @Auth UserInfo userInfo) {
- return
infrastructureTemplateService.getExploratoryTemplates(userInfo);
+ public Iterable<ExploratoryMetadataDTO>
getExploratoryTemplates(@ApiParam(hidden = true) @Auth UserInfo userInfo,
+
@PathParam("project")
String project) {
+ return
infrastructureTemplateService.getExploratoryTemplates(userInfo, project);
}
}
diff --git
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java
index 6346082..68771ad 100644
---
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java
+++
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java
@@ -105,7 +105,7 @@ public class ComputationalResourceAws implements
ComputationalAPI {
.version(form.getVersion())
.build();
boolean resourceAdded =
computationalService.createDataEngineService(userInfo, form,
- awsComputationalResource);
+ awsComputationalResource,
form.getProject());
return resourceAdded ? Response.ok().build() :
Response.status(Response.Status.FOUND).build();
}
@@ -133,7 +133,7 @@ public class ComputationalResourceAws implements
ComputationalAPI {
log.debug("Create computational resources for {} | form is {}",
userInfo.getName(), form);
validate(form);
- return computationalService.createSparkCluster(userInfo, form)
+ return computationalService.createSparkCluster(userInfo, form,
form.getProject())
? Response.ok().build()
:
Response.status(Response.Status.FOUND).build();
}
@@ -195,17 +195,19 @@ public class ComputationalResourceAws implements
ComputationalAPI {
* @return 200 OK if operation is successfully triggered
*/
@PUT
- @Path("/{exploratoryName}/{computationalName}/start")
+ @Path("/{project}/{exploratoryName}/{computationalName}/start")
@ApiOperation("Starts Spark cluster on AWS")
@ApiResponses(@ApiResponse(code = 200, message = "Spark cluster on AWS
successfully started"))
public Response start(@ApiParam(hidden = true) @Auth UserInfo userInfo,
@ApiParam(value = "Notebook's
name corresponding to Spark cluster", required = true)
@PathParam("exploratoryName")
String exploratoryName,
@ApiParam(value = "Spark
cluster's name for starting", required = true)
-
@PathParam("computationalName") String computationalName) {
+
@PathParam("computationalName") String computationalName,
+ @ApiParam(value = "Project
name", required = true)
+ @PathParam("project") String
project) {
log.debug("Starting computational resource {} for user {}",
computationalName, userInfo.getName());
- computationalService.startSparkCluster(userInfo,
exploratoryName, computationalName);
+ computationalService.startSparkCluster(userInfo,
exploratoryName, computationalName, project);
return Response.ok().build();
}
@@ -260,7 +262,7 @@ public class ComputationalResourceAws implements
ComputationalAPI {
}
private void validate(UserInfo userInfo, AwsComputationalCreateForm
formDTO) {
- if (!UserRoles.checkAccess(userInfo, RoleType.COMPUTATIONAL,
formDTO.getImage())) {
+ if (!UserRoles.checkAccess(userInfo, RoleType.COMPUTATIONAL,
formDTO.getImage(), userInfo.getRoles())) {
log.warn("Unauthorized attempt to create a {} by user
{}", formDTO.getImage(), userInfo.getName());
throw new DlabException("You do not have the privileges
to create a " + formDTO.getTemplateName());
}
diff --git
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/azure/ComputationalResourceAzure.java
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/azure/ComputationalResourceAzure.java
index dcac05f..3441ada 100644
---
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/azure/ComputationalResourceAzure.java
+++
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/azure/ComputationalResourceAzure.java
@@ -95,12 +95,12 @@ public class ComputationalResourceAzure {
@Valid
@NotNull SparkStandaloneClusterCreateForm form) {
log.debug("Create computational resources for {} | form is {}",
userInfo.getName(), form);
- if (!UserRoles.checkAccess(userInfo, RoleType.COMPUTATIONAL,
form.getImage())) {
+ if (!UserRoles.checkAccess(userInfo, RoleType.COMPUTATIONAL,
form.getImage(), userInfo.getRoles())) {
log.warn("Unauthorized attempt to create a {} by user
{}", form.getImage(), userInfo.getName());
throw new DlabException("You do not have the privileges
to create a " + form.getTemplateName());
}
- return computationalService.createSparkCluster(userInfo, form)
+ return computationalService.createSparkCluster(userInfo, form,
form.getProject())
? Response.ok().build()
:
Response.status(Response.Status.FOUND).build();
@@ -165,17 +165,19 @@ public class ComputationalResourceAzure {
* @return 200 OK if operation is successfully triggered
*/
@PUT
- @Path("/{exploratoryName}/{computationalName}/start")
+ @Path("/{project}/{exploratoryName}/{computationalName}/start")
@ApiOperation("Starts Spark cluster on Azure")
@ApiResponses(@ApiResponse(code = 200, message = "Spark cluster on
Azure successfully started"))
public Response start(@ApiParam(hidden = true) @Auth UserInfo userInfo,
@ApiParam(value = "Notebook's
name corresponding to Spark cluster", required = true)
@PathParam("exploratoryName")
String exploratoryName,
@ApiParam(value = "Spark
cluster's name for starting", required = true)
-
@PathParam("computationalName") String computationalName) {
+
@PathParam("computationalName") String computationalName,
+ @ApiParam(value = "Project
name", required = true)
+ @PathParam("project") String
project) {
log.debug("Starting computational resource {} for user {}",
computationalName, userInfo.getName());
- computationalService.startSparkCluster(userInfo,
exploratoryName, computationalName);
+ computationalService.startSparkCluster(userInfo,
exploratoryName, computationalName, project);
return Response.ok().build();
}
diff --git
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ComputationalCreateFormDTO.java
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ComputationalCreateFormDTO.java
index 98d51e6..baf9bc7 100644
---
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ComputationalCreateFormDTO.java
+++
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ComputationalCreateFormDTO.java
@@ -46,6 +46,10 @@ public class ComputationalCreateFormDTO {
private String name;
@NotBlank
+ @JsonProperty
+ private String project;
+
+ @NotBlank
@JsonProperty("notebook_name")
private String notebookName;
diff --git
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ExploratoryCreateFormDTO.java
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ExploratoryCreateFormDTO.java
index c1dee78..53357d5 100644
---
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ExploratoryCreateFormDTO.java
+++
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ExploratoryCreateFormDTO.java
@@ -44,6 +44,10 @@ public class ExploratoryCreateFormDTO {
@NotBlank
@JsonProperty
+ private String project;
+
+ @NotBlank
+ @JsonProperty
private String shape;
@NotBlank
@@ -144,6 +148,14 @@ public class ExploratoryCreateFormDTO {
return clusterConfig;
}
+ public String getProject() {
+ return project;
+ }
+
+ public void setProject(String project) {
+ this.project = project;
+ }
+
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
diff --git
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java
index 87b7b02..f213e28 100644
---
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java
+++
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java
@@ -100,7 +100,7 @@ public class ComputationalResourceGcp implements
ComputationalAPI {
.version(formDTO.getVersion())
.build();
boolean resourceAdded =
computationalService.createDataEngineService(userInfo, formDTO,
- gcpComputationalResource);
+ gcpComputationalResource,
formDTO.getProject());
return resourceAdded ? Response.ok().build() :
Response.status(Response.Status.FOUND).build();
}
@@ -127,12 +127,12 @@ public class ComputationalResourceGcp implements
ComputationalAPI {
@Valid
@NotNull SparkStandaloneClusterCreateForm form) {
log.debug("Create computational resources for {} | form is {}",
userInfo.getName(), form);
- if (!UserRoles.checkAccess(userInfo, RoleType.COMPUTATIONAL,
form.getImage())) {
+ if (!UserRoles.checkAccess(userInfo, RoleType.COMPUTATIONAL,
form.getImage(), userInfo.getRoles())) {
log.warn("Unauthorized attempt to create a {} by user
{}", form.getImage(), userInfo.getName());
throw new DlabException("You do not have the privileges
to create a " + form.getTemplateName());
}
- return computationalService.createSparkCluster(userInfo, form)
+ return computationalService.createSparkCluster(userInfo, form,
form.getProject())
? Response.ok().build()
:
Response.status(Response.Status.FOUND).build();
}
@@ -196,17 +196,19 @@ public class ComputationalResourceGcp implements
ComputationalAPI {
* @return 200 OK if operation is successfully triggered
*/
@PUT
- @Path("/{exploratoryName}/{computationalName}/start")
+ @Path("/{project}/{exploratoryName}/{computationalName}/start")
@ApiOperation("Starts Spark cluster on GCP")
@ApiResponses(@ApiResponse(code = 200, message = "Spark cluster on GCP
successfully started"))
public Response start(@ApiParam(hidden = true) @Auth UserInfo userInfo,
@ApiParam(value = "Notebook's
name corresponding to Spark cluster", required = true)
@PathParam("exploratoryName")
String exploratoryName,
@ApiParam(value = "Spark
cluster's name for starting", required = true)
-
@PathParam("computationalName") String computationalName) {
+
@PathParam("computationalName") String computationalName,
+ @ApiParam(value = "Project
name", required = true)
+ @PathParam("project") String
project) {
log.debug("Starting computational resource {} for user {}",
computationalName, userInfo.getName());
- computationalService.startSparkCluster(userInfo,
exploratoryName, computationalName);
+ computationalService.startSparkCluster(userInfo,
exploratoryName, computationalName, project);
return Response.ok().build();
}
@@ -246,7 +248,7 @@ public class ComputationalResourceGcp implements
ComputationalAPI {
}
private void validate(@Auth UserInfo userInfo,
GcpComputationalCreateForm formDTO) {
- if (!UserRoles.checkAccess(userInfo, RoleType.COMPUTATIONAL,
formDTO.getImage())) {
+ if (!UserRoles.checkAccess(userInfo, RoleType.COMPUTATIONAL,
formDTO.getImage(), userInfo.getRoles())) {
log.warn("Unauthorized attempt to create a {} by user
{}", formDTO.getImage(), userInfo.getName());
throw new DlabException("You do not have the privileges
to create a " + formDTO.getTemplateName());
}
diff --git
a/services/self-service/src/main/java/com/epam/dlab/backendapi/roles/UserRoles.java
b/services/self-service/src/main/java/com/epam/dlab/backendapi/roles/UserRoles.java
index 032d232..a1fabd1 100644
---
a/services/self-service/src/main/java/com/epam/dlab/backendapi/roles/UserRoles.java
+++
b/services/self-service/src/main/java/com/epam/dlab/backendapi/roles/UserRoles.java
@@ -88,28 +88,31 @@ public class UserRoles {
* @param userInfo user info.
* @param type the type of role.
* @param name the name of role.
+ * @param roles
* @return boolean value
*/
- public static boolean checkAccess(UserInfo userInfo, RoleType type,
String name) {
- return checkAccess(userInfo, type, name, true);
+ public static boolean checkAccess(UserInfo userInfo, RoleType type,
String name, Collection<String> roles) {
+ return checkAccess(userInfo, type, name, true, roles);
}
public static boolean isAdmin(UserInfo userInfo) {
final List<UserRole> roles = UserRoles.getRoles();
return roles == null || roles.stream().anyMatch(r ->
ADMIN_ROLE_NAME.equals(r.getId()) &&
- (userRoles.hasAccessByGroup(userInfo, r) ||
userRoles.hasAccessByUserName(userInfo, r)));
+ (userRoles.hasAccessByGroup(userInfo, r,
userInfo.getRoles()) || userRoles.hasAccessByUserName(userInfo, r)));
}
/**
* Check access for user to the role.
*
+ * @param roles
* @param userInfo user info.
* @param type the type of role.
* @param name the name of role.
* @return boolean value
*/
- public static boolean checkAccess(UserInfo userInfo, RoleType type,
String name, boolean useDefault) {
- return (userRoles == null || userRoles.hasAccess(userInfo,
type, name, useDefault));
+ public static boolean checkAccess(UserInfo userInfo, RoleType type,
String name, boolean useDefault,
+
Collection<String> roles) {
+ return (userRoles == null || userRoles.hasAccess(userInfo,
type, name, useDefault, roles));
}
/**
@@ -216,9 +219,11 @@ public class UserRoles {
* @param type the type of role.
* @param name the name of role.
* @param useDefault true/false
+ * @param roles
* @return boolean value
*/
- private boolean hasAccess(UserInfo userInfo, RoleType type, String
name, boolean useDefault) {
+ private boolean hasAccess(UserInfo userInfo, RoleType type, String
name, boolean useDefault,
+ Collection<String>
roles) {
if (userRoles == null) {
return true;
}
@@ -228,18 +233,18 @@ public class UserRoles {
if (role == null) {
return checkDefault(useDefault);
}
- if (hasAccessByGroup(userInfo, role)) return true;
+ if (hasAccessByGroup(userInfo, role, roles)) return true;
LOGGER.trace("Access denied for user {} to {}/{}",
userInfo.getName(), type, name);
return false;
}
- private boolean hasAccessByGroup(UserInfo userInfo, UserRole role) {
+ private boolean hasAccessByGroup(UserInfo userInfo, UserRole role,
Collection<String> userRoles) {
Set<String> groups = role.getGroups();
if (groups != null) {
if (groups.contains(ANY_USER)) {
return true;
}
- for (String group : userInfo.getRoles()) {
+ for (String group : userRoles) {
if (group != null &&
groups.contains(group.toLowerCase())) {
LOGGER.trace("Got access by group {}",
group);
return true;
@@ -248,7 +253,7 @@ public class UserRoles {
final Optional<String> group = role.getGroups()
.stream()
- .filter(g -> userGroups.getOrDefault(g,
Collections.emptySet()).contains(userInfo.getName()))
+ .filter(g -> userRoles.contains(g) &&
userGroups.getOrDefault(g, Collections.emptySet()).contains(userInfo.getName()))
.findAny();
if (group.isPresent()) {
LOGGER.trace("Got access by local group {}",
group.get());
diff --git
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/InfrastructureTemplateService.java
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/InfrastructureTemplateService.java
index 75d2b2b..4d6eba5 100644
---
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/InfrastructureTemplateService.java
+++
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/InfrastructureTemplateService.java
@@ -26,7 +26,7 @@ import com.epam.dlab.dto.imagemetadata.ExploratoryMetadataDTO;
import java.util.List;
public interface InfrastructureTemplateService {
- List<ExploratoryMetadataDTO> getExploratoryTemplates(UserInfo user);
+ List<ExploratoryMetadataDTO> getExploratoryTemplates(UserInfo user,
String project);
- List<FullComputationalTemplate> getComputationalTemplates(UserInfo
user);
+ List<FullComputationalTemplate> getComputationalTemplates(UserInfo
user, String project);
}
diff --git
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
index bdfa155..a03f9c9 100644
---
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
+++
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
@@ -95,7 +95,7 @@ public class ExploratoryServiceImpl implements
ExploratoryService {
public String create(UserInfo userInfo, Exploratory exploratory,
@Project String project) {
boolean isAdded = false;
try {
-
exploratoryDAO.insertExploratory(getUserInstanceDTO(userInfo, exploratory));
+
exploratoryDAO.insertExploratory(getUserInstanceDTO(userInfo, exploratory,
project));
isAdded = true;
final ExploratoryGitCredsDTO gitCreds =
gitCredsDAO.findGitCreds(userInfo.getName());
log.debug("Created exploratory environment {} for user
{}", exploratory.getName(), userInfo.getName());
@@ -310,7 +310,7 @@ public class ExploratoryServiceImpl implements
ExploratoryService {
.withStatus(status);
}
- private UserInstanceDTO getUserInstanceDTO(UserInfo userInfo,
Exploratory exploratory) {
+ private UserInstanceDTO getUserInstanceDTO(UserInfo userInfo,
Exploratory exploratory, String project) {
final UserInstanceDTO userInstance = new UserInstanceDTO()
.withUser(userInfo.getName())
.withExploratoryName(exploratory.getName())
@@ -319,7 +319,8 @@ public class ExploratoryServiceImpl implements
ExploratoryService {
.withImageVersion(exploratory.getVersion())
.withTemplateName(exploratory.getTemplateName())
.withClusterConfig(exploratory.getClusterConfig())
- .withShape(exploratory.getShape());
+ .withShape(exploratory.getShape())
+ .withProject(project);
if (StringUtils.isNotBlank(exploratory.getImageName())) {
final List<LibInstallDTO> libInstallDtoList =
getImageRelatedLibraries(userInfo, exploratory
.getImageName());
diff --git
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBase.java
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBase.java
index 4193fc6..e597d94 100644
---
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBase.java
+++
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBase.java
@@ -21,7 +21,9 @@ package com.epam.dlab.backendapi.service.impl;
import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.SelfServiceApplicationConfiguration;
+import com.epam.dlab.backendapi.dao.ProjectDAO;
import com.epam.dlab.backendapi.dao.SettingsDAO;
+import com.epam.dlab.backendapi.domain.ProjectDTO;
import com.epam.dlab.backendapi.resources.dto.SparkStandaloneConfiguration;
import com.epam.dlab.backendapi.roles.RoleType;
import com.epam.dlab.backendapi.roles.UserRoles;
@@ -43,6 +45,7 @@ import lombok.extern.slf4j.Slf4j;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.stream.Collectors;
import static com.epam.dlab.rest.contracts.DockerAPI.DOCKER_COMPUTATIONAL;
@@ -56,6 +59,8 @@ public abstract class InfrastructureTemplateServiceBase
implements Infrastructur
@Inject
private SettingsDAO settingsDAO;
+ @Inject
+ private ProjectDAO projectDAO;
@Inject
@@ -63,18 +68,20 @@ public abstract class InfrastructureTemplateServiceBase
implements Infrastructur
private RESTService provisioningService;
@Override
- public List<ExploratoryMetadataDTO> getExploratoryTemplates(UserInfo
user) {
+ public List<ExploratoryMetadataDTO> getExploratoryTemplates(UserInfo
user, String project) {
- log.debug("Loading list of exploratory templates for user {}",
user.getName());
+ log.debug("Loading list of exploratory templates for user {}
for project {}", user.getName(), project);
try {
ExploratoryMetadataDTO[] array =
provisioningService.get(DOCKER_EXPLORATORY, user.getAccessToken(),
ExploratoryMetadataDTO[].class);
+ final Set<String> roles = getRoles(user, project);
return Arrays.stream(array)
.peek(e ->
e.setImage(getSimpleImageName(e.getImage())))
.filter(e ->
exploratoryGpuIssuesAzureFilter(e) &&
-
UserRoles.checkAccess(user, RoleType.EXPLORATORY, e.getImage()))
- .peek(e -> filterShapes(user,
e.getExploratoryEnvironmentShapes(), RoleType.EXPLORATORY_SHAPES))
+
UserRoles.checkAccess(user, RoleType.EXPLORATORY, e.getImage(), roles))
+ .peek(e -> filterShapes(user,
e.getExploratoryEnvironmentShapes(), RoleType.EXPLORATORY_SHAPES,
+ roles))
.collect(Collectors.toList());
} catch (DlabException e) {
@@ -89,15 +96,16 @@ public abstract class InfrastructureTemplateServiceBase
implements Infrastructur
* @param user user
* @param environmentShapes shape types
* @param roleType
+ * @param roles
*/
private void filterShapes(UserInfo user, Map<String,
List<ComputationalResourceShapeDto>> environmentShapes,
- RoleType roleType) {
+ RoleType roleType,
Set<String> roles) {
environmentShapes.forEach((k, v) -> v.removeIf(compResShapeDto
->
- !UserRoles.checkAccess(user, roleType,
compResShapeDto.getType())));
+ !UserRoles.checkAccess(user, roleType,
compResShapeDto.getType(), roles)));
}
@Override
- public List<FullComputationalTemplate>
getComputationalTemplates(UserInfo user) {
+ public List<FullComputationalTemplate>
getComputationalTemplates(UserInfo user, String project) {
log.debug("Loading list of computational templates for user
{}", user.getName());
try {
@@ -105,10 +113,13 @@ public abstract class InfrastructureTemplateServiceBase
implements Infrastructur
provisioningService.get(DOCKER_COMPUTATIONAL, user.getAccessToken(),
ComputationalMetadataDTO[]
.class);
+ final Set<String> roles = getRoles(user, project);
+
return Arrays.stream(array)
.peek(e ->
e.setImage(getSimpleImageName(e.getImage())))
- .peek(e -> filterShapes(user,
e.getComputationResourceShapes(), RoleType.COMPUTATIONAL_SHAPES))
- .filter(e ->
UserRoles.checkAccess(user, RoleType.COMPUTATIONAL, e.getImage()))
+ .peek(e -> filterShapes(user,
e.getComputationResourceShapes(), RoleType.COMPUTATIONAL_SHAPES,
+ user.getRoles()))
+ .filter(e ->
UserRoles.checkAccess(user, RoleType.COMPUTATIONAL, e.getImage(), roles))
.map(this::fullComputationalTemplate)
.collect(Collectors.toList());
@@ -118,6 +129,12 @@ public abstract class InfrastructureTemplateServiceBase
implements Infrastructur
}
}
+ private Set<String> getRoles(UserInfo user, String project) {
+ return projectDAO.get(project)
+ .map(ProjectDTO::getGroups)
+ .orElse(user.getRoles());
+ }
+
protected abstract FullComputationalTemplate
getCloudFullComputationalTemplate(ComputationalMetadataDTO
metadataDTO);
diff --git
a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ExploratoryResourceTest.java
b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ExploratoryResourceTest.java
index 0266a8b..0462732 100644
---
a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ExploratoryResourceTest.java
+++
b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ExploratoryResourceTest.java
@@ -74,7 +74,7 @@ public class ExploratoryResourceTest extends TestBase {
assertEquals("someUuid", response.readEntity(String.class));
assertEquals(MediaType.APPLICATION_JSON,
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
- verify(exploratoryService).create(getUserInfo(),
getExploratory(getExploratoryCreateFormDTO()), "");
+ verify(exploratoryService).create(getUserInfo(),
getExploratory(getExploratoryCreateFormDTO()), "project");
verifyNoMoreInteractions(exploratoryService);
}
@@ -111,7 +111,7 @@ public class ExploratoryResourceTest extends TestBase {
assertTrue(actualJson.contains(expectedJson));
assertEquals(MediaType.APPLICATION_JSON,
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
- verify(exploratoryService).create(getUserInfo(),
getExploratory(getExploratoryCreateFormDTO()), anyString());
+ verify(exploratoryService).create(getUserInfo(),
getExploratory(getExploratoryCreateFormDTO()), "project");
verifyNoMoreInteractions(exploratoryService);
}
@@ -303,6 +303,7 @@ public class ExploratoryResourceTest extends TestBase {
ecfDto.setShape("someShape");
ecfDto.setVersion("someVersion");
ecfDto.setImageName("someImageName");
+ ecfDto.setProject("project");
return ecfDto;
}
diff --git
a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/InfrastructureTemplateResourceTest.java
b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/InfrastructureTemplateResourceTest.java
index a054ff7..f4f57db 100644
---
a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/InfrastructureTemplateResourceTest.java
+++
b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/InfrastructureTemplateResourceTest.java
@@ -60,10 +60,10 @@ public class InfrastructureTemplateResourceTest extends
TestBase {
public void getComputationalTemplates() {
FullComputationalTemplate fullComputationalTemplate =
new FullComputationalTemplate(new
ComputationalMetadataDTO());
-
when(infrastructureTemplateService.getComputationalTemplates(any(UserInfo.class)))
+
when(infrastructureTemplateService.getComputationalTemplates(any(UserInfo.class),
anyString()))
.thenReturn(Collections.singletonList(fullComputationalTemplate));
final Response response = resources.getJerseyTest()
-
.target("/infrastructure_templates/computational_templates")
+
.target("/infrastructure_templates/test/computational_templates")
.request()
.header("Authorization", "Bearer " + TOKEN)
.get();
@@ -71,7 +71,7 @@ public class InfrastructureTemplateResourceTest extends
TestBase {
assertEquals(HttpStatus.SC_OK, response.getStatus());
assertEquals(MediaType.APPLICATION_JSON,
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
-
verify(infrastructureTemplateService).getComputationalTemplates(getUserInfo());
+
verify(infrastructureTemplateService).getComputationalTemplates(getUserInfo(),
"test");
verifyNoMoreInteractions(infrastructureTemplateService);
}
@@ -80,10 +80,10 @@ public class InfrastructureTemplateResourceTest extends
TestBase {
authFailSetup();
FullComputationalTemplate fullComputationalTemplate =
new FullComputationalTemplate(new
ComputationalMetadataDTO());
-
when(infrastructureTemplateService.getComputationalTemplates(any(UserInfo.class)))
+
when(infrastructureTemplateService.getComputationalTemplates(any(UserInfo.class),
anyString()))
.thenReturn(Collections.singletonList(fullComputationalTemplate));
final Response response = resources.getJerseyTest()
-
.target("/infrastructure_templates/computational_templates")
+
.target("/infrastructure_templates/test/computational_templates")
.request()
.header("Authorization", "Bearer " + TOKEN)
.get();
@@ -91,16 +91,16 @@ public class InfrastructureTemplateResourceTest extends
TestBase {
assertEquals(HttpStatus.SC_OK, response.getStatus());
assertEquals(MediaType.APPLICATION_JSON,
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
-
verify(infrastructureTemplateService).getComputationalTemplates(getUserInfo());
+
verify(infrastructureTemplateService).getComputationalTemplates(getUserInfo(),
"test");
verifyNoMoreInteractions(infrastructureTemplateService);
}
@Test
public void getComputationalTemplatesWithException() {
doThrow(new DlabException("Could not load list of computational
templates for user"))
-
.when(infrastructureTemplateService).getComputationalTemplates(any(UserInfo.class));
+
.when(infrastructureTemplateService).getComputationalTemplates(any(UserInfo.class),
anyString());
final Response response = resources.getJerseyTest()
-
.target("/infrastructure_templates/computational_templates")
+
.target("/infrastructure_templates/test/computational_templates")
.request()
.header("Authorization", "Bearer " + TOKEN)
.get();
@@ -108,7 +108,7 @@ public class InfrastructureTemplateResourceTest extends
TestBase {
assertEquals(HttpStatus.SC_INTERNAL_SERVER_ERROR,
response.getStatus());
assertEquals(MediaType.APPLICATION_JSON,
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
-
verify(infrastructureTemplateService).getComputationalTemplates(getUserInfo());
+
verify(infrastructureTemplateService).getComputationalTemplates(getUserInfo(),
"test");
verifyNoMoreInteractions(infrastructureTemplateService);
}
@@ -116,10 +116,10 @@ public class InfrastructureTemplateResourceTest extends
TestBase {
public void getExploratoryTemplates() {
ExploratoryMetadataDTO exploratoryMetadataDTO =
new ExploratoryMetadataDTO("someImageName");
-
when(infrastructureTemplateService.getExploratoryTemplates(any(UserInfo.class)))
+
when(infrastructureTemplateService.getExploratoryTemplates(any(UserInfo.class),
anyString()))
.thenReturn(Collections.singletonList(exploratoryMetadataDTO));
final Response response = resources.getJerseyTest()
-
.target("/infrastructure_templates/exploratory_templates")
+
.target("/infrastructure_templates/test/exploratory_templates")
.request()
.header("Authorization", "Bearer " + TOKEN)
.get();
@@ -130,7 +130,7 @@ public class InfrastructureTemplateResourceTest extends
TestBase {
}));
assertEquals(MediaType.APPLICATION_JSON,
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
-
verify(infrastructureTemplateService).getExploratoryTemplates(getUserInfo());
+
verify(infrastructureTemplateService).getExploratoryTemplates(getUserInfo(),
"test");
verifyNoMoreInteractions(infrastructureTemplateService);
}
@@ -139,10 +139,10 @@ public class InfrastructureTemplateResourceTest extends
TestBase {
authFailSetup();
ExploratoryMetadataDTO exploratoryMetadataDTO =
new ExploratoryMetadataDTO("someImageName");
-
when(infrastructureTemplateService.getExploratoryTemplates(any(UserInfo.class)))
+
when(infrastructureTemplateService.getExploratoryTemplates(any(UserInfo.class),
anyString()))
.thenReturn(Collections.singletonList(exploratoryMetadataDTO));
final Response response = resources.getJerseyTest()
-
.target("/infrastructure_templates/exploratory_templates")
+
.target("/infrastructure_templates/test/exploratory_templates")
.request()
.header("Authorization", "Bearer " + TOKEN)
.get();
@@ -153,7 +153,7 @@ public class InfrastructureTemplateResourceTest extends
TestBase {
}));
assertEquals(MediaType.APPLICATION_JSON,
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
-
verify(infrastructureTemplateService).getExploratoryTemplates(getUserInfo());
+
verify(infrastructureTemplateService).getExploratoryTemplates(getUserInfo(),
"test");
verifyNoMoreInteractions(infrastructureTemplateService);
}
@@ -161,9 +161,9 @@ public class InfrastructureTemplateResourceTest extends
TestBase {
@Test
public void getExploratoryTemplatesWithException() {
doThrow(new DlabException("Could not load list of exploratory
templates for user"))
-
.when(infrastructureTemplateService).getExploratoryTemplates(any(UserInfo.class));
+
.when(infrastructureTemplateService).getExploratoryTemplates(any(UserInfo.class),
anyString());
final Response response = resources.getJerseyTest()
-
.target("/infrastructure_templates/exploratory_templates")
+
.target("/infrastructure_templates/test/exploratory_templates")
.request()
.header("Authorization", "Bearer " + TOKEN)
.get();
@@ -171,7 +171,7 @@ public class InfrastructureTemplateResourceTest extends
TestBase {
assertEquals(HttpStatus.SC_INTERNAL_SERVER_ERROR,
response.getStatus());
assertEquals(MediaType.APPLICATION_JSON,
response.getHeaderString(HttpHeaders.CONTENT_TYPE));
-
verify(infrastructureTemplateService).getExploratoryTemplates(getUserInfo());
+
verify(infrastructureTemplateService).getExploratoryTemplates(getUserInfo(),
"test");
verifyNoMoreInteractions(infrastructureTemplateService);
}
}
diff --git
a/services/self-service/src/test/java/com/epam/dlab/backendapi/roles/UserRolesTest.java
b/services/self-service/src/test/java/com/epam/dlab/backendapi/roles/UserRolesTest.java
index d974c81..0fa4c94 100644
---
a/services/self-service/src/test/java/com/epam/dlab/backendapi/roles/UserRolesTest.java
+++
b/services/self-service/src/test/java/com/epam/dlab/backendapi/roles/UserRolesTest.java
@@ -75,14 +75,14 @@ public class UserRolesTest {
when(cursor.next()).thenReturn(doc1).thenReturn(doc2);
UserRoles.initialize(dao, true);
- assertTrue(UserRoles.checkAccess(userInfoDev,
RoleType.EXPLORATORY_SHAPES, "shape_1"));
- assertTrue(UserRoles.checkAccess(userInfoDev,
RoleType.EXPLORATORY_SHAPES, "shape_2"));
- assertTrue(UserRoles.checkAccess(userInfoDev,
RoleType.EXPLORATORY_SHAPES, "shape_3"));
- assertTrue(UserRoles.checkAccess(userInfoDev,
RoleType.EXPLORATORY_SHAPES, "someShape"));
+ assertTrue(UserRoles.checkAccess(userInfoDev,
RoleType.EXPLORATORY_SHAPES, "shape_1", userInfoDev.getRoles()));
+ assertTrue(UserRoles.checkAccess(userInfoDev,
RoleType.EXPLORATORY_SHAPES, "shape_2", userInfoDev.getRoles()));
+ assertTrue(UserRoles.checkAccess(userInfoDev,
RoleType.EXPLORATORY_SHAPES, "shape_3", userInfoDev.getRoles()));
+ assertTrue(UserRoles.checkAccess(userInfoDev,
RoleType.EXPLORATORY_SHAPES, "someShape", userInfoDev.getRoles()));
- assertFalse(UserRoles.checkAccess(userInfoTest,
RoleType.EXPLORATORY_SHAPES, "shape_1"));
- assertFalse(UserRoles.checkAccess(userInfoTest,
RoleType.EXPLORATORY_SHAPES, "shape_2"));
- assertFalse(UserRoles.checkAccess(userInfoTest,
RoleType.EXPLORATORY_SHAPES, "shape_3"));
- assertTrue(UserRoles.checkAccess(userInfoTest,
RoleType.EXPLORATORY_SHAPES, "someShape"));
+ assertFalse(UserRoles.checkAccess(userInfoTest,
RoleType.EXPLORATORY_SHAPES, "shape_1", userInfoTest.getRoles()));
+ assertFalse(UserRoles.checkAccess(userInfoTest,
RoleType.EXPLORATORY_SHAPES, "shape_2", userInfoTest.getRoles()));
+ assertFalse(UserRoles.checkAccess(userInfoTest,
RoleType.EXPLORATORY_SHAPES, "shape_3", userInfoTest.getRoles()));
+ assertTrue(UserRoles.checkAccess(userInfoTest,
RoleType.EXPLORATORY_SHAPES, "someShape", userInfoTest.getRoles()));
}
}
diff --git
a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBaseTest.java
b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBaseTest.java
index 225a5c8..770274e 100644
---
a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBaseTest.java
+++
b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBaseTest.java
@@ -20,7 +20,9 @@
package com.epam.dlab.backendapi.service.impl;
import com.epam.dlab.auth.UserInfo;
+import com.epam.dlab.backendapi.dao.ProjectDAO;
import com.epam.dlab.backendapi.dao.SettingsDAO;
+import com.epam.dlab.backendapi.domain.ProjectDTO;
import com.epam.dlab.dto.base.computational.FullComputationalTemplate;
import com.epam.dlab.dto.imagemetadata.ComputationalMetadataDTO;
import com.epam.dlab.dto.imagemetadata.ComputationalResourceShapeDto;
@@ -34,10 +36,7 @@ import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import java.lang.reflect.Field;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
+import java.util.*;
import java.util.stream.Collectors;
import static org.junit.Assert.*;
@@ -50,6 +49,8 @@ public class InfrastructureTemplateServiceBaseTest {
private SettingsDAO settingsDAO;
@Mock
private RESTService provisioningService;
+ @Mock
+ private ProjectDAO projectDAO;
@InjectMocks
private InfrastructureTemplateServiceBaseChild
infrastructureTemplateServiceBaseChild =
@@ -75,12 +76,14 @@ public class InfrastructureTemplateServiceBaseTest {
"someRam2", 6)));
emDto2.setExploratoryEnvironmentShapes(shapes2);
List<ExploratoryMetadataDTO> expectedEmdDtoList =
Arrays.asList(emDto1, emDto2);
+ when(projectDAO.get(anyString())).thenReturn(Optional.of(new
ProjectDTO("project", Collections.emptySet(),
+ Collections.singleton("project"), null)));
when(provisioningService.get(anyString(), anyString(),
any())).thenReturn(expectedEmdDtoList.toArray());
when(settingsDAO.getConfOsFamily()).thenReturn("someConfOsFamily");
UserInfo userInfo = new UserInfo("test", "token");
List<ExploratoryMetadataDTO> actualEmdDtoList =
-
infrastructureTemplateServiceBaseChild.getExploratoryTemplates(userInfo);
+
infrastructureTemplateServiceBaseChild.getExploratoryTemplates(userInfo,
"project");
assertNotNull(actualEmdDtoList);
assertEquals(expectedEmdDtoList, actualEmdDtoList);
@@ -96,7 +99,7 @@ public class InfrastructureTemplateServiceBaseTest {
UserInfo userInfo = new UserInfo("test", "token");
try {
-
infrastructureTemplateServiceBaseChild.getExploratoryTemplates(userInfo);
+
infrastructureTemplateServiceBaseChild.getExploratoryTemplates(userInfo,
"project");
} catch (DlabException e) {
assertEquals("Could not load list of exploratory
templates for user", e.getMessage());
}
@@ -106,11 +109,14 @@ public class InfrastructureTemplateServiceBaseTest {
@Test
public void getComputationalTemplates() throws NoSuchFieldException,
IllegalAccessException {
+
final ComputationalMetadataDTO computationalMetadataDTO = new
ComputationalMetadataDTO("dataengine-service");
computationalMetadataDTO.setComputationResourceShapes(Collections.emptyMap());
List<ComputationalMetadataDTO> expectedCmdDtoList =
Collections.singletonList(
computationalMetadataDTO
);
+ when(projectDAO.get(anyString())).thenReturn(Optional.of(new
ProjectDTO("project", Collections.emptySet(),
+ Collections.singleton("project"), null)));
when(provisioningService.get(anyString(), anyString(),
any())).thenReturn(expectedCmdDtoList.toArray(new
ComputationalMetadataDTO[]{}));
List<FullComputationalTemplate> expectedFullCmdDtoList =
expectedCmdDtoList.stream()
@@ -119,7 +125,7 @@ public class InfrastructureTemplateServiceBaseTest {
UserInfo userInfo = new UserInfo("test", "token");
List<FullComputationalTemplate> actualFullCmdDtoList =
-
infrastructureTemplateServiceBaseChild.getComputationalTemplates(userInfo);
+
infrastructureTemplateServiceBaseChild.getComputationalTemplates(userInfo,
"project");
assertNotNull(actualFullCmdDtoList);
assertEquals(expectedFullCmdDtoList.size(),
actualFullCmdDtoList.size());
for (int i = 0; i < expectedFullCmdDtoList.size(); i++) {
@@ -137,7 +143,7 @@ public class InfrastructureTemplateServiceBaseTest {
UserInfo userInfo = new UserInfo("test", "token");
try {
-
infrastructureTemplateServiceBaseChild.getComputationalTemplates(userInfo);
+
infrastructureTemplateServiceBaseChild.getComputationalTemplates(userInfo,
"project");
} catch (DlabException e) {
assertEquals("Could not load list of computational
templates for user", e.getMessage());
}
@@ -151,10 +157,12 @@ public class InfrastructureTemplateServiceBaseTest {
computationalMetadataDTO.setComputationResourceShapes(Collections.emptyMap());
List<ComputationalMetadataDTO> expectedCmdDtoList =
Collections.singletonList(computationalMetadataDTO);
when(provisioningService.get(anyString(), anyString(),
any())).thenReturn(expectedCmdDtoList.toArray(new
ComputationalMetadataDTO[]{}));
+ when(projectDAO.get(anyString())).thenReturn(Optional.of(new
ProjectDTO("project", Collections.emptySet(),
+ Collections.singleton("project"), null)));
UserInfo userInfo = new UserInfo("test", "token");
try {
-
infrastructureTemplateServiceBaseChild.getComputationalTemplates(userInfo);
+
infrastructureTemplateServiceBaseChild.getComputationalTemplates(userInfo,
"project");
} catch (IllegalArgumentException e) {
assertEquals("Unknown data engine null",
e.getMessage());
}
@@ -165,6 +173,7 @@ public class InfrastructureTemplateServiceBaseTest {
private boolean
areFullComputationalTemplatesEqual(FullComputationalTemplate object1,
FullComputationalTemplate object2) throws
NoSuchFieldException,
IllegalAccessException {
+ String project = "";//TODO CHANGEIT
Field computationalMetadataDTO1 =
object1.getClass().getDeclaredField("computationalMetadataDTO");
computationalMetadataDTO1.setAccessible(true);
Field computationalMetadataDTO2 =
object2.getClass().getDeclaredField("computationalMetadataDTO");
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]