use of com.mercedesbenz.sechub.sharedkernel.error.AlreadyExistsException in project sechub by mercedes-benz.
the class ProjectCreationService method createProject.
@Validated
/* @formatter:off */
@UseCaseAdminCreatesProject(@Step(number = 2, name = "Create project", description = "The service will create the project when not already existing with such name."))
public /* @formatter:on */
void createProject(@NotNull String projectId, @NotNull String description, @NotNull String owner, @NotNull Set<URI> whitelist, @NotNull ProjectMetaData metaData) {
LOG.info("Administrator {} triggers create of project:{}, having owner:{}", userContext.getUserId(), projectId, owner);
assertion.assertIsValidProjectId(projectId);
assertion.assertIsValidUserId(owner);
assertion.assertIsValidProjectDescription(description);
/* assert found */
Optional<Project> foundProject = projectRepository.findById(projectId);
if (foundProject.isPresent()) {
throw new AlreadyExistsException("Project '" + projectId + "' already exists");
}
Optional<User> foundOwner = userRepository.findById(owner);
if (!foundOwner.isPresent()) {
throw new NotFoundException("Owner '" + owner + "' not found");
}
/* setup */
Project project = new Project();
project.id = projectId;
project.description = description;
User ownerUser = foundOwner.get();
project.owner = ownerUser;
/**
* add only accepted/valid URIs - sanitize
*/
whitelist.stream().filter(uri -> uriValidation.validate(uri).isValid()).forEach(project.getWhiteList()::add);
List<ProjectMetaDataEntity> metaDataEntities = metaData.getMetaDataMap().entrySet().stream().map(entry -> new ProjectMetaDataEntity(projectId, entry.getKey(), entry.getValue())).collect(Collectors.toList());
project.metaData.addAll(metaDataEntities);
/* store */
persistenceService.saveInOwnTransaction(project);
sendProjectCreatedEvent(projectId, whitelist);
sendRefreshUserAuth(ownerUser);
}
use of com.mercedesbenz.sechub.sharedkernel.error.AlreadyExistsException in project sechub by mercedes-benz.
the class ProjectUnassignUserService method unassignUserFromProject.
/* @formatter:off */
@UseCaseAdminUnassignsUserFromProject(@Step(number = 2, name = "Unassign user", description = "The service will remove the user to the project. If users has no longer access to projects ROLE_USER will be removed"))
public /* @formatter:on */
void unassignUserFromProject(String userId, String projectId) {
auditLogService.log("triggers unassignment of user:{} to project:{}", logSanitizer.sanitize(userId, 30), logSanitizer.sanitize(projectId, 30));
assertion.assertIsValidUserId(userId);
assertion.assertIsValidProjectId(projectId);
Project project = projectRepository.findOrFailProject(projectId);
User user = userRepository.findOrFailUser(userId);
if (!project.getUsers().remove(user)) {
throw new AlreadyExistsException("User already not assigned to this project!");
}
user.getProjects().remove(project);
transactionService.saveInOwnTransaction(project, user);
sendUserRemovedFromProjectEvent(projectId, user);
sendRequestUserRoleRecalculation(user);
}
use of com.mercedesbenz.sechub.sharedkernel.error.AlreadyExistsException in project sechub by mercedes-benz.
the class SchedulerRestartJobService method restartJob.
private void restartJob(UUID jobUUID, String ownerEmailAddress, boolean hard) {
assertion.assertIsValidJobUUID(jobUUID);
auditLogService.log("triggered restart of job:{}, variant:[hard={}]", jobUUID, hard);
Optional<ScheduleSecHubJob> optJob = jobRepository.findById(jobUUID);
if (!optJob.isPresent()) {
LOG.warn("SecHub job {} not found, so not able to restart!", jobUUID);
JobDataContext context = new JobDataContext();
context.sechubJobUUID = jobUUID;
context.ownerEmailAddress = ownerEmailAddress;
context.info = "Restart canceled, because job not found!";
sendJobRestartCanceled(context);
throw new NotFoundException("Job not found or you have no access");
}
/* job exists, so can be restarted - hard or soft */
ScheduleSecHubJob job = optJob.get();
if (job.getExecutionResult().hasFinished()) {
/* already done so just ignore */
LOG.warn("SecHub job {} has already finished, so not able to restart!", jobUUID);
sendJobRestartCanceled(job, ownerEmailAddress, "Restart canceled, because job already finished");
throw new AlreadyExistsException("Job has already finished - restart not necessary");
}
/*
* when we have still running batch jobs we must terminate them as well +
* abandon
*/
schedulerCancelJobService.stopAndAbandonAllRunningBatchJobsForSechubJobUUID(jobUUID);
if (hard) {
sendPurgeJobResultsSynchronousRequest(job);
}
ScheduleSecHubJob secHubJob = optJob.get();
markJobAsNewExecutedNow(secHubJob);
sendJobRestartTriggered(secHubJob, ownerEmailAddress);
launcherService.executeJob(secHubJob);
String type = (hard ? "hard" : "normal");
LOG.info("job {} has been {} restarted", jobUUID, type);
}
use of com.mercedesbenz.sechub.sharedkernel.error.AlreadyExistsException in project sechub by mercedes-benz.
the class ProjectAssignUserService method assignUserToProject.
/* @formatter:off */
@UseCaseAdminAssignsUserToProject(@Step(number = 2, name = "Assign user", description = "The service will add the user to the project. If user does not have ROLE_USER it will obtain it"))
public /* @formatter:on */
void assignUserToProject(String userId, String projectId) {
LOG.info("User {} triggers assignment of user:{} to project:{}", userContextService.getUserId(), logSanitizer.sanitize(userId, 30), logSanitizer.sanitize(projectId, 30));
assertion.assertIsValidUserId(userId);
assertion.assertIsValidProjectId(projectId);
Project project = projectRepository.findOrFailProject(projectId);
User user = userRepository.findOrFailUser(userId);
if (!project.getUsers().add(user)) {
throw new AlreadyExistsException("User already assigned to this project!");
}
user.getProjects().add(project);
project.getUsers().add(user);
transactionService.saveInOwnTransaction(project, user);
sendUserAddedToProjectEvent(projectId, user);
sendRequestUserRoleRecalculation(user);
}
use of com.mercedesbenz.sechub.sharedkernel.error.AlreadyExistsException in project sechub by mercedes-benz.
the class ProjectChangeOwnerService method changeProjectOwner.
/* @formatter:off */
@UseCaseAdminChangesProjectOwner(@Step(number = 2, name = "Change project owner", description = "The service will set the user as the owner of the project. If user does not have ROLE_OWNER it will obtain it. The old owner will loose project ownership."))
public /* @formatter:on */
void changeProjectOwner(String newOnwerUserId, String projectId) {
LOG.info("User {} triggers project owner change - user:{} to project:{}", userContextService.getUserId(), logSanitizer.sanitize(newOnwerUserId, 30), logSanitizer.sanitize(projectId, 30));
assertion.assertIsValidUserId(newOnwerUserId);
assertion.assertIsValidProjectId(projectId);
Project project = projectRepository.findOrFailProject(projectId);
User newOwner = userRepository.findOrFailUser(newOnwerUserId);
if (project.owner.equals(newOwner)) {
throw new AlreadyExistsException("User already assigned in the role as owner to this project!");
}
User previousOwner = changeProjectOwnerAndReturnPreviousOwner(project, newOwner);
transactionService.saveInOwnTransaction(project, newOwner, previousOwner);
sendOwnerChangedForProjectEvent(project, previousOwner, newOwner);
sendRequestOwnerRoleRecalculation(newOwner);
sendRequestOwnerRoleRecalculation(previousOwner);
}
Aggregations