Miscellaneous changes about applications and configuration files services.

This commit is contained in:
2020-01-26 16:21:19 +01:00
parent bce65feaab
commit c3c5201b03
10 changed files with 76 additions and 12 deletions

View File

@@ -1,6 +1,7 @@
package org.cerberus.controllers;
import com.fasterxml.jackson.annotation.JsonView;
import org.cerberus.core.exceptions.UnauthorizedException;
import org.cerberus.entities.dto.View;
import org.cerberus.entities.persistence.Application;
import org.cerberus.entities.persistence.User;
@@ -19,7 +20,6 @@ import static org.cerberus.services.DaemonHandlingService.Action.*;
@RestController
@RequestMapping("/api/applications")
@SuppressWarnings("unused")
public class ApplicationController {
private ApplicationService service;
private SecurityService securityService;
@@ -39,8 +39,10 @@ public class ApplicationController {
@GetMapping
@JsonView({View.ApplicationDTO.class})
public List<Application> findAll(Principal connectedUser) {
securityService.getAdminUser(connectedUser);
return service.findAll();
User user = securityService.getUserByPrincipal(connectedUser)
.orElseThrow(() -> new UnauthorizedException(""));
return service.findAll(user);
}
@PostMapping

View File

@@ -9,6 +9,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import java.security.Principal;
import java.util.List;
import java.util.UUID;
import static org.cerberus.core.constant.RoleSecurity.ADMIN;
@@ -16,7 +17,6 @@ import static org.cerberus.core.constant.RoleSecurity.MAINTAINER;
@RestController
@RequestMapping("/api/applications/{applicationId}/configurationFile")
@SuppressWarnings("unused")
public class ConfigurationFileController {
private ConfigurationFileService service;
private SecurityService securityService;
@@ -36,6 +36,18 @@ public class ConfigurationFileController {
return service.findByApplicationIdAndId(applicationId, configurationFileId);
}
/**
* Returns all the configuration files associates to the application that id is given in parameters.
* @return The configuration files but without their content.
*/
@GetMapping
@JsonView({View.ConfigurationFileDTO.class})
public List<ConfigurationFile> getAllByApplication(@PathVariable("applicationId") UUID applicationId,
Principal connectedUser) {
securityService.checkHasAnyRole(connectedUser, applicationId, ADMIN, MAINTAINER);
return service.findAllByApplicationId(applicationId);
}
@PostMapping
@JsonView({View.ConfigurationFileDTO.class})
public ConfigurationFile create(@PathVariable("applicationId") UUID applicationId,

View File

@@ -8,7 +8,7 @@ public enum ResultCode {
private int val;
private ResultCode(final int pVal) {
ResultCode(final int pVal) {
val = pVal;
}

View File

@@ -2,5 +2,5 @@ package org.cerberus.core.constant;
public enum Role {
VIEWER,
MAINTAINER;
MAINTAINER
}

View File

@@ -11,4 +11,9 @@ abstract class BusinessException extends RuntimeException {
BusinessException(String message, Throwable cause) {
super(message, cause);
}
@Override
public StackTraceElement[] getStackTrace() {
return null;
}
}

View File

@@ -0,0 +1,15 @@
package org.cerberus.core.exceptions;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
@ResponseStatus(value = HttpStatus.UNAUTHORIZED)
public class UnauthorizedException extends BusinessException {
public UnauthorizedException(String message) {
super(message);
}
public UnauthorizedException(String message, Throwable cause) {
super(message, cause);
}
}

View File

@@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.UUID;
@Repository
@@ -15,4 +16,7 @@ public interface ApplicationRepository extends JpaRepository<Application, UUID>
@Query(value = "SELECT EXISTS(SELECT id FROM application WHERE service_name = :serviceName)", nativeQuery = true)
boolean existsByServiceName(@Param("serviceName") String serviceName);
@Query("SELECT a FROM Application a JOIN a.administratorList adm WHERE adm.user.id = :userId")
List<Application> getByUserId(@Param("userId") UUID userId);
}

View File

@@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.UUID;
@Repository
@@ -18,4 +19,7 @@ public interface ConfigurationFileRepository extends JpaRepository<Configuration
"AND application_id = :applicationId)", nativeQuery = true)
boolean doesBelongToApplication(@Param("configurationFileId") UUID configurationFileId,
@Param("applicationId") UUID applicationId);
@Query("SELECT cf FROM ConfigurationFile cf WHERE cf.application.id = :applicationId")
List<ConfigurationFile> findAllByApplicationId(@Param("applicationId") UUID applicationId);
}

View File

@@ -16,10 +16,10 @@ import static org.cerberus.core.utils.StringUtils.concat;
@Service
public class ApplicationService extends AbstractService<Application> {
private ApplicationRepository repository;
private ApplicationRoleService applicationRoleService;
private ApplicationValidator validator;
private DaemonHandlingService daemonHandlingService;
private final ApplicationRepository repository;
private final ApplicationRoleService applicationRoleService;
private final ApplicationValidator validator;
private final DaemonHandlingService daemonHandlingService;
ApplicationService(ApplicationRepository repository,
ApplicationRoleService applicationRoleService,
@@ -35,6 +35,7 @@ public class ApplicationService extends AbstractService<Application> {
@Transactional
public Application create(Application application, User user) {
validator.validate(application);
validator.sanitize(application);
if(repository.existsByName(application.getName())) {
throw new BadRequestException(concat("The application ", application.getName(), " already exists."));
@@ -78,7 +79,15 @@ public class ApplicationService extends AbstractService<Application> {
return daemonHandlingService.getStatus(findByIdOrElseThrow(applicationId));
}
public List<Application> findAll() {
return repository.findAll();
public List<Application> findAll(User user) {
List<Application> result;
if(user.isAdmin()) {
result = repository.findAll();
} else {
result = repository.getByUserId(user.getId());
}
return result;
}
}

View File

@@ -11,6 +11,7 @@ import org.springframework.stereotype.Service;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.UUID;
import static org.cerberus.core.utils.StringUtils.concat;
@@ -46,6 +47,18 @@ public class ConfigurationFileService extends AbstractService<ConfigurationFile>
return configurationFile;
}
/**
* Returns all the configuration files associates to the application that id is given in parameters.
* @return The configuration files but without their content.
*/
public List<ConfigurationFile> findAllByApplicationId(UUID applicationId) {
if(!applicationService.existsById(applicationId)) {
throwNotFoundException();
}
return repository.findAllByApplicationId(applicationId);
}
public ConfigurationFile create(UUID applicationId, ConfigurationFile configurationFile) {
return save(applicationId, configurationFile, false);
}