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

View File

@@ -9,6 +9,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.security.Principal; import java.security.Principal;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import static org.cerberus.core.constant.RoleSecurity.ADMIN; import static org.cerberus.core.constant.RoleSecurity.ADMIN;
@@ -16,7 +17,6 @@ import static org.cerberus.core.constant.RoleSecurity.MAINTAINER;
@RestController @RestController
@RequestMapping("/api/applications/{applicationId}/configurationFile") @RequestMapping("/api/applications/{applicationId}/configurationFile")
@SuppressWarnings("unused")
public class ConfigurationFileController { public class ConfigurationFileController {
private ConfigurationFileService service; private ConfigurationFileService service;
private SecurityService securityService; private SecurityService securityService;
@@ -36,6 +36,18 @@ public class ConfigurationFileController {
return service.findByApplicationIdAndId(applicationId, configurationFileId); 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 @PostMapping
@JsonView({View.ConfigurationFileDTO.class}) @JsonView({View.ConfigurationFileDTO.class})
public ConfigurationFile create(@PathVariable("applicationId") UUID applicationId, public ConfigurationFile create(@PathVariable("applicationId") UUID applicationId,

View File

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

View File

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

View File

@@ -11,4 +11,9 @@ abstract class BusinessException extends RuntimeException {
BusinessException(String message, Throwable cause) { BusinessException(String message, Throwable cause) {
super(message, 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.data.repository.query.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.UUID; import java.util.UUID;
@Repository @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) @Query(value = "SELECT EXISTS(SELECT id FROM application WHERE service_name = :serviceName)", nativeQuery = true)
boolean existsByServiceName(@Param("serviceName") String serviceName); 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.data.repository.query.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.UUID; import java.util.UUID;
@Repository @Repository
@@ -18,4 +19,7 @@ public interface ConfigurationFileRepository extends JpaRepository<Configuration
"AND application_id = :applicationId)", nativeQuery = true) "AND application_id = :applicationId)", nativeQuery = true)
boolean doesBelongToApplication(@Param("configurationFileId") UUID configurationFileId, boolean doesBelongToApplication(@Param("configurationFileId") UUID configurationFileId,
@Param("applicationId") UUID applicationId); @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 @Service
public class ApplicationService extends AbstractService<Application> { public class ApplicationService extends AbstractService<Application> {
private ApplicationRepository repository; private final ApplicationRepository repository;
private ApplicationRoleService applicationRoleService; private final ApplicationRoleService applicationRoleService;
private ApplicationValidator validator; private final ApplicationValidator validator;
private DaemonHandlingService daemonHandlingService; private final DaemonHandlingService daemonHandlingService;
ApplicationService(ApplicationRepository repository, ApplicationService(ApplicationRepository repository,
ApplicationRoleService applicationRoleService, ApplicationRoleService applicationRoleService,
@@ -35,6 +35,7 @@ public class ApplicationService extends AbstractService<Application> {
@Transactional @Transactional
public Application create(Application application, User user) { public Application create(Application application, User user) {
validator.validate(application); validator.validate(application);
validator.sanitize(application);
if(repository.existsByName(application.getName())) { if(repository.existsByName(application.getName())) {
throw new BadRequestException(concat("The application ", application.getName(), " already exists.")); 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)); return daemonHandlingService.getStatus(findByIdOrElseThrow(applicationId));
} }
public List<Application> findAll() { public List<Application> findAll(User user) {
return repository.findAll(); 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.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import static org.cerberus.core.utils.StringUtils.concat; import static org.cerberus.core.utils.StringUtils.concat;
@@ -46,6 +47,18 @@ public class ConfigurationFileService extends AbstractService<ConfigurationFile>
return 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) { public ConfigurationFile create(UUID applicationId, ConfigurationFile configurationFile) {
return save(applicationId, configurationFile, false); return save(applicationId, configurationFile, false);
} }