use of com.google.api.services.cloudresourcemanager.model.ResourceId in project workbench by all-of-us.
the class CloudTaskUserControllerTest method testBulkProjectAudit.
@Test
public void testBulkProjectAudit() throws Exception {
doReturn(ImmutableList.of()).when(mockCloudResourceManagerService).getAllProjectsForUser(userA);
doReturn(ImmutableList.of(new Project().setName("aou-rw-test-123").setParent(new ResourceId().setType("folder").setId("123")))).when(mockCloudResourceManagerService).getAllProjectsForUser(userB);
controller.auditProjectAccess(new AuditProjectAccessRequest().addUserIdsItem(userA.getUserId()).addUserIdsItem(userB.getUserId()));
verify(mockCloudResourceManagerService, times(2)).getAllProjectsForUser(any());
}
use of com.google.api.services.cloudresourcemanager.model.ResourceId in project workbench by all-of-us.
the class CloudTaskUserController method auditProjectAccess.
@Override
public ResponseEntity<Void> auditProjectAccess(AuditProjectAccessRequest request) {
int errorCount = 0;
for (long userId : request.getUserIds()) {
DbUser user = userDao.findUserByUserId(userId);
// TODO(RW-2062): Move to using the gcloud api for list all resources when it is available.
try {
List<String> unauthorizedLogs = cloudResourceManagerService.getAllProjectsForUser(user).stream().filter(project -> project.getParent() == null || !(ALLOWED_PARENT_IDS.contains(project.getParent().getId()))).map(project -> String.format("%s in %s %s", project.getName(), Optional.ofNullable(project.getParent()).map(ResourceId::getType).orElse("[type unknown]"), Optional.ofNullable(project.getParent()).map(ResourceId::getId).orElse("[id unknown]"))).collect(Collectors.toList());
if (unauthorizedLogs.size() > 0) {
log.warning("User " + user.getUsername() + " has access to projects: " + String.join(", ", unauthorizedLogs));
}
} catch (IOException e) {
log.log(Level.SEVERE, "failed to audit project access for user " + user.getUsername(), e);
errorCount++;
}
}
if (errorCount > 0) {
log.severe(String.format("encountered errors on %d/%d users", errorCount, request.getUserIds().size()));
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
log.info(String.format("successfully audited %d users", request.getUserIds().size()));
return ResponseEntity.noContent().build();
}
use of com.google.api.services.cloudresourcemanager.model.ResourceId in project jade-data-repo by DataBiosphere.
the class GoogleResourceService method newProject.
private GoogleProjectResource newProject(GoogleProjectRequest projectRequest, String googleProjectId) throws InterruptedException {
BillingProfile profile = profileService.getProfileById(projectRequest.getProfileId());
logger.info("creating a new project: {}", projectRequest.getProjectId());
if (!profile.isAccessible()) {
throw new InaccessibleBillingAccountException("The repository needs access to this billing account " + "in order to create: " + googleProjectId);
}
// projects created by service accounts must live under a parent resource (either a folder or an organization)
ResourceId parentResource = new ResourceId().setType(resourceConfiguration.getParentResourceType()).setId(resourceConfiguration.getParentResourceId());
Project requestBody = new Project().setName(googleProjectId).setProjectId(googleProjectId).setParent(parentResource);
try {
// kick off a project create request and poll until it is done
CloudResourceManager resourceManager = cloudResourceManager();
CloudResourceManager.Projects.Create request = resourceManager.projects().create(requestBody);
Operation operation = request.execute();
long timeout = resourceConfiguration.getProjectCreateTimeoutSeconds();
blockUntilResourceOperationComplete(resourceManager, operation, timeout);
// it should be retrievable once the create operation is complete
Project project = getProject(googleProjectId);
if (project == null) {
throw new GoogleResourceException("Could not get project after creation");
}
String googleProjectNumber = project.getProjectNumber().toString();
GoogleProjectResource googleProjectResource = new GoogleProjectResource(projectRequest).googleProjectId(googleProjectId).googleProjectNumber(googleProjectNumber);
setupBilling(googleProjectResource);
enableServices(googleProjectResource);
enableIamPermissions(googleProjectResource.getRoleIdentityMapping(), googleProjectId);
UUID repositoryId = resourceDao.createProject(googleProjectResource);
return googleProjectResource.repositoryId(repositoryId);
} catch (IOException | GeneralSecurityException e) {
throw new GoogleResourceException("Could not create project", e);
}
}
Aggregations