Search in sources :

Example 1 with UserDto

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);
}
Also used : AuthenticatedExecutionRequest(io.metadew.iesi.metadata.definition.execution.AuthenticatedExecutionRequest) PagedResourcesAssembler(org.springframework.data.web.PagedResourcesAssembler) ExecutionRequestStatus(io.metadew.iesi.metadata.definition.execution.ExecutionRequestStatus) ExecutionRequest(io.metadew.iesi.metadata.definition.execution.ExecutionRequest) ExecutionRequestDto(io.metadew.iesi.server.rest.executionrequest.dto.ExecutionRequestDto) IESIPrivilege(io.metadew.iesi.metadata.service.user.IESIPrivilege) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize) LocalDateTime(java.time.LocalDateTime) Autowired(org.springframework.beans.factory.annotation.Autowired) ScriptConfiguration(io.metadew.iesi.metadata.configuration.script.ScriptConfiguration) ArrayList(java.util.ArrayList) ExecutionRequestKey(io.metadew.iesi.metadata.definition.execution.key.ExecutionRequestKey) Pageable(org.springframework.data.domain.Pageable) ExecutionRequestPostDto(io.metadew.iesi.server.rest.executionrequest.dto.ExecutionRequestPostDto) SecurityContextHolder(org.springframework.security.core.context.SecurityContextHolder) ConditionalOnWebApplication(org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication) SecurityGroup(io.metadew.iesi.metadata.definition.security.SecurityGroup) UserDtoRepository(io.metadew.iesi.server.rest.user.UserDtoRepository) MetadataDoesNotExistException(io.metadew.iesi.metadata.configuration.exception.MetadataDoesNotExistException) PostAuthorize(org.springframework.security.access.prepost.PostAuthorize) AccessDeniedException(org.springframework.security.access.AccessDeniedException) UUID(java.util.UUID) Page(org.springframework.data.domain.Page) Collectors(java.util.stream.Collectors) ScriptExecutionRequestDto(io.metadew.iesi.server.rest.executionrequest.script.dto.ScriptExecutionRequestDto) PagedModel(org.springframework.hateoas.PagedModel) ExecutionRequestDtoModelAssembler(io.metadew.iesi.server.rest.executionrequest.dto.ExecutionRequestDtoModelAssembler) HttpStatus(org.springframework.http.HttpStatus) List(java.util.List) IesiSecurityChecker(io.metadew.iesi.server.rest.configuration.security.IesiSecurityChecker) org.springframework.web.bind.annotation(org.springframework.web.bind.annotation) AuthenticatedExecutionRequest(io.metadew.iesi.metadata.definition.execution.AuthenticatedExecutionRequest) Clock(java.time.Clock) ResponseEntity(org.springframework.http.ResponseEntity) UserDto(io.metadew.iesi.server.rest.user.UserDto) AccessDeniedException(org.springframework.security.access.AccessDeniedException) UserDto(io.metadew.iesi.server.rest.user.UserDto) ExecutionRequestKey(io.metadew.iesi.metadata.definition.execution.key.ExecutionRequestKey) ExecutionRequest(io.metadew.iesi.metadata.definition.execution.ExecutionRequest) AuthenticatedExecutionRequest(io.metadew.iesi.metadata.definition.execution.AuthenticatedExecutionRequest) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize)

Example 2 with UserDto

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());
}
Also used : ScriptDesignAuditKey(io.metadew.iesi.metadata.definition.audit.key.ScriptDesignAuditKey) UserDto(io.metadew.iesi.server.rest.user.UserDto) ScriptDesignAudit(io.metadew.iesi.metadata.definition.audit.ScriptDesignAudit)

Example 3 with UserDto

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());
}
Also used : LocalDateTime(java.time.LocalDateTime) UsernameNotFoundException(org.springframework.security.core.userdetails.UsernameNotFoundException) UserDto(io.metadew.iesi.server.rest.user.UserDto) IesiUserDetails(io.metadew.iesi.server.rest.configuration.security.IesiUserDetails) Algorithm(com.auth0.jwt.algorithms.Algorithm) AuthenticationResponse(io.metadew.iesi.server.rest.user.AuthenticationResponse)

Example 4 with UserDto

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);
}
Also used : ExecutionRequestPostDto(io.metadew.iesi.server.rest.executionrequest.dto.ExecutionRequestPostDto) ScriptExecutionRequestPostDto(io.metadew.iesi.server.rest.executionrequest.script.dto.ScriptExecutionRequestPostDto) SecurityGroupKey(io.metadew.iesi.metadata.definition.security.SecurityGroupKey) UserDto(io.metadew.iesi.server.rest.user.UserDto) SecurityGroup(io.metadew.iesi.metadata.definition.security.SecurityGroup) Test(org.junit.jupiter.api.Test) SpringBootTest(org.springframework.boot.test.context.SpringBootTest) WithIesiUser(io.metadew.iesi.server.rest.configuration.security.WithIesiUser)

Example 5 with UserDto

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());
}
Also used : LocalDateTime(java.time.LocalDateTime) ExecutionRequestLabelKey(io.metadew.iesi.metadata.definition.execution.key.ExecutionRequestLabelKey) UserDto(io.metadew.iesi.server.rest.user.UserDto) ExecutionRequest(io.metadew.iesi.metadata.definition.execution.ExecutionRequest) ScriptNameExecutionRequest(io.metadew.iesi.metadata.definition.execution.script.ScriptNameExecutionRequest) ScriptExecutionRequest(io.metadew.iesi.metadata.definition.execution.script.ScriptExecutionRequest) AuthenticatedExecutionRequest(io.metadew.iesi.metadata.definition.execution.AuthenticatedExecutionRequest) SecurityGroup(io.metadew.iesi.metadata.definition.security.SecurityGroup) AuthenticatedExecutionRequest(io.metadew.iesi.metadata.definition.execution.AuthenticatedExecutionRequest) ExecutionRequestPostDto(io.metadew.iesi.server.rest.executionrequest.dto.ExecutionRequestPostDto) ScriptExecutionRequestPostDto(io.metadew.iesi.server.rest.executionrequest.script.dto.ScriptExecutionRequestPostDto) SecurityGroupKey(io.metadew.iesi.metadata.definition.security.SecurityGroupKey) ScriptExecutionRequestKey(io.metadew.iesi.metadata.definition.execution.script.key.ScriptExecutionRequestKey) ScriptExecutionRequestKey(io.metadew.iesi.metadata.definition.execution.script.key.ScriptExecutionRequestKey) ExecutionRequestKey(io.metadew.iesi.metadata.definition.execution.key.ExecutionRequestKey) ExecutionRequestDto(io.metadew.iesi.server.rest.executionrequest.dto.ExecutionRequestDto) ScriptExecutionRequestDto(io.metadew.iesi.server.rest.executionrequest.script.dto.ScriptExecutionRequestDto) UUID(java.util.UUID) HashSet(java.util.HashSet) Test(org.junit.jupiter.api.Test) SpringBootTest(org.springframework.boot.test.context.SpringBootTest) WithIesiUser(io.metadew.iesi.server.rest.configuration.security.WithIesiUser)

Aggregations

UserDto (io.metadew.iesi.server.rest.user.UserDto)6 ExecutionRequestPostDto (io.metadew.iesi.server.rest.executionrequest.dto.ExecutionRequestPostDto)4 LocalDateTime (java.time.LocalDateTime)4 AuthenticatedExecutionRequest (io.metadew.iesi.metadata.definition.execution.AuthenticatedExecutionRequest)3 ExecutionRequest (io.metadew.iesi.metadata.definition.execution.ExecutionRequest)3 ExecutionRequestKey (io.metadew.iesi.metadata.definition.execution.key.ExecutionRequestKey)3 SecurityGroup (io.metadew.iesi.metadata.definition.security.SecurityGroup)3 ExecutionRequestDto (io.metadew.iesi.server.rest.executionrequest.dto.ExecutionRequestDto)3 UUID (java.util.UUID)3 ExecutionRequestStatus (io.metadew.iesi.metadata.definition.execution.ExecutionRequestStatus)2 SecurityGroupKey (io.metadew.iesi.metadata.definition.security.SecurityGroupKey)2 WithIesiUser (io.metadew.iesi.server.rest.configuration.security.WithIesiUser)2 ScriptExecutionRequestDto (io.metadew.iesi.server.rest.executionrequest.script.dto.ScriptExecutionRequestDto)2 ScriptExecutionRequestPostDto (io.metadew.iesi.server.rest.executionrequest.script.dto.ScriptExecutionRequestPostDto)2 UserDtoRepository (io.metadew.iesi.server.rest.user.UserDtoRepository)2 List (java.util.List)2 Collectors (java.util.stream.Collectors)2 Test (org.junit.jupiter.api.Test)2 ConditionalOnWebApplication (org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication)2 SpringBootTest (org.springframework.boot.test.context.SpringBootTest)2