use of io.metadew.iesi.server.rest.user.UserDto in project iesi by metadew.
the class ExecutionRequestController method post.
@PostMapping("")
@PreAuthorize("hasPrivilege('EXECUTION_REQUESTS_WRITE')")
public ExecutionRequestDto post(@RequestBody ExecutionRequestPostDto executionRequestPostDto) {
if (!iesiSecurityChecker.hasPrivilege(SecurityContextHolder.getContext().getAuthentication(), IESIPrivilege.EXECUTION_REQUESTS_MODIFY.getPrivilege(), executionRequestPostDto.getScriptExecutionRequests().stream().map(scriptExecutionRequestPostDto -> scriptConfiguration.getSecurityGroup(scriptExecutionRequestPostDto.getScriptName()).orElseThrow(() -> new RuntimeException(String.format("Cannot find security group of %s", scriptExecutionRequestPostDto.getScriptName())))).map(SecurityGroup::getName).collect(Collectors.toList()))) {
throw new AccessDeniedException("User is not allowed to delete this execution request");
}
String username = SecurityContextHolder.getContext().getAuthentication().getName();
UserDto userDto = userDtoRepository.get(username).orElseThrow(() -> new RuntimeException("Cannot find user :" + username));
String newExecutionRequestId = UUID.randomUUID().toString();
AuthenticatedExecutionRequest authenticatedExecutionRequest = AuthenticatedExecutionRequest.builder().executionRequestKey(new ExecutionRequestKey(newExecutionRequestId)).name(executionRequestPostDto.getName()).username(userDto.getUsername()).userID(userDto.getId().toString()).context(executionRequestPostDto.getContext()).description(executionRequestPostDto.getDescription()).scope(executionRequestPostDto.getScope()).executionRequestLabels(executionRequestPostDto.getExecutionRequestLabels().stream().map(executionRequestLabelDto -> executionRequestLabelDto.convertToEntity(new ExecutionRequestKey(newExecutionRequestId))).collect(Collectors.toSet())).email(executionRequestPostDto.getEmail()).scriptExecutionRequests(executionRequestPostDto.getScriptExecutionRequests().stream().map(scriptExecutionRequestPostDto -> scriptExecutionRequestPostDto.convertToEntity(newExecutionRequestId)).collect(Collectors.toList())).executionRequestStatus(ExecutionRequestStatus.NEW).requestTimestamp(LocalDateTime.now(clock)).build();
ExecutionRequest executionRequest = executionRequestService.createExecutionRequest(authenticatedExecutionRequest);
return executionRequestDtoModelAssembler.toModel(executionRequest);
}
use of io.metadew.iesi.server.rest.user.UserDto in project iesi by metadew.
the class ScriptDesignAuditService method convertToScriptAudit.
@Override
public ScriptDesignAudit convertToScriptAudit(Script script, ScriptDesignAuditAction scriptDesignAuditAction) {
String username = SecurityContextHolder.getContext().getAuthentication().getName();
UserDto userDto = userDtoRepository.get(username).orElseThrow(() -> new RuntimeException("Cannot find user :" + username));
return new ScriptDesignAudit(new ScriptDesignAuditKey(UUID.randomUUID()), username, userDto.getId().toString(), scriptDesignAuditAction, script.getMetadataKey().getScriptId(), script.getName(), script.getVersion().getNumber(), script.getSecurityGroupName(), LocalDateTime.now().toString());
}
use of io.metadew.iesi.server.rest.user.UserDto in project iesi by metadew.
the class JwtService method generateAuthenticationResponse.
public AuthenticationResponse generateAuthenticationResponse(Authentication authentication) {
Algorithm algorithm = Algorithm.HMAC256(secret);
LocalDateTime now = LocalDateTime.now(clock);
LocalDateTime expiresAt = now.plus(accessTokenExpiryDate, ChronoUnit.SECONDS);
String token = JWT.create().withIssuer(ISSUER).withSubject(authentication.getName()).withIssuedAt(Timestamp.valueOf(now)).withExpiresAt(Timestamp.valueOf(expiresAt)).withClaim("uuid", ((IesiUserDetails) authentication.getPrincipal()).getId().toString()).sign(algorithm);
UserDto userDto = userService.get(((IesiUserDetails) authentication.getPrincipal()).getId()).orElseThrow(() -> new UsernameNotFoundException(String.format("Cannot find user %s (%s)", ((IesiUserDetails) authentication.getPrincipal()).getId().toString(), ((IesiUserDetails) authentication.getPrincipal()).getUsername())));
return new AuthenticationResponse(token, ChronoUnit.SECONDS.between(now, expiresAt), userDto.getRoles());
}
use of io.metadew.iesi.server.rest.user.UserDto in project iesi by metadew.
the class ExecutionRequestsControllerSecurityTest method testCreateExecutionRequestsWrite.
@Test
@WithIesiUser(username = "spring", authorities = { "EXECUTION_REQUESTS_WRITE@PUBLIC" })
void testCreateExecutionRequestsWrite() {
ExecutionRequestPostDto executionRequestPostDto = ExecutionRequestPostDto.builder().executionRequestLabels(new HashSet<>()).requestTimestamp(LocalDateTime.now()).scriptExecutionRequests(Stream.of(ScriptExecutionRequestPostDto.builder().scriptName("script1").scriptVersion(1L).environment("test").impersonations(new HashSet<>()).parameters(new HashSet<>()).build()).collect(Collectors.toList())).context("context").description("description").email("email").name("name").scope("scope").build();
UserDto userDto = mock(UserDto.class);
when(userDto.getId()).thenReturn(UUID.randomUUID());
when(userDto.getUsername()).thenReturn("spring");
when(userDtoRepository.get("spring")).thenReturn(Optional.of(userDto));
when(scriptConfiguration.getSecurityGroup("script1")).thenReturn(Optional.of(new SecurityGroup(new SecurityGroupKey(UUID.randomUUID()), "PUBLIC", new HashSet<>(), new HashSet<>())));
executionRequestController.post(executionRequestPostDto);
}
use of io.metadew.iesi.server.rest.user.UserDto in project iesi by metadew.
the class ExecutionRequestControllerTest method testCreateExecutionRequestsWrite.
@Test
@WithIesiUser(username = "spring", authorities = { "EXECUTION_REQUESTS_WRITE@PUBLIC" })
void testCreateExecutionRequestsWrite() {
// Create test method argument(s)
ExecutionRequestPostDto executionRequestPostDto = ExecutionRequestPostDto.builder().executionRequestLabels(new HashSet<>()).requestTimestamp(LocalDateTime.now()).scriptExecutionRequests(Stream.of(ScriptExecutionRequestPostDto.builder().scriptName("script1").scriptVersion(1L).environment("test").impersonations(new HashSet<>()).parameters(new HashSet<>()).build()).collect(Collectors.toList())).context("context").description("description").email("email").name("name").scope("scope").build();
// Define mocks behaviour
UUID userUUID = UUID.randomUUID();
UserDto userDto = mock(UserDto.class);
when(userDto.getId()).thenReturn(userUUID);
when(userDto.getUsername()).thenReturn("spring");
when(userDtoRepository.get("spring")).thenReturn(Optional.of(userDto));
when(scriptConfiguration.getSecurityGroup("script1")).thenReturn(Optional.of(new SecurityGroup(new SecurityGroupKey(UUID.randomUUID()), "PUBLIC", new HashSet<>(), new HashSet<>())));
String newExecutionRequestId = UUID.randomUUID().toString();
String newScriptExecutionRequestId = UUID.randomUUID().toString();
LocalDateTime requestTimestamp = LocalDateTime.now();
AuthenticatedExecutionRequest expectedAuthenticatedExecutionRequest = AuthenticatedExecutionRequest.builder().executionRequestKey(new ExecutionRequestKey(newExecutionRequestId)).name("name").username("spring").userID(userUUID.toString()).context("context").description("description").scope("scope").executionRequestLabels(Stream.of(ExecutionRequestLabel.builder().metadataKey(new ExecutionRequestLabelKey(UUID.randomUUID().toString())).executionRequestKey(new ExecutionRequestKey(newExecutionRequestId)).name("key1").value("value1").build()).collect(Collectors.toSet())).email("email").scriptExecutionRequests(Stream.of(ScriptNameExecutionRequest.builder().scriptExecutionRequestKey(new ScriptExecutionRequestKey(newScriptExecutionRequestId)).executionRequestKey(new ExecutionRequestKey(newExecutionRequestId)).scriptName("script1").scriptVersion(1L).environment("test").impersonations(new HashSet<>()).parameters(new HashSet<>()).scriptExecutionRequestStatus(ScriptExecutionRequestStatus.NEW).build()).collect(Collectors.toList())).executionRequestStatus(ExecutionRequestStatus.NEW).requestTimestamp(requestTimestamp).build();
when(executionRequestService.createExecutionRequest((ExecutionRequest) argThat(executionRequest -> equalsWithoutUuid((ExecutionRequest) executionRequest, expectedAuthenticatedExecutionRequest)))).thenReturn(expectedAuthenticatedExecutionRequest);
// Perform test method
ExecutionRequestDto executionRequestDto1 = executionRequestController.post(executionRequestPostDto);
// Perform assertions
assertThat(executionRequestDto1).isEqualTo(ExecutionRequestDto.builder().executionRequestId(newExecutionRequestId).executionRequestStatus(ExecutionRequestStatus.NEW).executionRequestLabels(Stream.of(ExecutionRequestLabelDto.builder().name("key1").value("value1").build()).collect(Collectors.toSet())).context("context").description("description").requestTimestamp(requestTimestamp).email("email").name("name").scope("scope").userId(userUUID.toString()).username("spring").scriptExecutionRequests(Stream.of(ScriptExecutionRequestDto.builder().scriptExecutionRequestId(newScriptExecutionRequestId).executionRequestId(newExecutionRequestId).scriptName("script1").scriptVersion(1L).environment("test").impersonations(new HashSet<>()).parameters(new HashSet<>()).scriptExecutionRequestStatus(ScriptExecutionRequestStatus.NEW).build()).collect(Collectors.toSet())).build());
}
Aggregations