From 0c454a08dcdaecf11d0bacca05b535d68176ca5c Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Sat, 26 Aug 2023 22:33:23 +0100 Subject: [PATCH] rename to settins.yml --- .../software/SPDF/SPdfApplication.java | 6 ++-- .../SPDF/config/ConfigInitializer.java | 6 ++-- .../SPDF/config/EndpointConfiguration.java | 22 +++++++----- .../SPDF/config/security/InitialSetup.java | 12 ++++--- .../api/pipeline/PipelineController.java | 8 +++-- .../controller/web/HomeWebController.java | 14 ++++---- .../controller/web/MetricsController.java | 33 +++++++++-------- .../SPDF/model/ApplicationProperties.java | 36 ++++++++++++++++--- ...ion.yml.template => settings.yml.template} | 0 9 files changed, 89 insertions(+), 48 deletions(-) rename src/main/resources/{application.yml.template => settings.yml.template} (100%) diff --git a/src/main/java/stirling/software/SPDF/SPdfApplication.java b/src/main/java/stirling/software/SPDF/SPdfApplication.java index de53a0a9..b320bc8a 100644 --- a/src/main/java/stirling/software/SPDF/SPdfApplication.java +++ b/src/main/java/stirling/software/SPDF/SPdfApplication.java @@ -55,10 +55,10 @@ public class SPdfApplication { public static void main(String[] args) { SpringApplication app = new SpringApplication(SPdfApplication.class); app.addInitializers(new ConfigInitializer()); - if (Files.exists(Paths.get("configs/application.yml"))) { - app.setDefaultProperties(Collections.singletonMap("spring.config.location", "file:configs/application.yml")); + if (Files.exists(Paths.get("configs/settings.yml"))) { + app.setDefaultProperties(Collections.singletonMap("spring.config.location", "file:configs/settings.yml")); } else { - System.out.println("External configuration file 'configs/application.yml' does not exist. Using default configuration and environment configuration instead."); + System.out.println("External configuration file 'configs/settings.yml' does not exist. Using default configuration and environment configuration instead."); } app.run(args); diff --git a/src/main/java/stirling/software/SPDF/config/ConfigInitializer.java b/src/main/java/stirling/software/SPDF/config/ConfigInitializer.java index e86fd637..49f0c2f7 100644 --- a/src/main/java/stirling/software/SPDF/config/ConfigInitializer.java +++ b/src/main/java/stirling/software/SPDF/config/ConfigInitializer.java @@ -22,7 +22,7 @@ public class ConfigInitializer implements ApplicationContextInitializer endpointStatuses = new ConcurrentHashMap<>(); private Map> endpointGroups = new ConcurrentHashMap<>(); - public EndpointConfiguration() { + private final ApplicationProperties applicationProperties; + + @Autowired + public EndpointConfiguration(ApplicationProperties applicationProperties) { + this.applicationProperties = applicationProperties; init(); processEnvironmentConfigs(); } @@ -198,21 +206,19 @@ public class EndpointConfiguration { } - + private void processEnvironmentConfigs() { - String endpointsToRemove = System.getenv("ENDPOINTS_TO_REMOVE"); - String groupsToRemove = System.getenv("GROUPS_TO_REMOVE"); + List endpointsToRemove = applicationProperties.getEndpoints().getToRemove(); + List groupsToRemove = applicationProperties.getEndpoints().getGroupsToRemove(); if (endpointsToRemove != null) { - String[] endpoints = endpointsToRemove.split(","); - for (String endpoint : endpoints) { + for (String endpoint : endpointsToRemove) { disableEndpoint(endpoint.trim()); } } if (groupsToRemove != null) { - String[] groups = groupsToRemove.split(","); - for (String group : groups) { + for (String group : groupsToRemove) { disableGroup(group.trim()); } } diff --git a/src/main/java/stirling/software/SPDF/config/security/InitialSetup.java b/src/main/java/stirling/software/SPDF/config/security/InitialSetup.java index 2d7cdf54..c6ad0281 100644 --- a/src/main/java/stirling/software/SPDF/config/security/InitialSetup.java +++ b/src/main/java/stirling/software/SPDF/config/security/InitialSetup.java @@ -24,11 +24,14 @@ public class InitialSetup { @Autowired private UserService userService; + @Autowired + ApplicationProperties applicationProperties; + @PostConstruct public void init() { if (!userService.hasUsers()) { - String initialUsername = System.getenv("INITIAL_USERNAME"); - String initialPassword = System.getenv("INITIAL_PASSWORD"); + String initialUsername = applicationProperties.getSecurity().getInitialLogin().getUsername(); + String initialPassword = applicationProperties.getSecurity().getInitialLogin().getPassword(); if (initialUsername != null && initialPassword != null) { userService.saveUser(initialUsername, initialPassword, Role.ADMIN.getRoleId()); } @@ -36,8 +39,7 @@ public class InitialSetup { } } - @Autowired - ApplicationProperties applicationProperties; + @PostConstruct public void initSecretKey() throws IOException { @@ -49,7 +51,7 @@ public class InitialSetup { } private void saveKeyToConfig(String key) throws IOException { - Path path = Paths.get("configs", "application.yml"); // Target the configs/application.yml + Path path = Paths.get("configs", "settings.yml"); // Target the configs/settings.yml List lines = Files.readAllLines(path); boolean keyFound = false; diff --git a/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineController.java b/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineController.java index 244cb807..e3ecebb5 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineController.java @@ -47,6 +47,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.v3.oas.annotations.tags.Tag; +import stirling.software.SPDF.model.ApplicationProperties; import stirling.software.SPDF.model.PipelineConfig; import stirling.software.SPDF.model.PipelineOperation; import stirling.software.SPDF.utils.WebResponseUtils; @@ -91,6 +92,10 @@ public class PipelineController { } } + @Autowired + ApplicationProperties applicationProperties; + + private void handleDirectory(Path dir) throws Exception { logger.info("Handling directory: {}", dir); Path jsonFile = dir.resolve(jsonFileName); @@ -182,8 +187,7 @@ public class PipelineController { // {filename} {folder} {date} {tmime} {pipeline} String outputDir = config.getOutputDir(); - // Check if the environment variable 'automatedOutputFolder' is set - String outputFolder = System.getenv("automatedOutputFolder"); + String outputFolder = applicationProperties.getAutoPipeline().getOutputFolder(); if (outputFolder == null || outputFolder.isEmpty()) { // If the environment variable is not set, use the default value diff --git a/src/main/java/stirling/software/SPDF/controller/web/HomeWebController.java b/src/main/java/stirling/software/SPDF/controller/web/HomeWebController.java index ba857afd..b6d08fbf 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/HomeWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/HomeWebController.java @@ -1,5 +1,6 @@ package stirling.software.SPDF.controller.web; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -7,6 +8,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; import io.swagger.v3.oas.annotations.Hidden; +import stirling.software.SPDF.model.ApplicationProperties; @Controller public class HomeWebController { @@ -31,18 +33,16 @@ public class HomeWebController { return "redirect:/"; } - + @Autowired + ApplicationProperties applicationProperties; + @GetMapping(value = "/robots.txt", produces = MediaType.TEXT_PLAIN_VALUE) @ResponseBody @Hidden public String getRobotsTxt() { - String allowGoogleVisibility = System.getProperty("ALLOW_GOOGLE_VISIBILITY"); - if (allowGoogleVisibility == null) - allowGoogleVisibility = System.getenv("ALLOW_GOOGLE_VISIBILITY"); - if (allowGoogleVisibility == null) - allowGoogleVisibility = "false"; - if (Boolean.parseBoolean(allowGoogleVisibility)) { + Boolean allowGoogle = applicationProperties.getSystem().getGooglevisibility(); + if(Boolean.TRUE.equals(allowGoogle)) { return "User-agent: Googlebot\nAllow: /\n\nUser-agent: *\nAllow: /"; } else { return "User-agent: Googlebot\nDisallow: /\n\nUser-agent: *\nDisallow: /"; diff --git a/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java b/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java index ab18b1b5..0430a8db 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java @@ -8,6 +8,7 @@ import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -24,26 +25,28 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.PostConstruct; import stirling.software.SPDF.config.StartupApplicationListener; +import stirling.software.SPDF.model.ApplicationProperties; @RestController @RequestMapping("/api/v1") @Tag(name = "API", description = "Info APIs") public class MetricsController { + + @Autowired + ApplicationProperties applicationProperties; + + private final MeterRegistry meterRegistry; - private boolean isEndpointEnabled; + private boolean metricsEnabled; @PostConstruct public void init() { - String isEndpointEnabled = System.getProperty("ENABLE_API_METRICS"); - if (isEndpointEnabled == null) { - isEndpointEnabled = System.getenv("ENABLE_API_METRICS"); - if (isEndpointEnabled == null) { - isEndpointEnabled = "true"; - } - } - this.isEndpointEnabled = "true".equalsIgnoreCase(isEndpointEnabled); + Boolean metricsEnabled = applicationProperties.getMetrics().getEnabled(); + if(metricsEnabled == null) + metricsEnabled = true; + this.metricsEnabled = metricsEnabled; } public MetricsController(MeterRegistry meterRegistry) { @@ -54,7 +57,7 @@ public class MetricsController { @Operation(summary = "Application status and version", description = "This endpoint returns the status of the application and its version number.") public ResponseEntity getStatus() { - if (!isEndpointEnabled) { + if (!metricsEnabled) { return ResponseEntity.status(HttpStatus.FORBIDDEN).body("This endpoint is disabled."); } @@ -68,7 +71,7 @@ public class MetricsController { @Operation(summary = "GET request count", description = "This endpoint returns the total count of GET requests or the count of GET requests for a specific endpoint.") public ResponseEntity getPageLoads(@RequestParam(required = false, name = "endpoint") @Parameter(description = "endpoint") Optional endpoint) { - if (!isEndpointEnabled) { + if (!metricsEnabled) { return ResponseEntity.status(HttpStatus.FORBIDDEN).body("This endpoint is disabled."); } try { @@ -109,7 +112,7 @@ public class MetricsController { @Operation(summary = "GET requests count for all endpoints", description = "This endpoint returns the count of GET requests for each endpoint.") public ResponseEntity getAllEndpointLoads() { - if (!isEndpointEnabled) { + if (!metricsEnabled) { return ResponseEntity.status(HttpStatus.FORBIDDEN).body("This endpoint is disabled."); } try { @@ -170,7 +173,7 @@ public class MetricsController { @Operation(summary = "POST request count", description = "This endpoint returns the total count of POST requests or the count of POST requests for a specific endpoint.") public ResponseEntity getTotalRequests(@RequestParam(required = false, name = "endpoint") @Parameter(description = "endpoint") Optional endpoint) { - if (!isEndpointEnabled) { + if (!metricsEnabled) { return ResponseEntity.status(HttpStatus.FORBIDDEN).body("This endpoint is disabled."); } try { @@ -208,7 +211,7 @@ public class MetricsController { @Operation(summary = "POST requests count for all endpoints", description = "This endpoint returns the count of POST requests for each endpoint.") public ResponseEntity getAllPostRequests() { - if (!isEndpointEnabled) { + if (!metricsEnabled) { return ResponseEntity.status(HttpStatus.FORBIDDEN).body("This endpoint is disabled."); } try { @@ -244,7 +247,7 @@ public class MetricsController { @GetMapping("/uptime") public ResponseEntity getUptime() { - if (!isEndpointEnabled) { + if (!metricsEnabled) { return ResponseEntity.status(HttpStatus.FORBIDDEN).body("This endpoint is disabled."); } diff --git a/src/main/java/stirling/software/SPDF/model/ApplicationProperties.java b/src/main/java/stirling/software/SPDF/model/ApplicationProperties.java index b81dbbe1..e49fbee1 100644 --- a/src/main/java/stirling/software/SPDF/model/ApplicationProperties.java +++ b/src/main/java/stirling/software/SPDF/model/ApplicationProperties.java @@ -11,7 +11,7 @@ import stirling.software.SPDF.config.YamlPropertySourceFactory; @Configuration @ConfigurationProperties(prefix = "") -@PropertySource(value = "file:./configs/application.yml", factory = YamlPropertySourceFactory.class) +@PropertySource(value = "file:./configs/settings.yml", factory = YamlPropertySourceFactory.class) public class ApplicationProperties { private Security security; private System system; @@ -19,6 +19,15 @@ public class ApplicationProperties { private Endpoints endpoints; private Metrics metrics; private AutomaticallyGenerated automaticallyGenerated; + private AutoPipeline autoPipeline; + + public AutoPipeline getAutoPipeline() { + return autoPipeline != null ? autoPipeline : new AutoPipeline(); + } + + public void setAutoPipeline(AutoPipeline autoPipeline) { + this.autoPipeline = autoPipeline; + } public Security getSecurity() { return security != null ? security : new Security(); @@ -67,16 +76,33 @@ public class ApplicationProperties { public void setAutomaticallyGenerated(AutomaticallyGenerated automaticallyGenerated) { this.automaticallyGenerated = automaticallyGenerated; } - - + @Override public String toString() { return "ApplicationProperties [security=" + security + ", system=" + system + ", ui=" + ui + ", endpoints=" - + endpoints + ", metrics=" + metrics + ", automaticallyGenerated=" - + automaticallyGenerated + "]"; + + endpoints + ", metrics=" + metrics + ", automaticallyGenerated=" + automaticallyGenerated + + ", autoPipeline=" + autoPipeline + "]"; } + public static class AutoPipeline { + private String outputFolder; + public String getOutputFolder() { + return outputFolder; + } + + public void setOutputFolder(String outputFolder) { + this.outputFolder = outputFolder; + } + + @Override + public String toString() { + return "AutoPipeline [outputFolder=" + outputFolder + "]"; + } + + + + } public static class Security { private Boolean enableLogin; private InitialLogin initialLogin; diff --git a/src/main/resources/application.yml.template b/src/main/resources/settings.yml.template similarity index 100% rename from src/main/resources/application.yml.template rename to src/main/resources/settings.yml.template