use of com.mercedesbenz.sechub.sharedkernel.Step 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.Step in project sechub by mercedes-benz.
the class UsecaseStepsWithRestDocAreDocumentedTest method inspectMethodAnnotatedWithUseCase.
private void inspectMethodAnnotatedWithUseCase(Map<Class<?>, InspData> map, Class<? extends Annotation> usecaseClass, Method methodOfUseCase, Annotation annot) throws IllegalAccessException, InvocationTargetException {
for (Method methodInAnnotation : annot.getClass().getDeclaredMethods()) {
/*
* each usecase annotation should have a step inside, so we extract STEP
* information in next steps
*/
if (Step.class.equals(methodInAnnotation.getReturnType())) {
/* found method */
Step step = (Step) methodInAnnotation.invoke(annot);
if (step.needsRestDoc()) {
InspData data = map.computeIfAbsent(usecaseClass, key -> InspData.create(key));
data.add(methodOfUseCase.toString());
}
}
}
}
use of com.mercedesbenz.sechub.sharedkernel.Step in project sechub by mercedes-benz.
the class UseCaseModelDataCollector method collectAnnotationInfo.
private <T extends Annotation> void collectAnnotationInfo(UseCaseModel model, Class<T> useCaseAnnotationClazz) {
if (DEBUG) {
LOG.info("start collecting annotation info:{}", useCaseAnnotationClazz);
}
Set<Method> methodsAnnotated = reflections.getMethodsAnnotatedWith(useCaseAnnotationClazz);
if (DEBUG) {
LOG.info("found methods annotated with:{} - {}", useCaseAnnotationClazz, methodsAnnotated);
}
for (Method method : methodsAnnotated) {
List<RolesAllowed> rolesAllowed = fetchAllAllowedRoles(method);
T[] annosFound = method.getAnnotationsByType(useCaseAnnotationClazz);
if (DEBUG) {
LOG.info("inspect method:{}\n - roles found:{}\n - annos found:{}", method, rolesAllowed, annosFound);
}
for (T anno : annosFound) {
UseCaseEntry useCaseEntry = model.ensureUseCase(anno.getClass());
try {
Method valueMethod = anno.getClass().getMethod("value");
Object value = valueMethod.invoke(anno);
if (value instanceof Step) {
String location = "method `" + method.getName() + "` in class `" + method.getDeclaringClass().getName() + "`";
useCaseEntry.addStep((Step) value, rolesAllowed, location);
}
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
}
}
Aggregations