diff --git a/build.gradle b/build.gradle index 2560c991c..ad82dfabb 100644 --- a/build.gradle +++ b/build.gradle @@ -413,13 +413,14 @@ configurations.all { // Exclude Tomcat exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat" } + dependencies { + implementation project(':common') //tmp for security bumps implementation 'ch.qos.logback:logback-core:1.5.18' implementation 'ch.qos.logback:logback-classic:1.5.18' - // Exclude vulnerable BouncyCastle version used in tableau configurations.all { exclude group: 'org.bouncycastle', module: 'bcpkix-jdk15on' @@ -448,8 +449,6 @@ dependencies { if (System.getenv("DOCKER_ENABLE_SECURITY") != "false") { - - implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'io.micrometer:micrometer-registry-prometheus' implementation "org.springframework.boot:spring-boot-starter-security:$springBootVersion" @@ -545,7 +544,6 @@ dependencies { // Mockito (core) testImplementation 'org.mockito:mockito-core:5.18.0' - testRuntimeOnly 'org.mockito:mockito-inline:5.2.0' } diff --git a/common/.gitignore b/common/.gitignore new file mode 100644 index 000000000..90d48ccea --- /dev/null +++ b/common/.gitignore @@ -0,0 +1,196 @@ +### Eclipse ### +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.exe +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders +.classpath +.project +version.properties + +#### Stirling-PDF Files ### +pipeline/watchedFolders/ +pipeline/finishedFolders/ +customFiles/ +configs/ +watchedFolders/ +clientWebUI/ +!cucumber/ +!cucumber/exampleFiles/ +!cucumber/exampleFiles/example_html.zip +exampleYmlFiles/stirling/ +/testing/file_snapshots +SwaggerDoc.json + +# Gradle +.gradle +.lock + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# CDT- autotools +.autotools + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +# Annotation Processing +.apt_generated/ +.apt_generated_test/ + +# Scala IDE specific (Scala & Java development for Eclipse) +.cache-main +.scala_dependencies +.worksheet + +# Uncomment this line if you wish to ignore the project description file. +# Typically, this file would be tracked if it contains build/dependency configurations: +#.project + +### Eclipse Patch ### +# Spring Boot Tooling +.sts4-cache/ + +### Git ### +# Created by git for backups. To disable backups in Git: +# $ git config --global mergetool.keepBackup false +*.orig + +# Created by git when using merge tools for conflicts +*.BACKUP.* +*.BASE.* +*.LOCAL.* +*.REMOTE.* +*_BACKUP_*.txt +*_BASE_*.txt +*_LOCAL_*.txt +*_REMOTE_*.txt + +### Java ### +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar +*.db +/build + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*.pyo + +# Virtual environments +.env* +.venv* +env*/ +venv*/ +ENV/ +env.bak/ +venv.bak/ + +# VS Code +/.vscode/**/* +!/.vscode/settings.json +!/.vscode/extensions.json + +# IntelliJ IDEA +.idea/ +*.iml +out/ + +# Ignore Mac DS_Store files +.DS_Store +**/.DS_Store + +# cucumber +/cucumber/reports/** + +# Certs and Security Files +*.p12 +*.pk8 +*.pem +*.crt +*.cer +*.cert +*.der +*.key +*.csr +*.kdbx +*.jks +*.asc + +# SSH Keys +*.pub +*.priv +id_rsa +id_rsa.pub +id_ecdsa +id_ecdsa.pub +id_ed25519 +id_ed25519.pub +.ssh/ +*ssh + +# cache +.cache +.ruff_cache +.mypy_cache +.pytest_cache +.ipynb_checkpoints + +**/jcef-bundle/ + +# node_modules +node_modules/ +*.mjs diff --git a/common/build.gradle b/common/build.gradle new file mode 100644 index 000000000..64b98b88b --- /dev/null +++ b/common/build.gradle @@ -0,0 +1,52 @@ +plugins { + id 'java-library' + id 'io.spring.dependency-management' version '1.1.7' +} + +group = 'stirling.software' +version = '0.46.2' + +ext { + lombokVersion = "1.18.38" +} + +java { + sourceCompatibility = JavaVersion.VERSION_17 +} + +repositories { + mavenCentral() +} + +configurations.all { + exclude group: 'commons-logging', module: 'commons-logging' + exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat" +} + +dependencyManagement { + imports { + mavenBom 'org.springframework.boot:spring-boot-dependencies:3.4.5' + } +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' + implementation 'com.googlecode.owasp-java-html-sanitizer:owasp-java-html-sanitizer:20240325.1' + implementation 'com.fathzer:javaluator:3.0.6' + implementation 'com.posthog.java:posthog:1.2.0' + implementation 'io.github.pixee:java-security-toolkit:1.2.1' + implementation 'org.apache.commons:commons-lang3:3.17.0' + implementation 'com.drewnoakes:metadata-extractor:2.19.0' // Image metadata extractor + implementation 'com.vladsch.flexmark:flexmark-html2md-converter:0.64.8' + implementation "org.apache.pdfbox:pdfbox:$pdfboxVersion" + implementation 'jakarta.servlet:jakarta.servlet-api:6.0.0' + implementation 'org.snakeyaml:snakeyaml-engine:2.9' + implementation "org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.6" + + compileOnly "org.projectlombok:lombok:$lombokVersion" + annotationProcessor "org.projectlombok:lombok:$lombokVersion" + + testImplementation "org.springframework.boot:spring-boot-starter-test" + testRuntimeOnly 'org.mockito:mockito-inline:5.2.0' +} diff --git a/src/main/java/org/apache/pdfbox/examples/util/DeletingRandomAccessFile.java b/common/src/main/java/org/apache/pdfbox/examples/util/DeletingRandomAccessFile.java similarity index 100% rename from src/main/java/org/apache/pdfbox/examples/util/DeletingRandomAccessFile.java rename to common/src/main/java/org/apache/pdfbox/examples/util/DeletingRandomAccessFile.java diff --git a/src/main/java/stirling/software/SPDF/config/AppConfig.java b/common/src/main/java/stirling/software/common/configuration/AppConfig.java similarity index 88% rename from src/main/java/stirling/software/SPDF/config/AppConfig.java rename to common/src/main/java/stirling/software/common/configuration/AppConfig.java index fd55a471d..58a60ed1c 100644 --- a/src/main/java/stirling/software/SPDF/config/AppConfig.java +++ b/common/src/main/java/stirling/software/common/configuration/AppConfig.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.config; +package stirling.software.common.configuration; import java.io.IOException; import java.nio.file.Files; @@ -8,7 +8,9 @@ import java.util.List; import java.util.Locale; import java.util.Properties; import java.util.function.Predicate; - +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -21,21 +23,29 @@ import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.thymeleaf.spring6.SpringTemplateEngine; +import stirling.software.common.model.ApplicationProperties; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.model.ApplicationProperties; - -@Configuration @Lazy @Slf4j +@Configuration @RequiredArgsConstructor public class AppConfig { + private final Environment env; + private final ApplicationProperties applicationProperties; - private final Environment env; + @Getter + @Value("${baseUrl:http://localhost}") + private String baseUrl; + + @Getter + @Value("${server.servlet.context-path:/}") + private String contextPath; + + @Getter + @Value("${server.port:8080}") + private String serverPort; @Bean @ConditionalOnProperty(name = "system.customHTMLFiles", havingValue = "true") @@ -198,6 +208,31 @@ public class AppConfig { return applicationProperties.getAutomaticallyGenerated().getUUID(); } + @Bean + public ApplicationProperties.Security security() { + return applicationProperties.getSecurity(); + } + + @Bean + public ApplicationProperties.Security.OAUTH2 oAuth2() { + return applicationProperties.getSecurity().getOauth2(); + } + + @Bean + public ApplicationProperties.Premium premium() { + return applicationProperties.getPremium(); + } + + @Bean + public ApplicationProperties.System system() { + return applicationProperties.getSystem(); + } + + @Bean + public ApplicationProperties.Datasource datasource() { + return applicationProperties.getSystem().getDatasource(); + } + @Bean(name = "disablePixel") public boolean disablePixel() { return Boolean.getBoolean(env.getProperty("DISABLE_PIXEL")); diff --git a/src/main/java/stirling/software/SPDF/config/ConfigInitializer.java b/common/src/main/java/stirling/software/common/configuration/ConfigInitializer.java similarity index 98% rename from src/main/java/stirling/software/SPDF/config/ConfigInitializer.java rename to common/src/main/java/stirling/software/common/configuration/ConfigInitializer.java index 95584ef14..50090ee51 100644 --- a/src/main/java/stirling/software/SPDF/config/ConfigInitializer.java +++ b/common/src/main/java/stirling/software/common/configuration/ConfigInitializer.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.config; +package stirling.software.common.configuration; import java.io.FileNotFoundException; import java.io.IOException; @@ -13,6 +13,8 @@ import java.util.List; import lombok.extern.slf4j.Slf4j; +import stirling.software.common.util.YamlHelper; + /** * A naive, line-based approach to merging "settings.yml" with "settings.yml.template" while * preserving exact whitespace, blank lines, and inline comments -- but we only rewrite the file if @@ -76,7 +78,7 @@ public class ConfigInitializer { Path customSettingsPath = Paths.get(InstallationPathConfig.getCustomSettingsPath()); if (Files.notExists(customSettingsPath)) { Files.createFile(customSettingsPath); - log.info("Created custom_settings file: {}", customSettingsPath.toString()); + log.info("Created custom_settings file: {}", customSettingsPath); } } diff --git a/src/main/java/stirling/software/SPDF/config/FileFallbackTemplateResolver.java b/common/src/main/java/stirling/software/common/configuration/FileFallbackTemplateResolver.java similarity index 94% rename from src/main/java/stirling/software/SPDF/config/FileFallbackTemplateResolver.java rename to common/src/main/java/stirling/software/common/configuration/FileFallbackTemplateResolver.java index 8073f2358..ef4bbc052 100644 --- a/src/main/java/stirling/software/SPDF/config/FileFallbackTemplateResolver.java +++ b/common/src/main/java/stirling/software/common/configuration/FileFallbackTemplateResolver.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.config; +package stirling.software.common.configuration; import java.io.IOException; import java.io.InputStream; @@ -10,10 +10,9 @@ import org.thymeleaf.IEngineConfiguration; import org.thymeleaf.templateresolver.AbstractConfigurableTemplateResolver; import org.thymeleaf.templateresource.FileTemplateResource; import org.thymeleaf.templateresource.ITemplateResource; - import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.InputStreamTemplateResource; +import stirling.software.common.model.InputStreamTemplateResource; @Slf4j public class FileFallbackTemplateResolver extends AbstractConfigurableTemplateResolver { diff --git a/src/main/java/stirling/software/SPDF/config/InstallationPathConfig.java b/common/src/main/java/stirling/software/common/configuration/InstallationPathConfig.java similarity index 75% rename from src/main/java/stirling/software/SPDF/config/InstallationPathConfig.java rename to common/src/main/java/stirling/software/common/configuration/InstallationPathConfig.java index 557a152e7..9d9d66e39 100644 --- a/src/main/java/stirling/software/SPDF/config/InstallationPathConfig.java +++ b/common/src/main/java/stirling/software/common/configuration/InstallationPathConfig.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.config; +package stirling.software.common.configuration; import java.io.File; import java.nio.file.Paths; @@ -48,25 +48,22 @@ public class InstallationPathConfig { String os = System.getProperty("os.name").toLowerCase(); if (os.contains("win")) { return Paths.get( - System.getenv("APPDATA"), // parent path - "Stirling-PDF") - .toString() - + File.separator; + System.getenv("APPDATA"), // parent path + "Stirling-PDF") + + File.separator; } else if (os.contains("mac")) { return Paths.get( - System.getProperty("user.home"), - "Library", - "Application Support", - "Stirling-PDF") - .toString() - + File.separator; + System.getProperty("user.home"), + "Library", + "Application Support", + "Stirling-PDF") + + File.separator; } else { return Paths.get( - System.getProperty("user.home"), // parent path - ".config", - "Stirling-PDF") - .toString() - + File.separator; + System.getProperty("user.home"), // parent path + ".config", + "Stirling-PDF") + + File.separator; } } return "." + File.separator; diff --git a/src/main/java/stirling/software/SPDF/config/PostHogConfig.java b/common/src/main/java/stirling/software/common/configuration/PostHogConfig.java similarity index 95% rename from src/main/java/stirling/software/SPDF/config/PostHogConfig.java rename to common/src/main/java/stirling/software/common/configuration/PostHogConfig.java index 4d537112e..589b5cac9 100644 --- a/src/main/java/stirling/software/SPDF/config/PostHogConfig.java +++ b/common/src/main/java/stirling/software/common/configuration/PostHogConfig.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.config; +package stirling.software.common.configuration; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; diff --git a/src/main/java/stirling/software/SPDF/config/PostHogLoggerImpl.java b/common/src/main/java/stirling/software/common/configuration/PostHogLoggerImpl.java similarity index 94% rename from src/main/java/stirling/software/SPDF/config/PostHogLoggerImpl.java rename to common/src/main/java/stirling/software/common/configuration/PostHogLoggerImpl.java index 61c0493d7..5fadfb352 100644 --- a/src/main/java/stirling/software/SPDF/config/PostHogLoggerImpl.java +++ b/common/src/main/java/stirling/software/common/configuration/PostHogLoggerImpl.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.config; +package stirling.software.common.configuration; import org.springframework.stereotype.Component; diff --git a/src/main/java/stirling/software/SPDF/config/RuntimePathConfig.java b/common/src/main/java/stirling/software/common/configuration/RuntimePathConfig.java similarity index 91% rename from src/main/java/stirling/software/SPDF/config/RuntimePathConfig.java rename to common/src/main/java/stirling/software/common/configuration/RuntimePathConfig.java index 037c1dde3..53fa97c25 100644 --- a/src/main/java/stirling/software/SPDF/config/RuntimePathConfig.java +++ b/common/src/main/java/stirling/software/common/configuration/RuntimePathConfig.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.config; +package stirling.software.common.configuration; import java.nio.file.Files; import java.nio.file.Path; @@ -9,9 +9,9 @@ import org.springframework.context.annotation.Configuration; import lombok.Getter; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.model.ApplicationProperties.CustomPaths.Operations; -import stirling.software.SPDF.model.ApplicationProperties.CustomPaths.Pipeline; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties.CustomPaths.Operations; +import stirling.software.common.model.ApplicationProperties.CustomPaths.Pipeline; @Slf4j @Configuration diff --git a/src/main/java/stirling/software/SPDF/config/YamlPropertySourceFactory.java b/common/src/main/java/stirling/software/common/configuration/YamlPropertySourceFactory.java similarity index 86% rename from src/main/java/stirling/software/SPDF/config/YamlPropertySourceFactory.java rename to common/src/main/java/stirling/software/common/configuration/YamlPropertySourceFactory.java index e2818e898..17ad21bfd 100644 --- a/src/main/java/stirling/software/SPDF/config/YamlPropertySourceFactory.java +++ b/common/src/main/java/stirling/software/common/configuration/YamlPropertySourceFactory.java @@ -1,8 +1,6 @@ -package stirling.software.SPDF.config; +package stirling.software.common.configuration; -import java.io.IOException; import java.util.Properties; - import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; import org.springframework.core.env.PropertiesPropertySource; import org.springframework.core.env.PropertySource; @@ -12,8 +10,7 @@ import org.springframework.core.io.support.PropertySourceFactory; public class YamlPropertySourceFactory implements PropertySourceFactory { @Override - public PropertySource createPropertySource(String name, EncodedResource encodedResource) - throws IOException { + public PropertySource createPropertySource(String name, EncodedResource encodedResource) { YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean(); factory.setResources(encodedResource.getResource()); Properties properties = factory.getObject(); diff --git a/common/src/main/java/stirling/software/common/configuration/interfaces/ShowAdminInterface.java b/common/src/main/java/stirling/software/common/configuration/interfaces/ShowAdminInterface.java new file mode 100644 index 000000000..67ec2aa76 --- /dev/null +++ b/common/src/main/java/stirling/software/common/configuration/interfaces/ShowAdminInterface.java @@ -0,0 +1,7 @@ +package stirling.software.common.configuration.interfaces; + +public interface ShowAdminInterface { + default boolean getShowUpdateOnlyAdmins() { + return true; + } +} diff --git a/src/main/java/stirling/software/SPDF/model/ApplicationProperties.java b/common/src/main/java/stirling/software/common/model/ApplicationProperties.java similarity index 94% rename from src/main/java/stirling/software/SPDF/model/ApplicationProperties.java rename to common/src/main/java/stirling/software/common/model/ApplicationProperties.java index 82a17ff2c..cb96ee332 100644 --- a/src/main/java/stirling/software/SPDF/model/ApplicationProperties.java +++ b/common/src/main/java/stirling/software/common/model/ApplicationProperties.java @@ -1,6 +1,4 @@ -package stirling.software.SPDF.model; - -import static stirling.software.SPDF.utils.validation.Validator.*; +package stirling.software.common.model; import java.io.File; import java.io.FileNotFoundException; @@ -14,10 +12,13 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; - +import lombok.Data; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.extern.slf4j.Slf4j; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.core.env.ConfigurableEnvironment; @@ -26,54 +27,23 @@ import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.springframework.core.io.support.EncodedResource; +import org.springframework.stereotype.Component; +import stirling.software.common.configuration.InstallationPathConfig; +import stirling.software.common.configuration.YamlPropertySourceFactory; +import stirling.software.common.model.exception.UnsupportedProviderException; +import stirling.software.common.model.oauth2.GitHubProvider; +import stirling.software.common.model.oauth2.GoogleProvider; +import stirling.software.common.model.oauth2.KeycloakProvider; +import stirling.software.common.model.oauth2.Provider; +import stirling.software.common.util.ValidationUtils; -import lombok.Data; -import lombok.Getter; -import lombok.Setter; -import lombok.ToString; -import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.config.InstallationPathConfig; -import stirling.software.SPDF.config.YamlPropertySourceFactory; -import stirling.software.SPDF.model.exception.UnsupportedProviderException; -import stirling.software.SPDF.model.provider.GitHubProvider; -import stirling.software.SPDF.model.provider.GoogleProvider; -import stirling.software.SPDF.model.provider.KeycloakProvider; -import stirling.software.SPDF.model.provider.Provider; - -@Configuration -@ConfigurationProperties(prefix = "") @Data -@Order(Ordered.HIGHEST_PRECEDENCE) @Slf4j +@Component +@Order(Ordered.HIGHEST_PRECEDENCE) +@ConfigurationProperties(prefix = "") public class ApplicationProperties { - @Bean - public PropertySource dynamicYamlPropertySource(ConfigurableEnvironment environment) - throws IOException { - String configPath = InstallationPathConfig.getSettingsPath(); - log.debug("Attempting to load settings from: " + configPath); - - File file = new File(configPath); - if (!file.exists()) { - log.error("Warning: Settings file does not exist at: " + configPath); - } - - Resource resource = new FileSystemResource(configPath); - if (!resource.exists()) { - throw new FileNotFoundException("Settings file not found at: " + configPath); - } - - EncodedResource encodedResource = new EncodedResource(resource); - PropertySource propertySource = - new YamlPropertySourceFactory().createPropertySource(null, encodedResource); - environment.getPropertySources().addFirst(propertySource); - - log.debug("Loaded properties: " + propertySource.getSource()); - - return propertySource; - } - private Legal legal = new Legal(); private Security security = new Security(); private System system = new System(); @@ -89,6 +59,32 @@ public class ApplicationProperties { private AutoPipeline autoPipeline = new AutoPipeline(); private ProcessExecutor processExecutor = new ProcessExecutor(); + @Bean + public PropertySource dynamicYamlPropertySource(ConfigurableEnvironment environment) + throws IOException { + String configPath = InstallationPathConfig.getSettingsPath(); + log.debug("Attempting to load settings from: " + configPath); + + File file = new File(configPath); + if (!file.exists()) { + log.error("Warning: Settings file does not exist at: " + configPath); + } + + Resource resource = new FileSystemResource(configPath); + if (!resource.exists()) { + throw new FileNotFoundException("Settings file not found at: " + configPath); + } + + EncodedResource encodedResource = new EncodedResource(resource); + PropertySource propertySource = + new YamlPropertySourceFactory().createPropertySource(null, encodedResource); + environment.getPropertySources().addFirst(propertySource); + + log.debug("Loaded properties: " + propertySource.getSource()); + + return propertySource; + } + @Data public static class AutoPipeline { private String outputFolder; @@ -248,11 +244,11 @@ public class ApplicationProperties { } public boolean isSettingsValid() { - return !isStringEmpty(this.getIssuer()) - && !isStringEmpty(this.getClientId()) - && !isStringEmpty(this.getClientSecret()) - && !isCollectionEmpty(this.getScopes()) - && !isStringEmpty(this.getUseAsUsername()); + return !ValidationUtils.isStringEmpty(this.getIssuer()) + && !ValidationUtils.isStringEmpty(this.getClientId()) + && !ValidationUtils.isStringEmpty(this.getClientSecret()) + && !ValidationUtils.isCollectionEmpty(this.getScopes()) + && !ValidationUtils.isStringEmpty(this.getUseAsUsername()); } @Data diff --git a/src/main/java/stirling/software/SPDF/utils/FileInfo.java b/common/src/main/java/stirling/software/common/model/FileInfo.java similarity index 97% rename from src/main/java/stirling/software/SPDF/utils/FileInfo.java rename to common/src/main/java/stirling/software/common/model/FileInfo.java index c817b8768..41a3a4717 100644 --- a/src/main/java/stirling/software/SPDF/utils/FileInfo.java +++ b/common/src/main/java/stirling/software/common/model/FileInfo.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.model; import java.nio.file.Path; import java.nio.file.Paths; diff --git a/src/main/java/stirling/software/SPDF/model/InputStreamTemplateResource.java b/common/src/main/java/stirling/software/common/model/InputStreamTemplateResource.java similarity index 96% rename from src/main/java/stirling/software/SPDF/model/InputStreamTemplateResource.java rename to common/src/main/java/stirling/software/common/model/InputStreamTemplateResource.java index 3e0bd65e8..4bc81cafa 100644 --- a/src/main/java/stirling/software/SPDF/model/InputStreamTemplateResource.java +++ b/common/src/main/java/stirling/software/common/model/InputStreamTemplateResource.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model; +package stirling.software.common.model; import java.io.IOException; import java.io.InputStream; diff --git a/common/src/main/java/stirling/software/common/model/PdfMetadata.java b/common/src/main/java/stirling/software/common/model/PdfMetadata.java new file mode 100644 index 000000000..ef8684788 --- /dev/null +++ b/common/src/main/java/stirling/software/common/model/PdfMetadata.java @@ -0,0 +1,19 @@ +package stirling.software.common.model; + +import java.util.Calendar; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class PdfMetadata { + private String author; + private String producer; + private String title; + private String creator; + private String subject; + private String keywords; + private Calendar creationDate; + private Calendar modificationDate; +} diff --git a/common/src/main/java/stirling/software/common/model/api/GeneralFile.java b/common/src/main/java/stirling/software/common/model/api/GeneralFile.java new file mode 100644 index 000000000..84675dcb5 --- /dev/null +++ b/common/src/main/java/stirling/software/common/model/api/GeneralFile.java @@ -0,0 +1,19 @@ +package stirling.software.common.model.api; + +import org.springframework.web.multipart.MultipartFile; + +import io.swagger.v3.oas.annotations.media.Schema; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode +public class GeneralFile { + + @Schema( + description = "The input file", + requiredMode = Schema.RequiredMode.REQUIRED, + format = "binary") + private MultipartFile fileInput; +} diff --git a/src/main/java/stirling/software/SPDF/model/api/PDFFile.java b/common/src/main/java/stirling/software/common/model/api/PDFFile.java similarity index 91% rename from src/main/java/stirling/software/SPDF/model/api/PDFFile.java rename to common/src/main/java/stirling/software/common/model/api/PDFFile.java index c6284ab99..8ea3f0456 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFFile.java +++ b/common/src/main/java/stirling/software/common/model/api/PDFFile.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model.api; +package stirling.software.common.model.api; import org.springframework.web.multipart.MultipartFile; diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/HTMLToPdfRequest.java b/common/src/main/java/stirling/software/common/model/api/converters/HTMLToPdfRequest.java similarity index 79% rename from src/main/java/stirling/software/SPDF/model/api/converters/HTMLToPdfRequest.java rename to common/src/main/java/stirling/software/common/model/api/converters/HTMLToPdfRequest.java index 822c5f898..4f43dff6f 100644 --- a/src/main/java/stirling/software/SPDF/model/api/converters/HTMLToPdfRequest.java +++ b/common/src/main/java/stirling/software/common/model/api/converters/HTMLToPdfRequest.java @@ -1,11 +1,10 @@ -package stirling.software.SPDF.model.api.converters; +package stirling.software.common.model.api.converters; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; - -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/HighContrastColorCombination.java b/common/src/main/java/stirling/software/common/model/api/misc/HighContrastColorCombination.java similarity index 75% rename from src/main/java/stirling/software/SPDF/model/api/misc/HighContrastColorCombination.java rename to common/src/main/java/stirling/software/common/model/api/misc/HighContrastColorCombination.java index 27c6290bb..a3ff86bce 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/HighContrastColorCombination.java +++ b/common/src/main/java/stirling/software/common/model/api/misc/HighContrastColorCombination.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model.api.misc; +package stirling.software.common.model.api.misc; public enum HighContrastColorCombination { WHITE_TEXT_ON_BLACK, diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/ReplaceAndInvert.java b/common/src/main/java/stirling/software/common/model/api/misc/ReplaceAndInvert.java similarity index 66% rename from src/main/java/stirling/software/SPDF/model/api/misc/ReplaceAndInvert.java rename to common/src/main/java/stirling/software/common/model/api/misc/ReplaceAndInvert.java index c3acdc560..f9cbaace1 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/ReplaceAndInvert.java +++ b/common/src/main/java/stirling/software/common/model/api/misc/ReplaceAndInvert.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model.api.misc; +package stirling.software.common.model.api.misc; public enum ReplaceAndInvert { HIGH_CONTRAST_COLOR, diff --git a/common/src/main/java/stirling/software/common/model/api/security/RedactionArea.java b/common/src/main/java/stirling/software/common/model/api/security/RedactionArea.java new file mode 100644 index 000000000..e0028a8ae --- /dev/null +++ b/common/src/main/java/stirling/software/common/model/api/security/RedactionArea.java @@ -0,0 +1,28 @@ +package stirling.software.common.model.api.security; + +import io.swagger.v3.oas.annotations.media.Schema; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode +public class RedactionArea { + @Schema(description = "The left edge point of the area to be redacted.") + private Double x; + + @Schema(description = "The top edge point of the area to be redacted.") + private Double y; + + @Schema(description = "The height of the area to be redacted.") + private Double height; + + @Schema(description = "The width of the area to be redacted.") + private Double width; + + @Schema(description = "The page on which the area should be redacted.") + private Integer page; + + @Schema(description = "The color used to redact the specified area.") + private String color; +} diff --git a/common/src/main/java/stirling/software/common/model/enumeration/Role.java b/common/src/main/java/stirling/software/common/model/enumeration/Role.java new file mode 100644 index 000000000..9e3231918 --- /dev/null +++ b/common/src/main/java/stirling/software/common/model/enumeration/Role.java @@ -0,0 +1,66 @@ +package stirling.software.common.model.enumeration; + +import java.util.LinkedHashMap; +import java.util.Map; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum Role { + + // Unlimited access + ADMIN("ROLE_ADMIN", Integer.MAX_VALUE, Integer.MAX_VALUE, "adminUserSettings.admin"), + + // Unlimited access + USER("ROLE_USER", Integer.MAX_VALUE, Integer.MAX_VALUE, "adminUserSettings.user"), + + // 40 API calls Per Day, 40 web calls + LIMITED_API_USER("ROLE_LIMITED_API_USER", 40, 40, "adminUserSettings.apiUser"), + + // 20 API calls Per Day, 20 web calls + EXTRA_LIMITED_API_USER("ROLE_EXTRA_LIMITED_API_USER", 20, 20, "adminUserSettings.extraApiUser"), + + // 0 API calls per day and 20 web calls + WEB_ONLY_USER("ROLE_WEB_ONLY_USER", 0, 20, "adminUserSettings.webOnlyUser"), + + INTERNAL_API_USER( + "STIRLING-PDF-BACKEND-API-USER", + Integer.MAX_VALUE, + Integer.MAX_VALUE, + "adminUserSettings.internalApiUser"), + + DEMO_USER("ROLE_DEMO_USER", 100, 100, "adminUserSettings.demoUser"); + + private final String roleId; + private final int apiCallsPerDay; + private final int webCallsPerDay; + private final String roleName; + + public static String getRoleNameByRoleId(String roleId) { + // Using the fromString method to get the Role enum based on the roleId + Role role = fromString(roleId); + // Return the roleName of the found Role enum + return role.getRoleName(); + } + + // Method to retrieve all role IDs and role names + public static Map getAllRoleDetails() { + // Using LinkedHashMap to preserve order + Map roleDetails = new LinkedHashMap<>(); + for (Role role : Role.values()) { + roleDetails.put(role.getRoleId(), role.getRoleName()); + } + return roleDetails; + } + + public static Role fromString(String roleId) { + for (Role role : Role.values()) { + if (role.getRoleId().equalsIgnoreCase(roleId)) { + return role; + } + } + throw new IllegalArgumentException("No Role defined for id: " + roleId); + } +} diff --git a/src/main/java/stirling/software/SPDF/model/UsernameAttribute.java b/common/src/main/java/stirling/software/common/model/enumeration/UsernameAttribute.java similarity index 90% rename from src/main/java/stirling/software/SPDF/model/UsernameAttribute.java rename to common/src/main/java/stirling/software/common/model/enumeration/UsernameAttribute.java index 23159ade1..86f95793c 100644 --- a/src/main/java/stirling/software/SPDF/model/UsernameAttribute.java +++ b/common/src/main/java/stirling/software/common/model/enumeration/UsernameAttribute.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model; +package stirling.software.common.model.enumeration; import lombok.Getter; diff --git a/common/src/main/java/stirling/software/common/model/exception/UnsupportedClaimException.java b/common/src/main/java/stirling/software/common/model/exception/UnsupportedClaimException.java new file mode 100644 index 000000000..37dcc2fbc --- /dev/null +++ b/common/src/main/java/stirling/software/common/model/exception/UnsupportedClaimException.java @@ -0,0 +1,7 @@ +package stirling.software.common.model.exception; + +public class UnsupportedClaimException extends RuntimeException { + public UnsupportedClaimException(String message) { + super(message); + } +} diff --git a/src/main/java/stirling/software/SPDF/model/exception/UnsupportedProviderException.java b/common/src/main/java/stirling/software/common/model/exception/UnsupportedProviderException.java similarity index 75% rename from src/main/java/stirling/software/SPDF/model/exception/UnsupportedProviderException.java rename to common/src/main/java/stirling/software/common/model/exception/UnsupportedProviderException.java index d0bd8330c..0b9a3375d 100644 --- a/src/main/java/stirling/software/SPDF/model/exception/UnsupportedProviderException.java +++ b/common/src/main/java/stirling/software/common/model/exception/UnsupportedProviderException.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model.exception; +package stirling.software.common.model.exception; public class UnsupportedProviderException extends Exception { public UnsupportedProviderException(String message) { diff --git a/src/main/java/stirling/software/SPDF/model/provider/GitHubProvider.java b/common/src/main/java/stirling/software/common/model/oauth2/GitHubProvider.java similarity index 94% rename from src/main/java/stirling/software/SPDF/model/provider/GitHubProvider.java rename to common/src/main/java/stirling/software/common/model/oauth2/GitHubProvider.java index 7057ec903..a62eb21fb 100644 --- a/src/main/java/stirling/software/SPDF/model/provider/GitHubProvider.java +++ b/common/src/main/java/stirling/software/common/model/oauth2/GitHubProvider.java @@ -1,11 +1,9 @@ -package stirling.software.SPDF.model.provider; +package stirling.software.common.model.oauth2; import java.util.ArrayList; import java.util.Collection; - import lombok.NoArgsConstructor; - -import stirling.software.SPDF.model.UsernameAttribute; +import stirling.software.common.model.enumeration.UsernameAttribute; @NoArgsConstructor public class GitHubProvider extends Provider { diff --git a/src/main/java/stirling/software/SPDF/model/provider/GoogleProvider.java b/common/src/main/java/stirling/software/common/model/oauth2/GoogleProvider.java similarity index 95% rename from src/main/java/stirling/software/SPDF/model/provider/GoogleProvider.java rename to common/src/main/java/stirling/software/common/model/oauth2/GoogleProvider.java index 1bb217c9f..34ce9d106 100644 --- a/src/main/java/stirling/software/SPDF/model/provider/GoogleProvider.java +++ b/common/src/main/java/stirling/software/common/model/oauth2/GoogleProvider.java @@ -1,11 +1,9 @@ -package stirling.software.SPDF.model.provider; +package stirling.software.common.model.oauth2; import java.util.ArrayList; import java.util.Collection; - import lombok.NoArgsConstructor; - -import stirling.software.SPDF.model.UsernameAttribute; +import stirling.software.common.model.enumeration.UsernameAttribute; @NoArgsConstructor public class GoogleProvider extends Provider { diff --git a/src/main/java/stirling/software/SPDF/model/provider/KeycloakProvider.java b/common/src/main/java/stirling/software/common/model/oauth2/KeycloakProvider.java similarity index 93% rename from src/main/java/stirling/software/SPDF/model/provider/KeycloakProvider.java rename to common/src/main/java/stirling/software/common/model/oauth2/KeycloakProvider.java index c01d27c20..420230a0e 100644 --- a/src/main/java/stirling/software/SPDF/model/provider/KeycloakProvider.java +++ b/common/src/main/java/stirling/software/common/model/oauth2/KeycloakProvider.java @@ -1,11 +1,9 @@ -package stirling.software.SPDF.model.provider; +package stirling.software.common.model.oauth2; import java.util.ArrayList; import java.util.Collection; - import lombok.NoArgsConstructor; - -import stirling.software.SPDF.model.UsernameAttribute; +import stirling.software.common.model.enumeration.UsernameAttribute; @NoArgsConstructor public class KeycloakProvider extends Provider { diff --git a/src/main/java/stirling/software/SPDF/model/provider/Provider.java b/common/src/main/java/stirling/software/common/model/oauth2/Provider.java similarity index 89% rename from src/main/java/stirling/software/SPDF/model/provider/Provider.java rename to common/src/main/java/stirling/software/common/model/oauth2/Provider.java index c15bc34a6..c5d91efdb 100644 --- a/src/main/java/stirling/software/SPDF/model/provider/Provider.java +++ b/common/src/main/java/stirling/software/common/model/oauth2/Provider.java @@ -1,16 +1,13 @@ -package stirling.software.SPDF.model.provider; - -import static stirling.software.SPDF.model.UsernameAttribute.EMAIL; +package stirling.software.common.model.oauth2; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; - import lombok.Data; import lombok.NoArgsConstructor; - -import stirling.software.SPDF.model.UsernameAttribute; -import stirling.software.SPDF.model.exception.UnsupportedUsernameAttribute; +import stirling.software.common.model.enumeration.UsernameAttribute; +import stirling.software.common.model.exception.UnsupportedClaimException; +import static stirling.software.common.model.enumeration.UsernameAttribute.EMAIL; @Data @NoArgsConstructor @@ -83,7 +80,7 @@ public class Provider { return usernameAttribute; } default -> - throw new UnsupportedUsernameAttribute( + throw new UnsupportedClaimException( String.format(EXCEPTION_MESSAGE, usernameAttribute, clientName)); } } @@ -94,7 +91,7 @@ public class Provider { return usernameAttribute; } default -> - throw new UnsupportedUsernameAttribute( + throw new UnsupportedClaimException( String.format(EXCEPTION_MESSAGE, usernameAttribute, clientName)); } } @@ -105,7 +102,7 @@ public class Provider { return usernameAttribute; } default -> - throw new UnsupportedUsernameAttribute( + throw new UnsupportedClaimException( String.format(EXCEPTION_MESSAGE, usernameAttribute, clientName)); } } diff --git a/src/main/java/stirling/software/SPDF/service/CustomPDFDocumentFactory.java b/common/src/main/java/stirling/software/common/service/CustomPDFDocumentFactory.java similarity index 99% rename from src/main/java/stirling/software/SPDF/service/CustomPDFDocumentFactory.java rename to common/src/main/java/stirling/software/common/service/CustomPDFDocumentFactory.java index e5bb50d73..e4b9173d0 100644 --- a/src/main/java/stirling/software/SPDF/service/CustomPDFDocumentFactory.java +++ b/common/src/main/java/stirling/software/common/service/CustomPDFDocumentFactory.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.service; +package stirling.software.common.service; import java.io.ByteArrayOutputStream; import java.io.File; @@ -22,7 +22,7 @@ import org.springframework.web.multipart.MultipartFile; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; /** * Adaptive PDF document factory that optimizes memory usage based on file size and available system diff --git a/src/main/java/stirling/software/SPDF/service/PdfMetadataService.java b/common/src/main/java/stirling/software/common/service/PdfMetadataService.java similarity index 95% rename from src/main/java/stirling/software/SPDF/service/PdfMetadataService.java rename to common/src/main/java/stirling/software/common/service/PdfMetadataService.java index b44ba59be..621e19d46 100644 --- a/src/main/java/stirling/software/SPDF/service/PdfMetadataService.java +++ b/common/src/main/java/stirling/software/common/service/PdfMetadataService.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.service; +package stirling.software.common.service; import java.util.Calendar; @@ -7,9 +7,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; -import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.model.PdfMetadata; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.PdfMetadata; @Service public class PdfMetadataService { diff --git a/src/main/java/stirling/software/SPDF/service/PostHogService.java b/common/src/main/java/stirling/software/common/service/PostHogService.java similarity index 96% rename from src/main/java/stirling/software/SPDF/service/PostHogService.java rename to common/src/main/java/stirling/software/common/service/PostHogService.java index 69cb52061..6965027dd 100644 --- a/src/main/java/stirling/software/SPDF/service/PostHogService.java +++ b/common/src/main/java/stirling/software/common/service/PostHogService.java @@ -1,12 +1,21 @@ -package stirling.software.SPDF.service; +package stirling.software.common.service; import java.io.File; -import java.lang.management.*; +import java.lang.management.GarbageCollectorMXBean; +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.OperatingSystemMXBean; +import java.lang.management.RuntimeMXBean; +import java.lang.management.ThreadMXBean; import java.net.InetAddress; import java.net.NetworkInterface; import java.nio.file.Files; import java.nio.file.Paths; -import java.util.*; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.TimeZone; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -16,8 +25,7 @@ import org.springframework.stereotype.Service; import com.posthog.java.PostHog; -import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface; -import stirling.software.SPDF.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties; @Service public class PostHogService { @@ -200,7 +208,7 @@ public class PostHogService { // New environment variables dockerMetrics.put("version_tag", System.getenv("VERSION_TAG")); - dockerMetrics.put("docker_enable_security", System.getenv("DOCKER_ENABLE_SECURITY")); + dockerMetrics.put("without_enhanced_features", System.getenv("WITHOUT_ENHANCED_FEATURES")); dockerMetrics.put("fat_docker", System.getenv("FAT_DOCKER")); return dockerMetrics; diff --git a/src/main/java/stirling/software/SPDF/controller/api/pipeline/UserServiceInterface.java b/common/src/main/java/stirling/software/common/service/UserServiceInterface.java similarity index 73% rename from src/main/java/stirling/software/SPDF/controller/api/pipeline/UserServiceInterface.java rename to common/src/main/java/stirling/software/common/service/UserServiceInterface.java index 3b69456b1..d4cc25dc0 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/pipeline/UserServiceInterface.java +++ b/common/src/main/java/stirling/software/common/service/UserServiceInterface.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.controller.api.pipeline; +package stirling.software.common.service; public interface UserServiceInterface { String getApiKeyForUser(String username); diff --git a/src/main/java/stirling/software/SPDF/utils/CheckProgramInstall.java b/common/src/main/java/stirling/software/common/util/CheckProgramInstall.java similarity index 94% rename from src/main/java/stirling/software/SPDF/utils/CheckProgramInstall.java rename to common/src/main/java/stirling/software/common/util/CheckProgramInstall.java index 1c0ed2244..f39daf8ae 100644 --- a/src/main/java/stirling/software/SPDF/utils/CheckProgramInstall.java +++ b/common/src/main/java/stirling/software/common/util/CheckProgramInstall.java @@ -1,10 +1,10 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.io.IOException; import java.util.Arrays; import java.util.List; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; public class CheckProgramInstall { diff --git a/src/main/java/stirling/software/SPDF/utils/CustomHtmlSanitizer.java b/common/src/main/java/stirling/software/common/util/CustomHtmlSanitizer.java similarity index 94% rename from src/main/java/stirling/software/SPDF/utils/CustomHtmlSanitizer.java rename to common/src/main/java/stirling/software/common/util/CustomHtmlSanitizer.java index 587aae6fa..e5fe0436a 100644 --- a/src/main/java/stirling/software/SPDF/utils/CustomHtmlSanitizer.java +++ b/common/src/main/java/stirling/software/common/util/CustomHtmlSanitizer.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import org.owasp.html.HtmlPolicyBuilder; import org.owasp.html.PolicyFactory; diff --git a/src/main/java/stirling/software/SPDF/utils/ErrorUtils.java b/common/src/main/java/stirling/software/common/util/ErrorUtils.java similarity index 96% rename from src/main/java/stirling/software/SPDF/utils/ErrorUtils.java rename to common/src/main/java/stirling/software/common/util/ErrorUtils.java index e84e8d885..75097c67e 100644 --- a/src/main/java/stirling/software/SPDF/utils/ErrorUtils.java +++ b/common/src/main/java/stirling/software/common/util/ErrorUtils.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.io.PrintWriter; import java.io.StringWriter; diff --git a/src/main/java/stirling/software/SPDF/utils/FileMonitor.java b/common/src/main/java/stirling/software/common/util/FileMonitor.java similarity index 98% rename from src/main/java/stirling/software/SPDF/utils/FileMonitor.java rename to common/src/main/java/stirling/software/common/util/FileMonitor.java index e0b3fc2cf..e236dee88 100644 --- a/src/main/java/stirling/software/SPDF/utils/FileMonitor.java +++ b/common/src/main/java/stirling/software/common/util/FileMonitor.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static java.nio.file.StandardWatchEventKinds.*; @@ -17,8 +17,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.config.RuntimePathConfig; +import stirling.software.common.configuration.RuntimePathConfig; @Component @Slf4j diff --git a/src/main/java/stirling/software/SPDF/utils/FileToPdf.java b/common/src/main/java/stirling/software/common/util/FileToPdf.java similarity index 97% rename from src/main/java/stirling/software/SPDF/utils/FileToPdf.java rename to common/src/main/java/stirling/software/common/util/FileToPdf.java index da4aeab3c..8439b67a2 100644 --- a/src/main/java/stirling/software/SPDF/utils/FileToPdf.java +++ b/common/src/main/java/stirling/software/common/util/FileToPdf.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.io.*; import java.nio.charset.StandardCharsets; @@ -16,8 +16,8 @@ import java.util.zip.ZipOutputStream; import io.github.pixee.security.ZipSecurity; -import stirling.software.SPDF.model.api.converters.HTMLToPdfRequest; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.model.api.converters.HTMLToPdfRequest; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; public class FileToPdf { diff --git a/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java b/common/src/main/java/stirling/software/common/util/GeneralUtils.java similarity index 99% rename from src/main/java/stirling/software/SPDF/utils/GeneralUtils.java rename to common/src/main/java/stirling/software/common/util/GeneralUtils.java index 9172b5151..3353cdfeb 100644 --- a/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java +++ b/common/src/main/java/stirling/software/common/util/GeneralUtils.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.io.File; import java.io.FileOutputStream; @@ -27,8 +27,7 @@ import io.github.pixee.security.Urls; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.config.InstallationPathConfig; -import stirling.software.SPDF.config.YamlHelper; +import stirling.software.common.configuration.InstallationPathConfig; @Slf4j public class GeneralUtils { diff --git a/src/main/java/stirling/software/SPDF/utils/ImageProcessingUtils.java b/common/src/main/java/stirling/software/common/util/ImageProcessingUtils.java similarity index 99% rename from src/main/java/stirling/software/SPDF/utils/ImageProcessingUtils.java rename to common/src/main/java/stirling/software/common/util/ImageProcessingUtils.java index f6a496021..ae6c0b66f 100644 --- a/src/main/java/stirling/software/SPDF/utils/ImageProcessingUtils.java +++ b/common/src/main/java/stirling/software/common/util/ImageProcessingUtils.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.awt.geom.AffineTransform; import java.awt.image.*; diff --git a/src/main/java/stirling/software/SPDF/utils/PDFToFile.java b/common/src/main/java/stirling/software/common/util/PDFToFile.java similarity index 99% rename from src/main/java/stirling/software/SPDF/utils/PDFToFile.java rename to common/src/main/java/stirling/software/common/util/PDFToFile.java index 268a92172..f763f5414 100644 --- a/src/main/java/stirling/software/SPDF/utils/PDFToFile.java +++ b/common/src/main/java/stirling/software/common/util/PDFToFile.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.io.ByteArrayOutputStream; import java.io.File; @@ -28,7 +28,7 @@ import io.github.pixee.security.Filenames; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; @Slf4j @NoArgsConstructor diff --git a/src/main/java/stirling/software/SPDF/utils/PdfUtils.java b/common/src/main/java/stirling/software/common/util/PdfUtils.java similarity index 99% rename from src/main/java/stirling/software/SPDF/utils/PdfUtils.java rename to common/src/main/java/stirling/software/common/util/PdfUtils.java index 14c5c09d7..bee180f70 100644 --- a/src/main/java/stirling/software/SPDF/utils/PdfUtils.java +++ b/common/src/main/java/stirling/software/common/util/PdfUtils.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.awt.*; import java.awt.image.BufferedImage; @@ -34,8 +34,7 @@ import org.springframework.web.multipart.MultipartFile; import io.github.pixee.security.Filenames; import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.service.CustomPDFDocumentFactory; +import stirling.software.common.service.CustomPDFDocumentFactory; @Slf4j public class PdfUtils { diff --git a/src/main/java/stirling/software/SPDF/utils/ProcessExecutor.java b/common/src/main/java/stirling/software/common/util/ProcessExecutor.java similarity index 99% rename from src/main/java/stirling/software/SPDF/utils/ProcessExecutor.java rename to common/src/main/java/stirling/software/common/util/ProcessExecutor.java index e5b8fbb36..09c5ff675 100644 --- a/src/main/java/stirling/software/SPDF/utils/ProcessExecutor.java +++ b/common/src/main/java/stirling/software/common/util/ProcessExecutor.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.io.BufferedReader; import java.io.File; @@ -17,7 +17,7 @@ import io.github.pixee.security.BoundedLineReader; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties; @Slf4j public class ProcessExecutor { diff --git a/src/main/java/stirling/software/SPDF/utils/PropertyConfigs.java b/common/src/main/java/stirling/software/common/util/PropertyConfigs.java similarity index 96% rename from src/main/java/stirling/software/SPDF/utils/PropertyConfigs.java rename to common/src/main/java/stirling/software/common/util/PropertyConfigs.java index aa3e453d2..fd07a616f 100644 --- a/src/main/java/stirling/software/SPDF/utils/PropertyConfigs.java +++ b/common/src/main/java/stirling/software/common/util/PropertyConfigs.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.util.List; diff --git a/src/main/java/stirling/software/SPDF/utils/validation/Validator.java b/common/src/main/java/stirling/software/common/util/ProviderUtils.java similarity index 52% rename from src/main/java/stirling/software/SPDF/utils/validation/Validator.java rename to common/src/main/java/stirling/software/common/util/ProviderUtils.java index 83b906857..1dd942f88 100644 --- a/src/main/java/stirling/software/SPDF/utils/validation/Validator.java +++ b/common/src/main/java/stirling/software/common/util/ProviderUtils.java @@ -1,10 +1,10 @@ -package stirling.software.SPDF.utils.validation; +package stirling.software.common.util; -import java.util.Collection; +import stirling.software.common.model.oauth2.Provider; +import static stirling.software.common.util.ValidationUtils.isCollectionEmpty; +import static stirling.software.common.util.ValidationUtils.isStringEmpty; -import stirling.software.SPDF.model.provider.Provider; - -public class Validator { +public class ProviderUtils { public static boolean validateProvider(Provider provider) { if (provider == null) { @@ -25,12 +25,4 @@ public class Validator { return true; } - - public static boolean isStringEmpty(String input) { - return input == null || input.isBlank(); - } - - public static boolean isCollectionEmpty(Collection input) { - return input == null || input.isEmpty(); - } } diff --git a/src/main/java/stirling/software/SPDF/utils/RequestUriUtils.java b/common/src/main/java/stirling/software/common/util/RequestUriUtils.java similarity index 98% rename from src/main/java/stirling/software/SPDF/utils/RequestUriUtils.java rename to common/src/main/java/stirling/software/common/util/RequestUriUtils.java index 504fe64e1..4c14901b3 100644 --- a/src/main/java/stirling/software/SPDF/utils/RequestUriUtils.java +++ b/common/src/main/java/stirling/software/common/util/RequestUriUtils.java @@ -1,14 +1,12 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; public class RequestUriUtils { public static boolean isStaticResource(String requestURI) { - return isStaticResource("", requestURI); } public static boolean isStaticResource(String contextPath, String requestURI) { - return requestURI.startsWith(contextPath + "/css/") || requestURI.startsWith(contextPath + "/fonts/") || requestURI.startsWith(contextPath + "/js/") diff --git a/src/main/java/stirling/software/SPDF/utils/UIScaling.java b/common/src/main/java/stirling/software/common/util/UIScaling.java similarity index 97% rename from src/main/java/stirling/software/SPDF/utils/UIScaling.java rename to common/src/main/java/stirling/software/common/util/UIScaling.java index fe1364c9b..06d9b8762 100644 --- a/src/main/java/stirling/software/SPDF/utils/UIScaling.java +++ b/common/src/main/java/stirling/software/common/util/UIScaling.java @@ -1,9 +1,7 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.awt.*; -import javax.swing.*; - public class UIScaling { private static final double BASE_RESOLUTION_WIDTH = 1920.0; private static final double BASE_RESOLUTION_HEIGHT = 1080.0; diff --git a/src/main/java/stirling/software/SPDF/utils/UrlUtils.java b/common/src/main/java/stirling/software/common/util/UrlUtils.java similarity index 96% rename from src/main/java/stirling/software/SPDF/utils/UrlUtils.java rename to common/src/main/java/stirling/software/common/util/UrlUtils.java index d4d0d6619..445ef0a60 100644 --- a/src/main/java/stirling/software/SPDF/utils/UrlUtils.java +++ b/common/src/main/java/stirling/software/common/util/UrlUtils.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.io.IOException; import java.net.ServerSocket; diff --git a/common/src/main/java/stirling/software/common/util/ValidationUtils.java b/common/src/main/java/stirling/software/common/util/ValidationUtils.java new file mode 100644 index 000000000..b7cc48a77 --- /dev/null +++ b/common/src/main/java/stirling/software/common/util/ValidationUtils.java @@ -0,0 +1,14 @@ +package stirling.software.common.util; + +import java.util.Collection; + +public class ValidationUtils { + + public static boolean isStringEmpty(String input) { + return input == null || input.isBlank(); + } + + public static boolean isCollectionEmpty(Collection input) { + return input == null || input.isEmpty(); + } +} diff --git a/src/main/java/stirling/software/SPDF/utils/WebResponseUtils.java b/common/src/main/java/stirling/software/common/util/WebResponseUtils.java similarity index 98% rename from src/main/java/stirling/software/SPDF/utils/WebResponseUtils.java rename to common/src/main/java/stirling/software/common/util/WebResponseUtils.java index d148e65bc..62a0e3246 100644 --- a/src/main/java/stirling/software/SPDF/utils/WebResponseUtils.java +++ b/common/src/main/java/stirling/software/common/util/WebResponseUtils.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/src/main/java/stirling/software/SPDF/config/YamlHelper.java b/common/src/main/java/stirling/software/common/util/YamlHelper.java similarity index 99% rename from src/main/java/stirling/software/SPDF/config/YamlHelper.java rename to common/src/main/java/stirling/software/common/util/YamlHelper.java index 8d1aa2914..4de2bd597 100644 --- a/src/main/java/stirling/software/SPDF/config/YamlHelper.java +++ b/common/src/main/java/stirling/software/common/util/YamlHelper.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.config; +package stirling.software.common.util; import java.io.IOException; import java.io.StringWriter; diff --git a/src/main/java/stirling/software/SPDF/utils/misc/CustomColorReplaceStrategy.java b/common/src/main/java/stirling/software/common/util/misc/CustomColorReplaceStrategy.java similarity index 97% rename from src/main/java/stirling/software/SPDF/utils/misc/CustomColorReplaceStrategy.java rename to common/src/main/java/stirling/software/common/util/misc/CustomColorReplaceStrategy.java index b4869b02e..a5c335337 100644 --- a/src/main/java/stirling/software/SPDF/utils/misc/CustomColorReplaceStrategy.java +++ b/common/src/main/java/stirling/software/common/util/misc/CustomColorReplaceStrategy.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils.misc; +package stirling.software.common.util.misc; import java.awt.*; import java.io.ByteArrayInputStream; @@ -23,9 +23,8 @@ import org.springframework.core.io.InputStreamResource; import org.springframework.web.multipart.MultipartFile; import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.model.api.misc.HighContrastColorCombination; -import stirling.software.SPDF.model.api.misc.ReplaceAndInvert; +import stirling.software.common.model.api.misc.HighContrastColorCombination; +import stirling.software.common.model.api.misc.ReplaceAndInvert; @Slf4j public class CustomColorReplaceStrategy extends ReplaceAndInvertColorStrategy { diff --git a/src/main/java/stirling/software/SPDF/utils/misc/HighContrastColorReplaceDecider.java b/common/src/main/java/stirling/software/common/util/misc/HighContrastColorReplaceDecider.java similarity index 84% rename from src/main/java/stirling/software/SPDF/utils/misc/HighContrastColorReplaceDecider.java rename to common/src/main/java/stirling/software/common/util/misc/HighContrastColorReplaceDecider.java index 70d226b55..ffa5910d9 100644 --- a/src/main/java/stirling/software/SPDF/utils/misc/HighContrastColorReplaceDecider.java +++ b/common/src/main/java/stirling/software/common/util/misc/HighContrastColorReplaceDecider.java @@ -1,7 +1,7 @@ -package stirling.software.SPDF.utils.misc; +package stirling.software.common.util.misc; -import stirling.software.SPDF.model.api.misc.HighContrastColorCombination; -import stirling.software.SPDF.model.api.misc.ReplaceAndInvert; +import stirling.software.common.model.api.misc.HighContrastColorCombination; +import stirling.software.common.model.api.misc.ReplaceAndInvert; public class HighContrastColorReplaceDecider { diff --git a/src/main/java/stirling/software/SPDF/utils/misc/InvertFullColorStrategy.java b/common/src/main/java/stirling/software/common/util/misc/InvertFullColorStrategy.java similarity index 97% rename from src/main/java/stirling/software/SPDF/utils/misc/InvertFullColorStrategy.java rename to common/src/main/java/stirling/software/common/util/misc/InvertFullColorStrategy.java index c75659584..2a41c3006 100644 --- a/src/main/java/stirling/software/SPDF/utils/misc/InvertFullColorStrategy.java +++ b/common/src/main/java/stirling/software/common/util/misc/InvertFullColorStrategy.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils.misc; +package stirling.software.common.util.misc; import java.awt.*; import java.awt.image.BufferedImage; @@ -18,8 +18,7 @@ import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.apache.pdfbox.rendering.PDFRenderer; import org.springframework.core.io.InputStreamResource; import org.springframework.web.multipart.MultipartFile; - -import stirling.software.SPDF.model.api.misc.ReplaceAndInvert; +import stirling.software.common.model.api.misc.ReplaceAndInvert; public class InvertFullColorStrategy extends ReplaceAndInvertColorStrategy { diff --git a/src/main/java/stirling/software/SPDF/utils/misc/PdfTextStripperCustom.java b/common/src/main/java/stirling/software/common/util/misc/PdfTextStripperCustom.java similarity index 96% rename from src/main/java/stirling/software/SPDF/utils/misc/PdfTextStripperCustom.java rename to common/src/main/java/stirling/software/common/util/misc/PdfTextStripperCustom.java index 291acf5e3..5e140ace6 100644 --- a/src/main/java/stirling/software/SPDF/utils/misc/PdfTextStripperCustom.java +++ b/common/src/main/java/stirling/software/common/util/misc/PdfTextStripperCustom.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils.misc; +package stirling.software.common.util.misc; import java.awt.geom.Rectangle2D; import java.io.IOException; diff --git a/src/main/java/stirling/software/SPDF/utils/misc/ReplaceAndInvertColorStrategy.java b/common/src/main/java/stirling/software/common/util/misc/ReplaceAndInvertColorStrategy.java similarity index 79% rename from src/main/java/stirling/software/SPDF/utils/misc/ReplaceAndInvertColorStrategy.java rename to common/src/main/java/stirling/software/common/util/misc/ReplaceAndInvertColorStrategy.java index c64605922..5bb87b343 100644 --- a/src/main/java/stirling/software/SPDF/utils/misc/ReplaceAndInvertColorStrategy.java +++ b/common/src/main/java/stirling/software/common/util/misc/ReplaceAndInvertColorStrategy.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils.misc; +package stirling.software.common.util.misc; import java.io.IOException; @@ -8,8 +8,8 @@ import org.springframework.web.multipart.MultipartFile; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.model.api.misc.ReplaceAndInvert; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.model.api.misc.ReplaceAndInvert; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/utils/propertyeditor/StringToArrayListPropertyEditor.java b/common/src/main/java/stirling/software/common/util/propertyeditor/StringToArrayListPropertyEditor.java similarity index 86% rename from src/main/java/stirling/software/SPDF/utils/propertyeditor/StringToArrayListPropertyEditor.java rename to common/src/main/java/stirling/software/common/util/propertyeditor/StringToArrayListPropertyEditor.java index 7f28ad547..ecc10400b 100644 --- a/src/main/java/stirling/software/SPDF/utils/propertyeditor/StringToArrayListPropertyEditor.java +++ b/common/src/main/java/stirling/software/common/util/propertyeditor/StringToArrayListPropertyEditor.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils.propertyeditor; +package stirling.software.common.util.propertyeditor; import java.beans.PropertyEditorSupport; import java.util.ArrayList; @@ -9,8 +9,7 @@ import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.model.api.security.RedactionArea; +import stirling.software.common.model.api.security.RedactionArea; @Slf4j public class StringToArrayListPropertyEditor extends PropertyEditorSupport { @@ -26,7 +25,8 @@ public class StringToArrayListPropertyEditor extends PropertyEditorSupport { try { objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); TypeReference> typeRef = - new TypeReference>() {}; + new TypeReference<>() { + }; List list = objectMapper.readValue(text, typeRef); setValue(list); } catch (Exception e) { diff --git a/src/main/java/stirling/software/SPDF/utils/propertyeditor/StringToMapPropertyEditor.java b/common/src/main/java/stirling/software/common/util/propertyeditor/StringToMapPropertyEditor.java similarity index 86% rename from src/main/java/stirling/software/SPDF/utils/propertyeditor/StringToMapPropertyEditor.java rename to common/src/main/java/stirling/software/common/util/propertyeditor/StringToMapPropertyEditor.java index 6c3135e8c..ad903e346 100644 --- a/src/main/java/stirling/software/SPDF/utils/propertyeditor/StringToMapPropertyEditor.java +++ b/common/src/main/java/stirling/software/common/util/propertyeditor/StringToMapPropertyEditor.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils.propertyeditor; +package stirling.software.common.util.propertyeditor; import java.beans.PropertyEditorSupport; import java.util.HashMap; @@ -15,7 +15,7 @@ public class StringToMapPropertyEditor extends PropertyEditorSupport { public void setAsText(String text) throws IllegalArgumentException { try { TypeReference> typeRef = - new TypeReference>() {}; + new TypeReference<>() {}; Map map = objectMapper.readValue(text, typeRef); setValue(map); } catch (Exception e) { diff --git a/src/test/java/stirling/software/SPDF/service/CustomPDFDocumentFactoryTest.java b/common/src/test/java/stirling/software/common/service/CustomPDFDocumentFactoryTest.java similarity index 93% rename from src/test/java/stirling/software/SPDF/service/CustomPDFDocumentFactoryTest.java rename to common/src/test/java/stirling/software/common/service/CustomPDFDocumentFactoryTest.java index 7fe84416b..f0b2ae3a4 100644 --- a/src/test/java/stirling/software/SPDF/service/CustomPDFDocumentFactoryTest.java +++ b/common/src/test/java/stirling/software/common/service/CustomPDFDocumentFactoryTest.java @@ -1,7 +1,8 @@ -package stirling.software.SPDF.service; +package stirling.software.common.service; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; +import static stirling.software.common.service.SpyPDFDocumentFactory.*; import java.io.*; import java.nio.file.*; @@ -19,8 +20,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; import org.springframework.mock.web.MockMultipartFile; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.service.SpyPDFDocumentFactory.StrategyType; +import stirling.software.common.model.api.PDFFile; @TestInstance(TestInstance.Lifecycle.PER_CLASS) @TestMethodOrder(MethodOrderer.OrderAnnotation.class) @@ -46,7 +46,7 @@ class CustomPDFDocumentFactoryTest { void testStrategy_FileInput(int sizeMB, StrategyType expected) throws IOException { File file = writeTempFile(inflatePdf(basePdfBytes, sizeMB)); try (PDDocument doc = factory.load(file)) { - assertEquals(expected, factory.lastStrategyUsed); + Assertions.assertEquals(expected, factory.lastStrategyUsed); } } @@ -55,7 +55,7 @@ class CustomPDFDocumentFactoryTest { void testStrategy_ByteArray(int sizeMB, StrategyType expected) throws IOException { byte[] inflated = inflatePdf(basePdfBytes, sizeMB); try (PDDocument doc = factory.load(inflated)) { - assertEquals(expected, factory.lastStrategyUsed); + Assertions.assertEquals(expected, factory.lastStrategyUsed); } } @@ -64,7 +64,7 @@ class CustomPDFDocumentFactoryTest { void testStrategy_InputStream(int sizeMB, StrategyType expected) throws IOException { byte[] inflated = inflatePdf(basePdfBytes, sizeMB); try (PDDocument doc = factory.load(new ByteArrayInputStream(inflated))) { - assertEquals(expected, factory.lastStrategyUsed); + Assertions.assertEquals(expected, factory.lastStrategyUsed); } } @@ -75,7 +75,7 @@ class CustomPDFDocumentFactoryTest { MockMultipartFile multipart = new MockMultipartFile("file", "doc.pdf", "application/pdf", inflated); try (PDDocument doc = factory.load(multipart)) { - assertEquals(expected, factory.lastStrategyUsed); + Assertions.assertEquals(expected, factory.lastStrategyUsed); } } @@ -88,7 +88,7 @@ class CustomPDFDocumentFactoryTest { PDFFile pdfFile = new PDFFile(); pdfFile.setFileInput(multipart); try (PDDocument doc = factory.load(pdfFile)) { - assertEquals(expected, factory.lastStrategyUsed); + Assertions.assertEquals(expected, factory.lastStrategyUsed); } } diff --git a/src/test/java/stirling/software/SPDF/service/SpyPDFDocumentFactory.java b/common/src/test/java/stirling/software/common/service/SpyPDFDocumentFactory.java similarity index 95% rename from src/test/java/stirling/software/SPDF/service/SpyPDFDocumentFactory.java rename to common/src/test/java/stirling/software/common/service/SpyPDFDocumentFactory.java index c7035c17d..823a7e4d8 100644 --- a/src/test/java/stirling/software/SPDF/service/SpyPDFDocumentFactory.java +++ b/common/src/test/java/stirling/software/common/service/SpyPDFDocumentFactory.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.service; +package stirling.software.common.service; import org.apache.pdfbox.io.RandomAccessStreamCache.StreamCacheCreateFunction; diff --git a/src/test/java/stirling/software/SPDF/utils/CheckProgramInstallTest.java b/common/src/test/java/stirling/software/common/util/CheckProgramInstallTest.java similarity index 98% rename from src/test/java/stirling/software/SPDF/utils/CheckProgramInstallTest.java rename to common/src/test/java/stirling/software/common/util/CheckProgramInstallTest.java index bc5ebc63d..22ebeb240 100644 --- a/src/test/java/stirling/software/SPDF/utils/CheckProgramInstallTest.java +++ b/common/src/test/java/stirling/software/common/util/CheckProgramInstallTest.java @@ -1,5 +1,15 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; @@ -10,19 +20,6 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import java.io.IOException; -import java.lang.reflect.Field; -import java.util.Arrays; -import java.util.List; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.MockedStatic; -import org.mockito.Mockito; - -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; - class CheckProgramInstallTest { private MockedStatic mockProcessExecutor; diff --git a/src/test/java/stirling/software/SPDF/utils/CustomHtmlSanitizerTest.java b/common/src/test/java/stirling/software/common/util/CustomHtmlSanitizerTest.java similarity index 99% rename from src/test/java/stirling/software/SPDF/utils/CustomHtmlSanitizerTest.java rename to common/src/test/java/stirling/software/common/util/CustomHtmlSanitizerTest.java index 978970270..65bffe05e 100644 --- a/src/test/java/stirling/software/SPDF/utils/CustomHtmlSanitizerTest.java +++ b/common/src/test/java/stirling/software/common/util/CustomHtmlSanitizerTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/src/test/java/stirling/software/SPDF/utils/ErrorUtilsTest.java b/common/src/test/java/stirling/software/common/util/ErrorUtilsTest.java similarity index 97% rename from src/test/java/stirling/software/SPDF/utils/ErrorUtilsTest.java rename to common/src/test/java/stirling/software/common/util/ErrorUtilsTest.java index 414540dd6..02e4170b1 100644 --- a/src/test/java/stirling/software/SPDF/utils/ErrorUtilsTest.java +++ b/common/src/test/java/stirling/software/common/util/ErrorUtilsTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; diff --git a/src/test/java/stirling/software/SPDF/utils/FileInfoTest.java b/common/src/test/java/stirling/software/common/util/FileInfoTest.java similarity index 92% rename from src/test/java/stirling/software/SPDF/utils/FileInfoTest.java rename to common/src/test/java/stirling/software/common/util/FileInfoTest.java index 6192d1dea..ec991f07e 100644 --- a/src/test/java/stirling/software/SPDF/utils/FileInfoTest.java +++ b/common/src/test/java/stirling/software/common/util/FileInfoTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -7,6 +7,8 @@ import java.time.LocalDateTime; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; +import stirling.software.common.model.FileInfo; + public class FileInfoTest { @ParameterizedTest(name = "{index}: fileSize={0}") diff --git a/src/test/java/stirling/software/SPDF/utils/FileMonitorTest.java b/common/src/test/java/stirling/software/common/util/FileMonitorTest.java similarity index 98% rename from src/test/java/stirling/software/SPDF/utils/FileMonitorTest.java rename to common/src/test/java/stirling/software/common/util/FileMonitorTest.java index b9aba5cde..0a0ff107a 100644 --- a/src/test/java/stirling/software/SPDF/utils/FileMonitorTest.java +++ b/common/src/test/java/stirling/software/common/util/FileMonitorTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -19,8 +19,7 @@ import org.junit.jupiter.api.io.TempDir; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; - -import stirling.software.SPDF.config.RuntimePathConfig; +import stirling.software.common.configuration.RuntimePathConfig; @ExtendWith(MockitoExtension.class) class FileMonitorTest { diff --git a/src/test/java/stirling/software/SPDF/utils/FileToPdfTest.java b/common/src/test/java/stirling/software/common/util/FileToPdfTest.java similarity index 96% rename from src/test/java/stirling/software/SPDF/utils/FileToPdfTest.java rename to common/src/test/java/stirling/software/common/util/FileToPdfTest.java index 5cc3c28dd..a897e887b 100644 --- a/src/test/java/stirling/software/SPDF/utils/FileToPdfTest.java +++ b/common/src/test/java/stirling/software/common/util/FileToPdfTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -8,7 +8,7 @@ import java.io.IOException; import org.junit.jupiter.api.Test; -import stirling.software.SPDF.model.api.converters.HTMLToPdfRequest; +import stirling.software.common.model.api.converters.HTMLToPdfRequest; public class FileToPdfTest { diff --git a/src/test/java/stirling/software/SPDF/utils/GeneralUtilsAdditionalTest.java b/common/src/test/java/stirling/software/common/util/GeneralUtilsAdditionalTest.java similarity index 97% rename from src/test/java/stirling/software/SPDF/utils/GeneralUtilsAdditionalTest.java rename to common/src/test/java/stirling/software/common/util/GeneralUtilsAdditionalTest.java index 4a48cdb0f..3ecc6fac5 100644 --- a/src/test/java/stirling/software/SPDF/utils/GeneralUtilsAdditionalTest.java +++ b/common/src/test/java/stirling/software/common/util/GeneralUtilsAdditionalTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.*; diff --git a/src/test/java/stirling/software/SPDF/utils/GeneralUtilsTest.java b/common/src/test/java/stirling/software/common/util/GeneralUtilsTest.java similarity index 99% rename from src/test/java/stirling/software/SPDF/utils/GeneralUtilsTest.java rename to common/src/test/java/stirling/software/common/util/GeneralUtilsTest.java index 72389130d..a73cd332b 100644 --- a/src/test/java/stirling/software/SPDF/utils/GeneralUtilsTest.java +++ b/common/src/test/java/stirling/software/common/util/GeneralUtilsTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/src/test/java/stirling/software/SPDF/utils/ImageProcessingUtilsTest.java b/common/src/test/java/stirling/software/common/util/ImageProcessingUtilsTest.java similarity index 98% rename from src/test/java/stirling/software/SPDF/utils/ImageProcessingUtilsTest.java rename to common/src/test/java/stirling/software/common/util/ImageProcessingUtilsTest.java index dc4a94d7b..59c187662 100644 --- a/src/test/java/stirling/software/SPDF/utils/ImageProcessingUtilsTest.java +++ b/common/src/test/java/stirling/software/common/util/ImageProcessingUtilsTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; diff --git a/src/test/java/stirling/software/SPDF/utils/PDFToFileTest.java b/common/src/test/java/stirling/software/common/util/PDFToFileTest.java similarity index 99% rename from src/test/java/stirling/software/SPDF/utils/PDFToFileTest.java rename to common/src/test/java/stirling/software/common/util/PDFToFileTest.java index 38b5e9277..39cdbf913 100644 --- a/src/test/java/stirling/software/SPDF/utils/PDFToFileTest.java +++ b/common/src/test/java/stirling/software/common/util/PDFToFileTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -30,7 +30,7 @@ import org.springframework.web.multipart.MultipartFile; import io.github.pixee.security.ZipSecurity; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; /** * Tests for PDFToFile utility class. This includes both invalid content type cases and positive diff --git a/src/test/java/stirling/software/SPDF/utils/PdfUtilsTest.java b/common/src/test/java/stirling/software/common/util/PdfUtilsTest.java similarity index 95% rename from src/test/java/stirling/software/SPDF/utils/PdfUtilsTest.java rename to common/src/test/java/stirling/software/common/util/PdfUtilsTest.java index b8994faee..1b598fc8b 100644 --- a/src/test/java/stirling/software/SPDF/utils/PdfUtilsTest.java +++ b/common/src/test/java/stirling/software/common/util/PdfUtilsTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -23,9 +23,9 @@ import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.junit.jupiter.api.Test; import org.mockito.Mockito; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.service.PdfMetadataService; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.service.PdfMetadataService; public class PdfUtilsTest { diff --git a/src/test/java/stirling/software/SPDF/utils/ProcessExecutorTest.java b/common/src/test/java/stirling/software/common/util/ProcessExecutorTest.java similarity index 98% rename from src/test/java/stirling/software/SPDF/utils/ProcessExecutorTest.java rename to common/src/test/java/stirling/software/common/util/ProcessExecutorTest.java index 83a37865a..d2142d70d 100644 --- a/src/test/java/stirling/software/SPDF/utils/ProcessExecutorTest.java +++ b/common/src/test/java/stirling/software/common/util/ProcessExecutorTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; diff --git a/src/test/java/stirling/software/SPDF/utils/PropertyConfigsTest.java b/common/src/test/java/stirling/software/common/util/PropertyConfigsTest.java similarity index 98% rename from src/test/java/stirling/software/SPDF/utils/PropertyConfigsTest.java rename to common/src/test/java/stirling/software/common/util/PropertyConfigsTest.java index be0605735..6fe9c7202 100644 --- a/src/test/java/stirling/software/SPDF/utils/PropertyConfigsTest.java +++ b/common/src/test/java/stirling/software/common/util/PropertyConfigsTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/src/test/java/stirling/software/SPDF/utils/validation/ValidatorTest.java b/common/src/test/java/stirling/software/common/util/ProviderUtilsTest.java similarity index 66% rename from src/test/java/stirling/software/SPDF/utils/validation/ValidatorTest.java rename to common/src/test/java/stirling/software/common/util/ProviderUtilsTest.java index 1ec8acd91..02143cc84 100644 --- a/src/test/java/stirling/software/SPDF/utils/validation/ValidatorTest.java +++ b/common/src/test/java/stirling/software/common/util/ProviderUtilsTest.java @@ -1,27 +1,22 @@ -package stirling.software.SPDF.utils.validation; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +package stirling.software.common.util; import java.util.List; import java.util.stream.Stream; - +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import org.mockito.junit.jupiter.MockitoExtension; - -import stirling.software.SPDF.model.UsernameAttribute; -import stirling.software.SPDF.model.provider.GitHubProvider; -import stirling.software.SPDF.model.provider.GoogleProvider; -import stirling.software.SPDF.model.provider.Provider; +import stirling.software.common.model.enumeration.UsernameAttribute; +import stirling.software.common.model.oauth2.GitHubProvider; +import stirling.software.common.model.oauth2.GoogleProvider; +import stirling.software.common.model.oauth2.Provider; +import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) -class ValidatorTest { +class ProviderUtilsTest { @Test void testSuccessfulValidation() { @@ -31,13 +26,13 @@ class ValidatorTest { when(provider.getClientSecret()).thenReturn("clientSecret"); when(provider.getScopes()).thenReturn(List.of("read:user")); - assertTrue(Validator.validateProvider(provider)); + Assertions.assertTrue(ProviderUtils.validateProvider(provider)); } @ParameterizedTest @MethodSource("providerParams") void testUnsuccessfulValidation(Provider provider) { - assertFalse(Validator.validateProvider(provider)); + Assertions.assertFalse(ProviderUtils.validateProvider(provider)); } public static Stream providerParams() { diff --git a/common/src/test/java/stirling/software/common/util/RequestUriUtilsTest.java b/common/src/test/java/stirling/software/common/util/RequestUriUtilsTest.java new file mode 100644 index 000000000..21cfea85f --- /dev/null +++ b/common/src/test/java/stirling/software/common/util/RequestUriUtilsTest.java @@ -0,0 +1,311 @@ +package stirling.software.common.util; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +public class RequestUriUtilsTest { + + @Test + void testIsStaticResource() { + // Test static resources without context path + assertTrue( + RequestUriUtils.isStaticResource("/css/styles.css"), "CSS files should be static"); + assertTrue(RequestUriUtils.isStaticResource("/js/script.js"), "JS files should be static"); + assertTrue( + RequestUriUtils.isStaticResource("/images/logo.png"), + "Image files should be static"); + assertTrue( + RequestUriUtils.isStaticResource("/public/index.html"), + "Public files should be static"); + assertTrue( + RequestUriUtils.isStaticResource("/pdfjs/pdf.worker.js"), + "PDF.js files should be static"); + assertTrue( + RequestUriUtils.isStaticResource("/api/v1/info/status"), + "API status should be static"); + assertTrue( + RequestUriUtils.isStaticResource("/some-path/icon.svg"), + "SVG files should be static"); + assertTrue(RequestUriUtils.isStaticResource("/login"), "Login page should be static"); + assertTrue(RequestUriUtils.isStaticResource("/error"), "Error page should be static"); + + // Test non-static resources + assertFalse( + RequestUriUtils.isStaticResource("/api/v1/users"), + "API users should not be static"); + assertFalse( + RequestUriUtils.isStaticResource("/api/v1/orders"), + "API orders should not be static"); + assertFalse(RequestUriUtils.isStaticResource("/"), "Root path should not be static"); + assertFalse( + RequestUriUtils.isStaticResource("/register"), + "Register page should not be static"); + assertFalse( + RequestUriUtils.isStaticResource("/api/v1/products"), + "API products should not be static"); + } + + @Test + void testIsStaticResourceWithContextPath() { + String contextPath = "/myapp"; + + // Test static resources with context path + assertTrue( + RequestUriUtils.isStaticResource(contextPath, contextPath + "/css/styles.css"), + "CSS with context path should be static"); + assertTrue( + RequestUriUtils.isStaticResource(contextPath, contextPath + "/js/script.js"), + "JS with context path should be static"); + assertTrue( + RequestUriUtils.isStaticResource(contextPath, contextPath + "/images/logo.png"), + "Images with context path should be static"); + assertTrue( + RequestUriUtils.isStaticResource(contextPath, contextPath + "/login"), + "Login with context path should be static"); + + // Test non-static resources with context path + assertFalse( + RequestUriUtils.isStaticResource(contextPath, contextPath + "/api/v1/users"), + "API users with context path should not be static"); + assertFalse( + RequestUriUtils.isStaticResource(contextPath, "/"), + "Root path with context path should not be static"); + } + + @ParameterizedTest + @ValueSource( + strings = { + "robots.txt", + "/favicon.ico", + "/icon.svg", + "/image.png", + "/site.webmanifest", + "/app/logo.svg", + "/downloads/document.png", + "/assets/brand.ico", + "/any/path/with/image.svg", + "/deep/nested/folder/icon.png" + }) + void testIsStaticResourceWithFileExtensions(String path) { + assertTrue( + RequestUriUtils.isStaticResource(path), + "Files with specific extensions should be static regardless of path"); + } + + @Test + void testIsTrackableResource() { + // Test non-trackable resources (returns false) + assertFalse( + RequestUriUtils.isTrackableResource("/js/script.js"), + "JS files should not be trackable"); + assertFalse( + RequestUriUtils.isTrackableResource("/v1/api-docs"), + "API docs should not be trackable"); + assertFalse( + RequestUriUtils.isTrackableResource("robots.txt"), + "robots.txt should not be trackable"); + assertFalse( + RequestUriUtils.isTrackableResource("/images/logo.png"), + "Images should not be trackable"); + assertFalse( + RequestUriUtils.isTrackableResource("/styles.css"), + "CSS files should not be trackable"); + assertFalse( + RequestUriUtils.isTrackableResource("/script.js.map"), + "Map files should not be trackable"); + assertFalse( + RequestUriUtils.isTrackableResource("/icon.svg"), + "SVG files should not be trackable"); + assertFalse( + RequestUriUtils.isTrackableResource("/popularity.txt"), + "Popularity file should not be trackable"); + assertFalse( + RequestUriUtils.isTrackableResource("/script.js"), + "JS files should not be trackable"); + assertFalse( + RequestUriUtils.isTrackableResource("/swagger/index.html"), + "Swagger files should not be trackable"); + assertFalse( + RequestUriUtils.isTrackableResource("/api/v1/info/status"), + "API info should not be trackable"); + assertFalse( + RequestUriUtils.isTrackableResource("/site.webmanifest"), + "Webmanifest should not be trackable"); + assertFalse( + RequestUriUtils.isTrackableResource("/fonts/font.woff"), + "Fonts should not be trackable"); + assertFalse( + RequestUriUtils.isTrackableResource("/pdfjs/viewer.js"), + "PDF.js files should not be trackable"); + + // Test trackable resources (returns true) + assertTrue(RequestUriUtils.isTrackableResource("/login"), "Login page should be trackable"); + assertTrue( + RequestUriUtils.isTrackableResource("/register"), + "Register page should be trackable"); + assertTrue( + RequestUriUtils.isTrackableResource("/api/v1/users"), + "API users should be trackable"); + assertTrue(RequestUriUtils.isTrackableResource("/"), "Root path should be trackable"); + assertTrue( + RequestUriUtils.isTrackableResource("/some-other-path"), + "Other paths should be trackable"); + } + + @Test + void testIsTrackableResourceWithContextPath() { + String contextPath = "/myapp"; + + // Test with context path + assertFalse( + RequestUriUtils.isTrackableResource(contextPath, "/js/script.js"), + "JS files should not be trackable with context path"); + assertTrue( + RequestUriUtils.isTrackableResource(contextPath, "/login"), + "Login page should be trackable with context path"); + + // Additional tests with context path + assertFalse( + RequestUriUtils.isTrackableResource(contextPath, "/fonts/custom.woff"), + "Font files should not be trackable with context path"); + assertFalse( + RequestUriUtils.isTrackableResource(contextPath, "/images/header.png"), + "Images should not be trackable with context path"); + assertFalse( + RequestUriUtils.isTrackableResource(contextPath, "/swagger/ui.html"), + "Swagger UI should not be trackable with context path"); + assertTrue( + RequestUriUtils.isTrackableResource(contextPath, "/account/profile"), + "Account page should be trackable with context path"); + assertTrue( + RequestUriUtils.isTrackableResource(contextPath, "/pdf/view"), + "PDF view page should be trackable with context path"); + } + + @ParameterizedTest + @ValueSource( + strings = { + "/js/util.js", + "/v1/api-docs/swagger.json", + "/robots.txt", + "/images/header/logo.png", + "/styles/theme.css", + "/build/app.js.map", + "/assets/icon.svg", + "/data/popularity.txt", + "/bundle.js", + "/api/swagger-ui.html", + "/api/v1/info/health", + "/site.webmanifest", + "/fonts/roboto.woff", + "/pdfjs/viewer.js" + }) + void testNonTrackableResources(String path) { + assertFalse( + RequestUriUtils.isTrackableResource(path), + "Resources matching patterns should not be trackable: " + path); + } + + @ParameterizedTest + @ValueSource( + strings = { + "/", + "/home", + "/login", + "/register", + "/pdf/merge", + "/pdf/split", + "/api/v1/users/1", + "/api/v1/documents/process", + "/settings", + "/account/profile", + "/dashboard", + "/help", + "/about" + }) + void testTrackableResources(String path) { + assertTrue( + RequestUriUtils.isTrackableResource(path), + "App routes should be trackable: " + path); + } + + @Test + void testEdgeCases() { + // Test with empty strings + assertFalse(RequestUriUtils.isStaticResource("", ""), "Empty path should not be static"); + assertTrue(RequestUriUtils.isTrackableResource("", ""), "Empty path should be trackable"); + + // Test with null-like behavior (would actually throw NPE in real code) + // These are not actual null tests but shows handling of odd cases + assertFalse(RequestUriUtils.isStaticResource("null"), "String 'null' should not be static"); + + // Test String "null" as a path + boolean isTrackable = RequestUriUtils.isTrackableResource("null"); + assertTrue(isTrackable, "String 'null' should be trackable"); + + // Mixed case extensions test - note that Java's endsWith() is case-sensitive + // We'll check actual behavior and document it rather than asserting + + // Always test the lowercase versions which should definitely work + assertTrue( + RequestUriUtils.isStaticResource("/logo.png"), "PNG (lowercase) should be static"); + assertTrue( + RequestUriUtils.isStaticResource("/icon.svg"), "SVG (lowercase) should be static"); + + // Path with query parameters + assertFalse( + RequestUriUtils.isStaticResource("/api/users?page=1"), + "Path with query params should respect base path"); + assertTrue( + RequestUriUtils.isStaticResource("/images/logo.png?v=123"), + "Static resource with query params should still be static"); + + // Paths with fragments + assertTrue( + RequestUriUtils.isStaticResource("/css/styles.css#section1"), + "CSS with fragment should be static"); + + // Multiple dots in filename + assertTrue( + RequestUriUtils.isStaticResource("/js/jquery.min.js"), + "JS with multiple dots should be static"); + + // Special characters in path + assertTrue( + RequestUriUtils.isStaticResource("/images/user's-photo.png"), + "Path with special chars should be handled correctly"); + } + + @Test + void testComplexPaths() { + // Test complex static resource paths + assertTrue( + RequestUriUtils.isStaticResource("/css/theme/dark/styles.css"), + "Nested CSS should be static"); + assertTrue( + RequestUriUtils.isStaticResource("/fonts/open-sans/bold/font.woff"), + "Nested font should be static"); + assertTrue( + RequestUriUtils.isStaticResource("/js/vendor/jquery/3.5.1/jquery.min.js"), + "Versioned JS should be static"); + + // Test complex paths with context + String contextPath = "/app"; + assertTrue( + RequestUriUtils.isStaticResource( + contextPath, contextPath + "/css/theme/dark/styles.css"), + "Nested CSS with context should be static"); + + // Test boundary cases for isTrackableResource + assertFalse( + RequestUriUtils.isTrackableResource("/js-framework/components"), + "Path starting with js- should not be treated as JS resource"); + assertFalse( + RequestUriUtils.isTrackableResource("/fonts-selection"), + "Path starting with fonts- should not be treated as font resource"); + } +} diff --git a/src/test/java/stirling/software/SPDF/utils/UIScalingTest.java b/common/src/test/java/stirling/software/common/util/UIScalingTest.java similarity index 99% rename from src/test/java/stirling/software/SPDF/utils/UIScalingTest.java rename to common/src/test/java/stirling/software/common/util/UIScalingTest.java index e4804b724..21ce6f2d8 100644 --- a/src/test/java/stirling/software/SPDF/utils/UIScalingTest.java +++ b/common/src/test/java/stirling/software/common/util/UIScalingTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; diff --git a/src/test/java/stirling/software/SPDF/utils/UrlUtilsTest.java b/common/src/test/java/stirling/software/common/util/UrlUtilsTest.java similarity index 99% rename from src/test/java/stirling/software/SPDF/utils/UrlUtilsTest.java rename to common/src/test/java/stirling/software/common/util/UrlUtilsTest.java index e69654ffc..ee63a4106 100644 --- a/src/test/java/stirling/software/SPDF/utils/UrlUtilsTest.java +++ b/common/src/test/java/stirling/software/common/util/UrlUtilsTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/src/test/java/stirling/software/SPDF/utils/WebResponseUtilsTest.java b/common/src/test/java/stirling/software/common/util/WebResponseUtilsTest.java similarity index 99% rename from src/test/java/stirling/software/SPDF/utils/WebResponseUtilsTest.java rename to common/src/test/java/stirling/software/common/util/WebResponseUtilsTest.java index 9175e7a1b..f5ce5a6b1 100644 --- a/src/test/java/stirling/software/SPDF/utils/WebResponseUtilsTest.java +++ b/common/src/test/java/stirling/software/common/util/WebResponseUtilsTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; diff --git a/src/test/java/stirling/software/SPDF/utils/misc/CustomColorReplaceStrategyTest.java b/common/src/test/java/stirling/software/common/util/misc/CustomColorReplaceStrategyTest.java similarity index 95% rename from src/test/java/stirling/software/SPDF/utils/misc/CustomColorReplaceStrategyTest.java rename to common/src/test/java/stirling/software/common/util/misc/CustomColorReplaceStrategyTest.java index 15961ae53..4ea57e92f 100644 --- a/src/test/java/stirling/software/SPDF/utils/misc/CustomColorReplaceStrategyTest.java +++ b/common/src/test/java/stirling/software/common/util/misc/CustomColorReplaceStrategyTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils.misc; +package stirling.software.common.util.misc; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -11,8 +11,8 @@ import org.junit.jupiter.api.Test; import org.springframework.mock.web.MockMultipartFile; import org.springframework.web.multipart.MultipartFile; -import stirling.software.SPDF.model.api.misc.HighContrastColorCombination; -import stirling.software.SPDF.model.api.misc.ReplaceAndInvert; +import stirling.software.common.model.api.misc.HighContrastColorCombination; +import stirling.software.common.model.api.misc.ReplaceAndInvert; class CustomColorReplaceStrategyTest { diff --git a/src/test/java/stirling/software/SPDF/utils/misc/HighContrastColorReplaceDeciderTest.java b/common/src/test/java/stirling/software/common/util/misc/HighContrastColorReplaceDeciderTest.java similarity index 95% rename from src/test/java/stirling/software/SPDF/utils/misc/HighContrastColorReplaceDeciderTest.java rename to common/src/test/java/stirling/software/common/util/misc/HighContrastColorReplaceDeciderTest.java index eff5231cc..7b01783d1 100644 --- a/src/test/java/stirling/software/SPDF/utils/misc/HighContrastColorReplaceDeciderTest.java +++ b/common/src/test/java/stirling/software/common/util/misc/HighContrastColorReplaceDeciderTest.java @@ -1,12 +1,10 @@ -package stirling.software.SPDF.utils.misc; - -import static org.junit.jupiter.api.Assertions.assertArrayEquals; -import static org.junit.jupiter.api.Assertions.assertNull; +package stirling.software.common.util.misc; import org.junit.jupiter.api.Test; - -import stirling.software.SPDF.model.api.misc.HighContrastColorCombination; -import stirling.software.SPDF.model.api.misc.ReplaceAndInvert; +import stirling.software.common.model.api.misc.HighContrastColorCombination; +import stirling.software.common.model.api.misc.ReplaceAndInvert; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertNull; class HighContrastColorReplaceDeciderTest { diff --git a/src/test/java/stirling/software/SPDF/utils/misc/InvertFullColorStrategyTest.java b/common/src/test/java/stirling/software/common/util/misc/InvertFullColorStrategyTest.java similarity index 98% rename from src/test/java/stirling/software/SPDF/utils/misc/InvertFullColorStrategyTest.java rename to common/src/test/java/stirling/software/common/util/misc/InvertFullColorStrategyTest.java index b222e0a53..d6a4fad94 100644 --- a/src/test/java/stirling/software/SPDF/utils/misc/InvertFullColorStrategyTest.java +++ b/common/src/test/java/stirling/software/common/util/misc/InvertFullColorStrategyTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils.misc; +package stirling.software.common.util.misc; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -26,8 +26,7 @@ import org.junit.jupiter.api.Test; import org.springframework.core.io.InputStreamResource; import org.springframework.mock.web.MockMultipartFile; import org.springframework.web.multipart.MultipartFile; - -import stirling.software.SPDF.model.api.misc.ReplaceAndInvert; +import stirling.software.common.model.api.misc.ReplaceAndInvert; class InvertFullColorStrategyTest { diff --git a/src/test/java/stirling/software/SPDF/utils/misc/PdfTextStripperCustomTest.java b/common/src/test/java/stirling/software/common/util/misc/PdfTextStripperCustomTest.java similarity index 97% rename from src/test/java/stirling/software/SPDF/utils/misc/PdfTextStripperCustomTest.java rename to common/src/test/java/stirling/software/common/util/misc/PdfTextStripperCustomTest.java index c25683aff..35898718e 100644 --- a/src/test/java/stirling/software/SPDF/utils/misc/PdfTextStripperCustomTest.java +++ b/common/src/test/java/stirling/software/common/util/misc/PdfTextStripperCustomTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils.misc; +package stirling.software.common.util.misc; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; diff --git a/src/test/java/stirling/software/SPDF/utils/misc/ReplaceAndInvertColorStrategyTest.java b/common/src/test/java/stirling/software/common/util/misc/ReplaceAndInvertColorStrategyTest.java similarity index 96% rename from src/test/java/stirling/software/SPDF/utils/misc/ReplaceAndInvertColorStrategyTest.java rename to common/src/test/java/stirling/software/common/util/misc/ReplaceAndInvertColorStrategyTest.java index 0aff8d4c3..f5520146e 100644 --- a/src/test/java/stirling/software/SPDF/utils/misc/ReplaceAndInvertColorStrategyTest.java +++ b/common/src/test/java/stirling/software/common/util/misc/ReplaceAndInvertColorStrategyTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils.misc; +package stirling.software.common.util.misc; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -9,8 +9,7 @@ import org.junit.jupiter.api.Test; import org.springframework.core.io.InputStreamResource; import org.springframework.mock.web.MockMultipartFile; import org.springframework.web.multipart.MultipartFile; - -import stirling.software.SPDF.model.api.misc.ReplaceAndInvert; +import stirling.software.common.model.api.misc.ReplaceAndInvert; class ReplaceAndInvertColorStrategyTest { diff --git a/src/test/java/stirling/software/SPDF/utils/propertyeditor/StringToArrayListPropertyEditorTest.java b/common/src/test/java/stirling/software/common/util/propertyeditor/StringToArrayListPropertyEditorTest.java similarity index 97% rename from src/test/java/stirling/software/SPDF/utils/propertyeditor/StringToArrayListPropertyEditorTest.java rename to common/src/test/java/stirling/software/common/util/propertyeditor/StringToArrayListPropertyEditorTest.java index 29f7ca923..6cdfeae62 100644 --- a/src/test/java/stirling/software/SPDF/utils/propertyeditor/StringToArrayListPropertyEditorTest.java +++ b/common/src/test/java/stirling/software/common/util/propertyeditor/StringToArrayListPropertyEditorTest.java @@ -1,17 +1,14 @@ -package stirling.software.SPDF.utils.propertyeditor; +package stirling.software.common.util.propertyeditor; +import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import stirling.software.common.model.api.security.RedactionArea; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; -import java.util.List; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import stirling.software.SPDF.model.api.security.RedactionArea; - class StringToArrayListPropertyEditorTest { private StringToArrayListPropertyEditor editor; diff --git a/src/test/java/stirling/software/SPDF/utils/propertyeditor/StringToMapPropertyEditorTest.java b/common/src/test/java/stirling/software/common/util/propertyeditor/StringToMapPropertyEditorTest.java similarity index 98% rename from src/test/java/stirling/software/SPDF/utils/propertyeditor/StringToMapPropertyEditorTest.java rename to common/src/test/java/stirling/software/common/util/propertyeditor/StringToMapPropertyEditorTest.java index b7b65b480..cfee8709c 100644 --- a/src/test/java/stirling/software/SPDF/utils/propertyeditor/StringToMapPropertyEditorTest.java +++ b/common/src/test/java/stirling/software/common/util/propertyeditor/StringToMapPropertyEditorTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils.propertyeditor; +package stirling.software.common.util.propertyeditor; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; diff --git a/src/test/resources/example.pdf b/common/src/test/resources/example.pdf similarity index 100% rename from src/test/resources/example.pdf rename to common/src/test/resources/example.pdf diff --git a/settings.gradle b/settings.gradle index 49d1c98ad..0dbeab6e7 100644 --- a/settings.gradle +++ b/settings.gradle @@ -3,3 +3,5 @@ plugins { id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0' } rootProject.name = 'Stirling-PDF' + +include 'common' diff --git a/src/main/java/stirling/software/SPDF/EE/EEAppConfig.java b/src/main/java/stirling/software/SPDF/EE/EEAppConfig.java index 3803ebea4..17289587a 100644 --- a/src/main/java/stirling/software/SPDF/EE/EEAppConfig.java +++ b/src/main/java/stirling/software/SPDF/EE/EEAppConfig.java @@ -8,10 +8,10 @@ import org.springframework.core.annotation.Order; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.EE.KeygenLicenseVerifier.License; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.model.ApplicationProperties.EnterpriseEdition; -import stirling.software.SPDF.model.ApplicationProperties.Premium; -import stirling.software.SPDF.model.ApplicationProperties.Premium.ProFeatures.GoogleDrive; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties.EnterpriseEdition; +import stirling.software.common.model.ApplicationProperties.Premium; +import stirling.software.common.model.ApplicationProperties.Premium.ProFeatures.GoogleDrive; @Configuration @Order(Ordered.HIGHEST_PRECEDENCE) diff --git a/src/main/java/stirling/software/SPDF/EE/KeygenLicenseVerifier.java b/src/main/java/stirling/software/SPDF/EE/KeygenLicenseVerifier.java index 092665dc3..c760a83c9 100644 --- a/src/main/java/stirling/software/SPDF/EE/KeygenLicenseVerifier.java +++ b/src/main/java/stirling/software/SPDF/EE/KeygenLicenseVerifier.java @@ -19,8 +19,8 @@ import com.posthog.java.shaded.org.json.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.utils.GeneralUtils; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.util.GeneralUtils; @Service @Slf4j diff --git a/src/main/java/stirling/software/SPDF/EE/LicenseKeyChecker.java b/src/main/java/stirling/software/SPDF/EE/LicenseKeyChecker.java index 8e5633f41..c1a6f199c 100644 --- a/src/main/java/stirling/software/SPDF/EE/LicenseKeyChecker.java +++ b/src/main/java/stirling/software/SPDF/EE/LicenseKeyChecker.java @@ -11,8 +11,8 @@ import org.springframework.stereotype.Component; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.EE.KeygenLicenseVerifier.License; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.utils.GeneralUtils; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.util.GeneralUtils; @Component @Slf4j diff --git a/src/main/java/stirling/software/SPDF/Factories/ReplaceAndInvertColorFactory.java b/src/main/java/stirling/software/SPDF/Factories/ReplaceAndInvertColorFactory.java index 6aeb4b2d8..49be7fd42 100644 --- a/src/main/java/stirling/software/SPDF/Factories/ReplaceAndInvertColorFactory.java +++ b/src/main/java/stirling/software/SPDF/Factories/ReplaceAndInvertColorFactory.java @@ -3,11 +3,11 @@ package stirling.software.SPDF.Factories; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; -import stirling.software.SPDF.model.api.misc.HighContrastColorCombination; -import stirling.software.SPDF.model.api.misc.ReplaceAndInvert; -import stirling.software.SPDF.utils.misc.CustomColorReplaceStrategy; -import stirling.software.SPDF.utils.misc.InvertFullColorStrategy; -import stirling.software.SPDF.utils.misc.ReplaceAndInvertColorStrategy; +import stirling.software.common.model.api.misc.HighContrastColorCombination; +import stirling.software.common.model.api.misc.ReplaceAndInvert; +import stirling.software.common.util.misc.CustomColorReplaceStrategy; +import stirling.software.common.util.misc.InvertFullColorStrategy; +import stirling.software.common.util.misc.ReplaceAndInvertColorStrategy; @Component public class ReplaceAndInvertColorFactory { diff --git a/src/main/java/stirling/software/SPDF/SPDFApplication.java b/src/main/java/stirling/software/SPDF/SPDFApplication.java index 3cf89a657..b3f6dd078 100644 --- a/src/main/java/stirling/software/SPDF/SPDFApplication.java +++ b/src/main/java/stirling/software/SPDF/SPDFApplication.java @@ -14,6 +14,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; import org.springframework.core.env.Environment; import org.springframework.scheduling.annotation.EnableScheduling; @@ -25,14 +27,19 @@ import jakarta.annotation.PreDestroy; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.UI.WebBrowser; -import stirling.software.SPDF.config.ConfigInitializer; -import stirling.software.SPDF.config.InstallationPathConfig; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.utils.UrlUtils; +import stirling.software.common.configuration.ConfigInitializer; +import stirling.software.common.configuration.InstallationPathConfig; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.util.UrlUtils; @Slf4j @EnableScheduling -@SpringBootApplication +@SpringBootApplication( + scanBasePackages = {"stirling.software.common", "stirling.software.SPDF"}, + exclude = { + DataSourceAutoConfiguration.class, + DataSourceTransactionManagerAutoConfiguration.class + }) public class SPDFApplication { private static String serverPortStatic; diff --git a/src/main/java/stirling/software/SPDF/UI/impl/DesktopBrowser.java b/src/main/java/stirling/software/SPDF/UI/impl/DesktopBrowser.java index 2f6593734..959e7f354 100644 --- a/src/main/java/stirling/software/SPDF/UI/impl/DesktopBrowser.java +++ b/src/main/java/stirling/software/SPDF/UI/impl/DesktopBrowser.java @@ -43,8 +43,8 @@ import me.friwi.jcefmaven.MavenCefAppHandlerAdapter; import me.friwi.jcefmaven.impl.progress.ConsoleProgressHandler; import stirling.software.SPDF.UI.WebBrowser; -import stirling.software.SPDF.config.InstallationPathConfig; -import stirling.software.SPDF.utils.UIScaling; +import stirling.software.common.configuration.InstallationPathConfig; +import stirling.software.common.util.UIScaling; @Component @Slf4j diff --git a/src/main/java/stirling/software/SPDF/UI/impl/LoadingWindow.java b/src/main/java/stirling/software/SPDF/UI/impl/LoadingWindow.java index 93118924b..5c7381fa4 100644 --- a/src/main/java/stirling/software/SPDF/UI/impl/LoadingWindow.java +++ b/src/main/java/stirling/software/SPDF/UI/impl/LoadingWindow.java @@ -15,7 +15,7 @@ import io.github.pixee.security.BoundedLineReader; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.utils.UIScaling; +import stirling.software.common.util.UIScaling; @Slf4j public class LoadingWindow extends JDialog { diff --git a/src/main/java/stirling/software/SPDF/config/AppUpdateService.java b/src/main/java/stirling/software/SPDF/config/AppUpdateService.java index a8afc16e7..f89c9aed3 100644 --- a/src/main/java/stirling/software/SPDF/config/AppUpdateService.java +++ b/src/main/java/stirling/software/SPDF/config/AppUpdateService.java @@ -6,7 +6,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; import stirling.software.SPDF.config.interfaces.ShowAdminInterface; -import stirling.software.SPDF.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties; @Configuration class AppUpdateService { diff --git a/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java b/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java index 0ddd68958..c9872992a 100644 --- a/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java +++ b/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java @@ -11,7 +11,7 @@ import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties; @Service @Slf4j diff --git a/src/main/java/stirling/software/SPDF/config/ExternalAppDepConfig.java b/src/main/java/stirling/software/SPDF/config/ExternalAppDepConfig.java index 6ff5c271c..7dd6d2b3b 100644 --- a/src/main/java/stirling/software/SPDF/config/ExternalAppDepConfig.java +++ b/src/main/java/stirling/software/SPDF/config/ExternalAppDepConfig.java @@ -12,6 +12,8 @@ import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; +import stirling.software.common.configuration.RuntimePathConfig; + @Configuration @Slf4j public class ExternalAppDepConfig { diff --git a/src/main/java/stirling/software/SPDF/config/InitialSetup.java b/src/main/java/stirling/software/SPDF/config/InitialSetup.java index 0adc3d133..d61e2ca6c 100644 --- a/src/main/java/stirling/software/SPDF/config/InitialSetup.java +++ b/src/main/java/stirling/software/SPDF/config/InitialSetup.java @@ -17,8 +17,8 @@ import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.utils.GeneralUtils; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.util.GeneralUtils; @Component @Slf4j diff --git a/src/main/java/stirling/software/SPDF/config/LocaleConfiguration.java b/src/main/java/stirling/software/SPDF/config/LocaleConfiguration.java index ab37c3c5e..97fbb4d21 100644 --- a/src/main/java/stirling/software/SPDF/config/LocaleConfiguration.java +++ b/src/main/java/stirling/software/SPDF/config/LocaleConfiguration.java @@ -12,7 +12,7 @@ import org.springframework.web.servlet.i18n.SessionLocaleResolver; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties; @Configuration @RequiredArgsConstructor diff --git a/src/main/java/stirling/software/SPDF/config/LogbackPropertyLoader.java b/src/main/java/stirling/software/SPDF/config/LogbackPropertyLoader.java index 99de07acb..f5839637d 100644 --- a/src/main/java/stirling/software/SPDF/config/LogbackPropertyLoader.java +++ b/src/main/java/stirling/software/SPDF/config/LogbackPropertyLoader.java @@ -1,5 +1,7 @@ package stirling.software.SPDF.config; +import stirling.software.common.configuration.InstallationPathConfig; + import ch.qos.logback.core.PropertyDefinerBase; public class LogbackPropertyLoader extends PropertyDefinerBase { diff --git a/src/main/java/stirling/software/SPDF/config/MetricsFilter.java b/src/main/java/stirling/software/SPDF/config/MetricsFilter.java index 586374cbe..7813222e2 100644 --- a/src/main/java/stirling/software/SPDF/config/MetricsFilter.java +++ b/src/main/java/stirling/software/SPDF/config/MetricsFilter.java @@ -16,7 +16,7 @@ import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.utils.RequestUriUtils; +import stirling.software.common.util.RequestUriUtils; @Component @RequiredArgsConstructor diff --git a/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java b/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java index d4ff7d167..78d2a3d2b 100644 --- a/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java +++ b/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java @@ -13,7 +13,7 @@ import io.swagger.v3.oas.models.security.SecurityScheme; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties; @Configuration @RequiredArgsConstructor diff --git a/src/main/java/stirling/software/SPDF/config/WebMvcConfig.java b/src/main/java/stirling/software/SPDF/config/WebMvcConfig.java index 63957fd0f..c3e204b3c 100644 --- a/src/main/java/stirling/software/SPDF/config/WebMvcConfig.java +++ b/src/main/java/stirling/software/SPDF/config/WebMvcConfig.java @@ -7,6 +7,8 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import lombok.RequiredArgsConstructor; +import stirling.software.common.configuration.InstallationPathConfig; + @Configuration @RequiredArgsConstructor public class WebMvcConfig implements WebMvcConfigurer { diff --git a/src/main/java/stirling/software/SPDF/config/interfaces/DatabaseInterface.java b/src/main/java/stirling/software/SPDF/config/interfaces/DatabaseInterface.java index 34b457e89..ae802fdc5 100644 --- a/src/main/java/stirling/software/SPDF/config/interfaces/DatabaseInterface.java +++ b/src/main/java/stirling/software/SPDF/config/interfaces/DatabaseInterface.java @@ -3,8 +3,8 @@ package stirling.software.SPDF.config.interfaces; import java.sql.SQLException; import java.util.List; -import stirling.software.SPDF.model.exception.UnsupportedProviderException; -import stirling.software.SPDF.utils.FileInfo; +import stirling.software.common.model.FileInfo; +import stirling.software.common.model.exception.UnsupportedProviderException; public interface DatabaseInterface { void exportDatabase() throws SQLException, UnsupportedProviderException; diff --git a/src/main/java/stirling/software/SPDF/config/security/AppUpdateAuthService.java b/src/main/java/stirling/software/SPDF/config/security/AppUpdateAuthService.java index 23ac9d761..7139fc686 100644 --- a/src/main/java/stirling/software/SPDF/config/security/AppUpdateAuthService.java +++ b/src/main/java/stirling/software/SPDF/config/security/AppUpdateAuthService.java @@ -9,9 +9,9 @@ import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.config.interfaces.ShowAdminInterface; -import stirling.software.SPDF.model.ApplicationProperties; import stirling.software.SPDF.model.User; import stirling.software.SPDF.repository.UserRepository; +import stirling.software.common.model.ApplicationProperties; @Service @RequiredArgsConstructor diff --git a/src/main/java/stirling/software/SPDF/config/security/CustomAuthenticationSuccessHandler.java b/src/main/java/stirling/software/SPDF/config/security/CustomAuthenticationSuccessHandler.java index 9784a99cd..0f4fbecb8 100644 --- a/src/main/java/stirling/software/SPDF/config/security/CustomAuthenticationSuccessHandler.java +++ b/src/main/java/stirling/software/SPDF/config/security/CustomAuthenticationSuccessHandler.java @@ -13,7 +13,7 @@ import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.utils.RequestUriUtils; +import stirling.software.common.util.RequestUriUtils; @Slf4j public class CustomAuthenticationSuccessHandler diff --git a/src/main/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandler.java b/src/main/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandler.java index d59ba5d16..2f7fb25de 100644 --- a/src/main/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandler.java +++ b/src/main/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandler.java @@ -25,11 +25,11 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.SPDFApplication; import stirling.software.SPDF.config.security.saml2.CertificateUtils; import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticatedPrincipal; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2; -import stirling.software.SPDF.model.ApplicationProperties.Security.SAML2; -import stirling.software.SPDF.model.provider.KeycloakProvider; -import stirling.software.SPDF.utils.UrlUtils; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties.Security.OAUTH2; +import stirling.software.common.model.ApplicationProperties.Security.SAML2; +import stirling.software.common.model.oauth2.KeycloakProvider; +import stirling.software.common.util.UrlUtils; @Slf4j @RequiredArgsConstructor diff --git a/src/main/java/stirling/software/SPDF/config/security/FirstLoginFilter.java b/src/main/java/stirling/software/SPDF/config/security/FirstLoginFilter.java index a11eba7f0..edada16dd 100644 --- a/src/main/java/stirling/software/SPDF/config/security/FirstLoginFilter.java +++ b/src/main/java/stirling/software/SPDF/config/security/FirstLoginFilter.java @@ -20,7 +20,7 @@ import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.User; -import stirling.software.SPDF.utils.RequestUriUtils; +import stirling.software.common.util.RequestUriUtils; @Slf4j @Component diff --git a/src/main/java/stirling/software/SPDF/config/security/IPRateLimitingFilter.java b/src/main/java/stirling/software/SPDF/config/security/IPRateLimitingFilter.java index 25f27d658..5d2c67350 100644 --- a/src/main/java/stirling/software/SPDF/config/security/IPRateLimitingFilter.java +++ b/src/main/java/stirling/software/SPDF/config/security/IPRateLimitingFilter.java @@ -9,7 +9,7 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.utils.RequestUriUtils; +import stirling.software.common.util.RequestUriUtils; @RequiredArgsConstructor public class IPRateLimitingFilter implements Filter { diff --git a/src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java b/src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java index 9339405da..3b1a8d5fb 100644 --- a/src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java +++ b/src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java @@ -11,9 +11,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.config.interfaces.DatabaseInterface; -import stirling.software.SPDF.model.ApplicationProperties; import stirling.software.SPDF.model.Role; -import stirling.software.SPDF.model.exception.UnsupportedProviderException; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.exception.UnsupportedProviderException; @Slf4j @Component diff --git a/src/main/java/stirling/software/SPDF/config/security/LoginAttemptService.java b/src/main/java/stirling/software/SPDF/config/security/LoginAttemptService.java index d65557822..9beba4760 100644 --- a/src/main/java/stirling/software/SPDF/config/security/LoginAttemptService.java +++ b/src/main/java/stirling/software/SPDF/config/security/LoginAttemptService.java @@ -10,8 +10,8 @@ import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.ApplicationProperties; import stirling.software.SPDF.model.AttemptCounter; +import stirling.software.common.model.ApplicationProperties; @Service @Slf4j diff --git a/src/main/java/stirling/software/SPDF/config/security/SecurityConfiguration.java b/src/main/java/stirling/software/SPDF/config/security/SecurityConfiguration.java index a4c10d1ae..db2fc6c8d 100644 --- a/src/main/java/stirling/software/SPDF/config/security/SecurityConfiguration.java +++ b/src/main/java/stirling/software/SPDF/config/security/SecurityConfiguration.java @@ -37,10 +37,10 @@ import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticationFai import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticationSuccessHandler; import stirling.software.SPDF.config.security.saml2.CustomSaml2ResponseAuthenticationConverter; import stirling.software.SPDF.config.security.session.SessionPersistentRegistry; -import stirling.software.SPDF.model.ApplicationProperties; import stirling.software.SPDF.model.User; import stirling.software.SPDF.repository.JPATokenRepositoryImpl; import stirling.software.SPDF.repository.PersistentLoginRepository; +import stirling.software.common.model.ApplicationProperties; @Configuration @EnableWebSecurity diff --git a/src/main/java/stirling/software/SPDF/config/security/UserAuthenticationFilter.java b/src/main/java/stirling/software/SPDF/config/security/UserAuthenticationFilter.java index b0684d750..70e65e23b 100644 --- a/src/main/java/stirling/software/SPDF/config/security/UserAuthenticationFilter.java +++ b/src/main/java/stirling/software/SPDF/config/security/UserAuthenticationFilter.java @@ -27,27 +27,26 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticatedPrincipal; import stirling.software.SPDF.config.security.session.SessionPersistentRegistry; import stirling.software.SPDF.model.ApiKeyAuthenticationToken; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.model.ApplicationProperties.Security; -import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2; -import stirling.software.SPDF.model.ApplicationProperties.Security.SAML2; import stirling.software.SPDF.model.User; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties.Security.OAUTH2; +import stirling.software.common.model.ApplicationProperties.Security.SAML2; @Slf4j @Component public class UserAuthenticationFilter extends OncePerRequestFilter { - private final ApplicationProperties applicationProperties; + private final ApplicationProperties.Security securityProp; private final UserService userService; private final SessionPersistentRegistry sessionPersistentRegistry; private final boolean loginEnabledValue; public UserAuthenticationFilter( - @Lazy ApplicationProperties applicationProperties, + @Lazy ApplicationProperties.Security securityProp, @Lazy UserService userService, SessionPersistentRegistry sessionPersistentRegistry, @Qualifier("loginEnabled") boolean loginEnabledValue) { - this.applicationProperties = applicationProperties; + this.securityProp = securityProp; this.userService = userService; this.sessionPersistentRegistry = sessionPersistentRegistry; this.loginEnabledValue = loginEnabledValue; @@ -134,7 +133,6 @@ public class UserAuthenticationFilter extends OncePerRequestFilter { // Check if the authenticated user is disabled and invalidate their session if so if (authentication != null && authentication.isAuthenticated()) { - Security securityProp = applicationProperties.getSecurity(); LoginMethod loginMethod = LoginMethod.UNKNOWN; boolean blockRegistration = false; diff --git a/src/main/java/stirling/software/SPDF/config/security/UserService.java b/src/main/java/stirling/software/SPDF/config/security/UserService.java index d90539171..71aad721d 100644 --- a/src/main/java/stirling/software/SPDF/config/security/UserService.java +++ b/src/main/java/stirling/software/SPDF/config/security/UserService.java @@ -2,7 +2,13 @@ package stirling.software.SPDF.config.security; import java.io.IOException; import java.sql.SQLException; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; import org.springframework.context.MessageSource; import org.springframework.context.i18n.LocaleContextHolder; @@ -25,11 +31,15 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.config.interfaces.DatabaseInterface; import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticatedPrincipal; import stirling.software.SPDF.config.security.session.SessionPersistentRegistry; -import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface; -import stirling.software.SPDF.model.*; -import stirling.software.SPDF.model.exception.UnsupportedProviderException; +import stirling.software.SPDF.model.AuthenticationType; +import stirling.software.SPDF.model.Authority; +import stirling.software.SPDF.model.Role; +import stirling.software.SPDF.model.User; import stirling.software.SPDF.repository.AuthorityRepository; import stirling.software.SPDF.repository.UserRepository; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.exception.UnsupportedProviderException; +import stirling.software.common.service.UserServiceInterface; @Service @Slf4j @@ -48,7 +58,7 @@ public class UserService implements UserServiceInterface { private final DatabaseInterface databaseService; - private final ApplicationProperties applicationProperties; + private final ApplicationProperties.Security.OAUTH2 oAuth2; @Transactional public void migrateOauth2ToSSO() { @@ -411,8 +421,7 @@ public class UserService implements UserServiceInterface { } else if (principal instanceof stirling.software.SPDF.model.User domainUser) { return domainUser.getUsername(); } else if (principal instanceof OAuth2User oAuth2User) { - return oAuth2User.getAttribute( - applicationProperties.getSecurity().getOauth2().getUseAsUsername()); + return oAuth2User.getAttribute(oAuth2.getUseAsUsername()); } else if (principal instanceof CustomSaml2AuthenticatedPrincipal saml2User) { return saml2User.name(); } else if (principal instanceof String stringUser) { diff --git a/src/main/java/stirling/software/SPDF/config/security/database/DatabaseConfig.java b/src/main/java/stirling/software/SPDF/config/security/database/DatabaseConfig.java index d221704ea..3deeee48a 100644 --- a/src/main/java/stirling/software/SPDF/config/security/database/DatabaseConfig.java +++ b/src/main/java/stirling/software/SPDF/config/security/database/DatabaseConfig.java @@ -10,9 +10,9 @@ import org.springframework.context.annotation.Configuration; import lombok.Getter; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.config.InstallationPathConfig; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.model.exception.UnsupportedProviderException; +import stirling.software.common.configuration.InstallationPathConfig; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.exception.UnsupportedProviderException; @Slf4j @Getter @@ -26,18 +26,18 @@ public class DatabaseConfig { public static final String DEFAULT_USERNAME = "sa"; public static final String POSTGRES_DRIVER = "org.postgresql.Driver"; - private final ApplicationProperties applicationProperties; + private final ApplicationProperties.Datasource datasource; private final boolean runningProOrHigher; public DatabaseConfig( - ApplicationProperties applicationProperties, + ApplicationProperties.Datasource datasource, @Qualifier("runningProOrHigher") boolean runningProOrHigher) { DATASOURCE_DEFAULT_URL = "jdbc:h2:file:" + InstallationPathConfig.getConfigPath() - + "stirling-pdf-DB-2.3.232;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE"; + + "stirling-pdf-DB-2.3.232;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=PostgreSQL"; log.debug("Database URL: {}", DATASOURCE_DEFAULT_URL); - this.applicationProperties = applicationProperties; + this.datasource = datasource; this.runningProOrHigher = runningProOrHigher; } @@ -58,9 +58,6 @@ public class DatabaseConfig { return useDefaultDataSource(dataSourceBuilder); } - ApplicationProperties.System system = applicationProperties.getSystem(); - ApplicationProperties.Datasource datasource = system.getDatasource(); - if (!datasource.isEnableCustomDatabase()) { return useDefaultDataSource(dataSourceBuilder); } diff --git a/src/main/java/stirling/software/SPDF/config/security/database/DatabaseService.java b/src/main/java/stirling/software/SPDF/config/security/database/DatabaseService.java index 27e9ae7b1..f973079b6 100644 --- a/src/main/java/stirling/software/SPDF/config/security/database/DatabaseService.java +++ b/src/main/java/stirling/software/SPDF/config/security/database/DatabaseService.java @@ -27,11 +27,11 @@ import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.config.InstallationPathConfig; import stirling.software.SPDF.config.interfaces.DatabaseInterface; -import stirling.software.SPDF.model.ApplicationProperties; import stirling.software.SPDF.model.exception.BackupNotFoundException; -import stirling.software.SPDF.utils.FileInfo; +import stirling.software.common.configuration.InstallationPathConfig; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.FileInfo; @Slf4j @Service @@ -41,13 +41,14 @@ public class DatabaseService implements DatabaseInterface { public static final String SQL_SUFFIX = ".sql"; private final Path BACKUP_DIR; - private final ApplicationProperties applicationProperties; + private final ApplicationProperties.Datasource datasourceProps; private final DataSource dataSource; - public DatabaseService(ApplicationProperties applicationProperties, DataSource dataSource) { + public DatabaseService( + ApplicationProperties.Datasource datasourceProps, DataSource dataSource) { this.BACKUP_DIR = Paths.get(InstallationPathConfig.getConfigPath(), "db", "backup").normalize(); - this.applicationProperties = applicationProperties; + this.datasourceProps = datasourceProps; this.dataSource = dataSource; } @@ -238,15 +239,12 @@ public class DatabaseService implements DatabaseInterface { } private boolean isH2Database() { - ApplicationProperties.Datasource datasource = - applicationProperties.getSystem().getDatasource(); - boolean isTypeH2 = - datasource.getType().equalsIgnoreCase(ApplicationProperties.Driver.H2.name()); + datasourceProps.getType().equalsIgnoreCase(ApplicationProperties.Driver.H2.name()); boolean isDBUrlH2 = - datasource.getCustomDatabaseUrl().contains("h2") - || datasource.getCustomDatabaseUrl().contains("H2"); - boolean isCustomDatabase = datasource.isEnableCustomDatabase(); + datasourceProps.getCustomDatabaseUrl().contains("h2") + || datasourceProps.getCustomDatabaseUrl().contains("H2"); + boolean isCustomDatabase = datasourceProps.isEnableCustomDatabase(); if (isCustomDatabase) { if (isTypeH2 && !isDBUrlH2) { diff --git a/src/main/java/stirling/software/SPDF/config/security/database/ScheduledTasks.java b/src/main/java/stirling/software/SPDF/config/security/database/ScheduledTasks.java index a0c4af046..73a33972a 100644 --- a/src/main/java/stirling/software/SPDF/config/security/database/ScheduledTasks.java +++ b/src/main/java/stirling/software/SPDF/config/security/database/ScheduledTasks.java @@ -10,7 +10,7 @@ import lombok.RequiredArgsConstructor; import stirling.software.SPDF.config.interfaces.DatabaseInterface; import stirling.software.SPDF.controller.api.H2SQLCondition; -import stirling.software.SPDF.model.exception.UnsupportedProviderException; +import stirling.software.common.model.exception.UnsupportedProviderException; @Component @Conditional(H2SQLCondition.class) diff --git a/src/main/java/stirling/software/SPDF/config/security/mail/EmailService.java b/src/main/java/stirling/software/SPDF/config/security/mail/EmailService.java index 507e51599..e27a2b681 100644 --- a/src/main/java/stirling/software/SPDF/config/security/mail/EmailService.java +++ b/src/main/java/stirling/software/SPDF/config/security/mail/EmailService.java @@ -12,8 +12,8 @@ import jakarta.mail.internet.MimeMessage; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.model.ApplicationProperties; import stirling.software.SPDF.model.api.Email; +import stirling.software.common.model.ApplicationProperties; /** * Service class responsible for sending emails, including those with attachments. It uses diff --git a/src/main/java/stirling/software/SPDF/config/security/mail/MailConfig.java b/src/main/java/stirling/software/SPDF/config/security/mail/MailConfig.java index 68c2fe35d..0181271d3 100644 --- a/src/main/java/stirling/software/SPDF/config/security/mail/MailConfig.java +++ b/src/main/java/stirling/software/SPDF/config/security/mail/MailConfig.java @@ -11,7 +11,7 @@ import org.springframework.mail.javamail.JavaMailSenderImpl; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties; /** * This configuration class provides the JavaMailSender bean, which is used to send emails. It reads diff --git a/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java b/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java index 1b320c2c7..986118466 100644 --- a/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java @@ -19,11 +19,11 @@ import lombok.RequiredArgsConstructor; import stirling.software.SPDF.config.security.LoginAttemptService; import stirling.software.SPDF.config.security.UserService; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2; import stirling.software.SPDF.model.AuthenticationType; -import stirling.software.SPDF.model.exception.UnsupportedProviderException; -import stirling.software.SPDF.utils.RequestUriUtils; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties.Security.OAUTH2; +import stirling.software.common.model.exception.UnsupportedProviderException; +import stirling.software.common.util.RequestUriUtils; @RequiredArgsConstructor public class CustomOAuth2AuthenticationSuccessHandler diff --git a/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2UserService.java b/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2UserService.java index 117c9de8f..458dd3477 100644 --- a/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2UserService.java +++ b/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2UserService.java @@ -15,10 +15,10 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.config.security.LoginAttemptService; import stirling.software.SPDF.config.security.UserService; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2; import stirling.software.SPDF.model.User; -import stirling.software.SPDF.model.UsernameAttribute; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties.Security.OAUTH2; +import stirling.software.common.model.enumeration.UsernameAttribute; @Slf4j public class CustomOAuth2UserService implements OAuth2UserService { diff --git a/src/main/java/stirling/software/SPDF/config/security/oauth2/OAuth2Configuration.java b/src/main/java/stirling/software/SPDF/config/security/oauth2/OAuth2Configuration.java index c43d8a606..98d69113c 100644 --- a/src/main/java/stirling/software/SPDF/config/security/oauth2/OAuth2Configuration.java +++ b/src/main/java/stirling/software/SPDF/config/security/oauth2/OAuth2Configuration.java @@ -1,7 +1,8 @@ package stirling.software.SPDF.config.security.oauth2; import static org.springframework.security.oauth2.core.AuthorizationGrantType.AUTHORIZATION_CODE; -import static stirling.software.SPDF.utils.validation.Validator.*; +import static stirling.software.common.util.ProviderUtils.validateProvider; +import static stirling.software.common.util.ValidationUtils.isStringEmpty; import java.util.ArrayList; import java.util.HashSet; @@ -25,16 +26,16 @@ import org.springframework.security.oauth2.core.user.OAuth2UserAuthority; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.config.security.UserService; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2; -import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2.Client; import stirling.software.SPDF.model.User; -import stirling.software.SPDF.model.UsernameAttribute; import stirling.software.SPDF.model.exception.NoProviderFoundException; -import stirling.software.SPDF.model.provider.GitHubProvider; -import stirling.software.SPDF.model.provider.GoogleProvider; -import stirling.software.SPDF.model.provider.KeycloakProvider; -import stirling.software.SPDF.model.provider.Provider; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties.Security.OAUTH2; +import stirling.software.common.model.ApplicationProperties.Security.OAUTH2.Client; +import stirling.software.common.model.enumeration.UsernameAttribute; +import stirling.software.common.model.oauth2.GitHubProvider; +import stirling.software.common.model.oauth2.GoogleProvider; +import stirling.software.common.model.oauth2.KeycloakProvider; +import stirling.software.common.model.oauth2.Provider; @Slf4j @Configuration diff --git a/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2AuthenticationSuccessHandler.java b/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2AuthenticationSuccessHandler.java index e4e2d88ca..94fddae62 100644 --- a/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2AuthenticationSuccessHandler.java +++ b/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2AuthenticationSuccessHandler.java @@ -18,11 +18,11 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.config.security.LoginAttemptService; import stirling.software.SPDF.config.security.UserService; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.model.ApplicationProperties.Security.SAML2; import stirling.software.SPDF.model.AuthenticationType; -import stirling.software.SPDF.model.exception.UnsupportedProviderException; -import stirling.software.SPDF.utils.RequestUriUtils; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties.Security.SAML2; +import stirling.software.common.model.exception.UnsupportedProviderException; +import stirling.software.common.util.RequestUriUtils; @AllArgsConstructor @Slf4j diff --git a/src/main/java/stirling/software/SPDF/config/security/saml2/SAML2Configuration.java b/src/main/java/stirling/software/SPDF/config/security/saml2/SAML2Configuration.java index 58c0a1637..8a6ff10cc 100644 --- a/src/main/java/stirling/software/SPDF/config/security/saml2/SAML2Configuration.java +++ b/src/main/java/stirling/software/SPDF/config/security/saml2/SAML2Configuration.java @@ -24,8 +24,8 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.model.ApplicationProperties.Security.SAML2; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties.Security.SAML2; @Configuration @Slf4j diff --git a/src/main/java/stirling/software/SPDF/controller/api/AnalysisController.java b/src/main/java/stirling/software/SPDF/controller/api/AnalysisController.java index 0fb2f2e8d..b6419890a 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/AnalysisController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/AnalysisController.java @@ -18,8 +18,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.service.CustomPDFDocumentFactory; @RestController @RequestMapping("/api/v1/analysis") diff --git a/src/main/java/stirling/software/SPDF/controller/api/CropController.java b/src/main/java/stirling/software/SPDF/controller/api/CropController.java index 0c4afc861..3a2d16757 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/CropController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/CropController.java @@ -22,8 +22,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.general.CropPdfForm; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/MergeController.java b/src/main/java/stirling/software/SPDF/controller/api/MergeController.java index f8ee0d1b5..146db6a3a 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/MergeController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/MergeController.java @@ -32,9 +32,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.general.MergePdfsRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.GeneralUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.GeneralUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @Slf4j diff --git a/src/main/java/stirling/software/SPDF/controller/api/MultiPageLayoutController.java b/src/main/java/stirling/software/SPDF/controller/api/MultiPageLayoutController.java index bb795a08a..c57e3a6c0 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/MultiPageLayoutController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/MultiPageLayoutController.java @@ -25,8 +25,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.general.MergeMultiplePagesRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/PdfImageRemovalController.java b/src/main/java/stirling/software/SPDF/controller/api/PdfImageRemovalController.java index a9d66106d..d6602351e 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/PdfImageRemovalController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/PdfImageRemovalController.java @@ -15,10 +15,10 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; import stirling.software.SPDF.service.PdfImageRemovalService; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; /** * Controller class for handling PDF image removal requests. Provides an endpoint to remove images diff --git a/src/main/java/stirling/software/SPDF/controller/api/PdfOverlayController.java b/src/main/java/stirling/software/SPDF/controller/api/PdfOverlayController.java index 60a398305..e6fc2c561 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/PdfOverlayController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/PdfOverlayController.java @@ -27,9 +27,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.general.OverlayPdfsRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.GeneralUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.GeneralUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/RearrangePagesPDFController.java b/src/main/java/stirling/software/SPDF/controller/api/RearrangePagesPDFController.java index 0ce0c1e24..3bf2ec802 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/RearrangePagesPDFController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/RearrangePagesPDFController.java @@ -24,9 +24,9 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.SortTypes; import stirling.software.SPDF.model.api.PDFWithPageNums; import stirling.software.SPDF.model.api.general.RearrangePagesRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.GeneralUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.GeneralUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/RotationController.java b/src/main/java/stirling/software/SPDF/controller/api/RotationController.java index 4b1a221a9..afdfc54d9 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/RotationController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/RotationController.java @@ -19,8 +19,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.general.RotatePDFRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/ScalePagesController.java b/src/main/java/stirling/software/SPDF/controller/api/ScalePagesController.java index 65a10c77e..b2d689728 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/ScalePagesController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/ScalePagesController.java @@ -26,8 +26,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.general.ScalePagesRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/SettingsController.java b/src/main/java/stirling/software/SPDF/controller/api/SettingsController.java index a64379a64..0e9cd96dc 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SettingsController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SettingsController.java @@ -17,9 +17,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.config.EndpointConfiguration; -import stirling.software.SPDF.config.InstallationPathConfig; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.utils.GeneralUtils; +import stirling.software.common.configuration.InstallationPathConfig; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.util.GeneralUtils; @Controller @Tag(name = "Settings", description = "Settings APIs") diff --git a/src/main/java/stirling/software/SPDF/controller/api/SplitPDFController.java b/src/main/java/stirling/software/SPDF/controller/api/SplitPDFController.java index af7fda04a..1b65891ac 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPDFController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPDFController.java @@ -28,8 +28,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.PDFWithPageNums; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfByChaptersController.java b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfByChaptersController.java index b50e4eb96..80ec89738 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfByChaptersController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfByChaptersController.java @@ -31,11 +31,11 @@ import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.PdfMetadata; import stirling.software.SPDF.model.api.SplitPdfByChaptersRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.service.PdfMetadataService; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.PdfMetadata; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.service.PdfMetadataService; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java index fec4e2657..c2bbd31b5 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java @@ -32,8 +32,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.SplitPdfBySectionsRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySizeController.java b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySizeController.java index 1049e02bc..3df62816f 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySizeController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySizeController.java @@ -25,9 +25,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.general.SplitPdfBySizeOrCountRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.GeneralUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.GeneralUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/ToSinglePageController.java b/src/main/java/stirling/software/SPDF/controller/api/ToSinglePageController.java index b3ae43071..9085f41b1 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/ToSinglePageController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/ToSinglePageController.java @@ -21,9 +21,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/UserController.java b/src/main/java/stirling/software/SPDF/controller/api/UserController.java index aa4ae9a00..1f2ccd1fd 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/UserController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/UserController.java @@ -32,12 +32,12 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.config.security.UserService; import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticatedPrincipal; import stirling.software.SPDF.config.security.session.SessionPersistentRegistry; -import stirling.software.SPDF.model.ApplicationProperties; import stirling.software.SPDF.model.AuthenticationType; import stirling.software.SPDF.model.Role; import stirling.software.SPDF.model.User; import stirling.software.SPDF.model.api.user.UsernameAndPass; -import stirling.software.SPDF.model.exception.UnsupportedProviderException; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.exception.UnsupportedProviderException; @Controller @Tag(name = "User", description = "User APIs") @@ -171,16 +171,19 @@ public class UserController { * Updates the user settings based on the provided JSON payload. * * @param updates A map containing the settings to update. The expected structure is: - *
    - *
  • emailNotifications (optional): "true" or "false" - Enable or disable email notifications.
  • - *
  • theme (optional): "light" or "dark" - Set the user's preferred theme.
  • - *
  • language (optional): A string representing the preferred language (e.g., "en", "fr").
  • - *
- * Keys not listed above will be ignored. + *
    + *
  • emailNotifications (optional): "true" or "false" - Enable or disable email + * notifications. + *
  • theme (optional): "light" or "dark" - Set the user's preferred theme. + *
  • language (optional): A string representing the preferred language (e.g., + * "en", "fr"). + *
+ * Keys not listed above will be ignored. * @param principal The currently authenticated user. * @return A redirect string to the account page after updating the settings. * @throws SQLException If a database error occurs. - * @throws UnsupportedProviderException If the operation is not supported for the user's provider. + * @throws UnsupportedProviderException If the operation is not supported for the user's + * provider. */ public String updateUserSettings(@RequestBody Map updates, Principal principal) throws SQLException, UnsupportedProviderException { diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertHtmlToPDF.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertHtmlToPDF.java index bfd67ef76..cdd9bc1a7 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertHtmlToPDF.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertHtmlToPDF.java @@ -13,12 +13,12 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.config.RuntimePathConfig; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.model.api.converters.HTMLToPdfRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.FileToPdf; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.configuration.RuntimePathConfig; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.api.converters.HTMLToPdfRequest; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.FileToPdf; +import stirling.software.common.util.WebResponseUtils; @RestController @Tag(name = "Convert", description = "Convert APIs") diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertImgPDFController.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertImgPDFController.java index ae46f5d45..3125f8335 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertImgPDFController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertImgPDFController.java @@ -32,9 +32,13 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.converters.ConvertToImageRequest; import stirling.software.SPDF.model.api.converters.ConvertToPdfRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.*; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.CheckProgramInstall; +import stirling.software.common.util.GeneralUtils; +import stirling.software.common.util.PdfUtils; +import stirling.software.common.util.ProcessExecutor; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/convert") @@ -53,7 +57,7 @@ public class ConvertImgPDFController { + " color type, and DPI. Users can choose to get a single image or multiple" + " images. Input:PDF Output:Image Type:SI-Conditional") public ResponseEntity convertToImage(@ModelAttribute ConvertToImageRequest request) - throws NumberFormatException, Exception { + throws Exception { MultipartFile file = request.getFileInput(); String imageFormat = request.getImageFormat(); String singleOrMultiple = request.getSingleOrMultiple(); diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertMarkdownToPdf.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertMarkdownToPdf.java index f0c999a45..9c8cb5105 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertMarkdownToPdf.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertMarkdownToPdf.java @@ -23,12 +23,12 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.config.RuntimePathConfig; -import stirling.software.SPDF.model.ApplicationProperties; import stirling.software.SPDF.model.api.GeneralFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.FileToPdf; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.configuration.RuntimePathConfig; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.FileToPdf; +import stirling.software.common.util.WebResponseUtils; @RestController @Tag(name = "Convert", description = "Convert APIs") diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertOfficeController.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertOfficeController.java index 52976b44d..6716106d5 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertOfficeController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertOfficeController.java @@ -23,12 +23,12 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.config.RuntimePathConfig; import stirling.software.SPDF.model.api.GeneralFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.ProcessExecutor; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.configuration.RuntimePathConfig; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.ProcessExecutor; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.util.WebResponseUtils; @RestController @Tag(name = "Convert", description = "Convert APIs") diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToHtml.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToHtml.java index c3233f4d7..9015dee2e 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToHtml.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToHtml.java @@ -10,8 +10,8 @@ import org.springframework.web.multipart.MultipartFile; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.utils.PDFToFile; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.util.PDFToFile; @RestController @Tag(name = "Convert", description = "Convert APIs") diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToOffice.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToOffice.java index c2563887c..585185460 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToOffice.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToOffice.java @@ -18,13 +18,13 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.model.api.PDFFile; import stirling.software.SPDF.model.api.converters.PdfToPresentationRequest; import stirling.software.SPDF.model.api.converters.PdfToTextOrRTFRequest; import stirling.software.SPDF.model.api.converters.PdfToWordRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.PDFToFile; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.PDFToFile; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/convert") diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToPDFA.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToPDFA.java index 25c0a213e..73efc03fd 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToPDFA.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToPDFA.java @@ -23,9 +23,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.converters.PdfToPdfARequest; -import stirling.software.SPDF.utils.ProcessExecutor; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.util.ProcessExecutor; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/convert") diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java index 9ef490e9a..b16cc01d9 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java @@ -19,14 +19,14 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.config.RuntimePathConfig; -import stirling.software.SPDF.model.ApplicationProperties; import stirling.software.SPDF.model.api.converters.UrlToPdfRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.GeneralUtils; -import stirling.software.SPDF.utils.ProcessExecutor; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.configuration.RuntimePathConfig; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.GeneralUtils; +import stirling.software.common.util.ProcessExecutor; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.util.WebResponseUtils; @RestController @Tag(name = "Convert", description = "Convert APIs") diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ExtractCSVController.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ExtractCSVController.java index 4ee3f7606..847904b60 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ExtractCSVController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ExtractCSVController.java @@ -30,7 +30,7 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.PDFWithPageNums; import stirling.software.SPDF.pdf.FlexibleCSVWriter; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; +import stirling.software.common.service.CustomPDFDocumentFactory; import technology.tabula.ObjectExtractor; import technology.tabula.Page; diff --git a/src/main/java/stirling/software/SPDF/controller/api/filters/FilterController.java b/src/main/java/stirling/software/SPDF/controller/api/filters/FilterController.java index 09d93a8b0..96322ad80 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/filters/FilterController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/filters/FilterController.java @@ -24,9 +24,9 @@ import stirling.software.SPDF.model.api.filter.ContainsTextRequest; import stirling.software.SPDF.model.api.filter.FileSizeRequest; import stirling.software.SPDF.model.api.filter.PageRotationRequest; import stirling.software.SPDF.model.api.filter.PageSizeRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.PdfUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.PdfUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/filter") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/AutoRenameController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/AutoRenameController.java index e628a98bb..8d803708c 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/AutoRenameController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/AutoRenameController.java @@ -23,8 +23,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.ExtractHeaderRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java index b7cb7541d..44d575575 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java @@ -35,8 +35,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.AutoSplitPdfRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/BlankPageController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/BlankPageController.java index c341a49fc..a7314fc7e 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/BlankPageController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/BlankPageController.java @@ -30,9 +30,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.RemoveBlankPagesRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.PdfUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.PdfUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java index cbaa12a0c..8509f5056 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java @@ -51,11 +51,11 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.config.EndpointConfiguration; import stirling.software.SPDF.model.api.misc.OptimizePdfRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.GeneralUtils; -import stirling.software.SPDF.utils.ProcessExecutor; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.GeneralUtils; +import stirling.software.common.util.ProcessExecutor; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/DecompressPdfController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/DecompressPdfController.java index bceb9e58b..cfbc88e8b 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/DecompressPdfController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/DecompressPdfController.java @@ -24,9 +24,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImageScansController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImageScansController.java index 5a01ad103..d5d3a63fb 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImageScansController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImageScansController.java @@ -31,11 +31,11 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.ExtractImageScansRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.CheckProgramInstall; -import stirling.software.SPDF.utils.ProcessExecutor; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.CheckProgramInstall; +import stirling.software.common.util.ProcessExecutor; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java index e03916745..4ec844485 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java @@ -40,9 +40,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.PDFExtractImagesRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.ImageProcessingUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.ImageProcessingUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/FakeScanControllerWIP.java b/src/main/java/stirling/software/SPDF/controller/api/misc/FakeScanControllerWIP.java index ca4cbd8fd..9861c1f19 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/FakeScanControllerWIP.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/FakeScanControllerWIP.java @@ -30,9 +30,9 @@ import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.utils.PdfUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.util.PdfUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/FlattenController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/FlattenController.java index e81fa23f2..d82a1971a 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/FlattenController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/FlattenController.java @@ -26,8 +26,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.FlattenRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/MetadataController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/MetadataController.java index 3e90132b6..1d5196940 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/MetadataController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/MetadataController.java @@ -23,9 +23,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.MetadataRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; -import stirling.software.SPDF.utils.propertyeditor.StringToMapPropertyEditor; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; +import stirling.software.common.util.propertyeditor.StringToMapPropertyEditor; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/OCRController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/OCRController.java index 558ac1fbb..be6c4649c 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/OCRController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/OCRController.java @@ -31,9 +31,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.ApplicationProperties; import stirling.software.SPDF.model.api.misc.ProcessPdfWithOcrRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.service.CustomPDFDocumentFactory; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/OverlayImageController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/OverlayImageController.java index 40773ab0d..d50c80967 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/OverlayImageController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/OverlayImageController.java @@ -18,9 +18,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.OverlayImageRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.PdfUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.PdfUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/PageNumbersController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/PageNumbersController.java index ae31bd01b..4233d11e4 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/PageNumbersController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/PageNumbersController.java @@ -25,9 +25,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.misc.AddPageNumbersRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.GeneralUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.GeneralUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/RepairController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/RepairController.java index 01d9049df..85340a163 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/RepairController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/RepairController.java @@ -19,11 +19,11 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.ProcessExecutor; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.ProcessExecutor; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/ShowJavascript.java b/src/main/java/stirling/software/SPDF/controller/api/misc/ShowJavascript.java index f6aab4527..94e9b57c6 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/ShowJavascript.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/ShowJavascript.java @@ -20,9 +20,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/StampController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/StampController.java index 1ceddba83..9c0ad2909 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/StampController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/StampController.java @@ -39,8 +39,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.misc.AddStampRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/UnlockPDFFormsController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/UnlockPDFFormsController.java index 764c7d6c4..e7dfba041 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/UnlockPDFFormsController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/UnlockPDFFormsController.java @@ -23,9 +23,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/pipeline/ApiDocService.java b/src/main/java/stirling/software/SPDF/controller/api/pipeline/ApiDocService.java index eb7730e3e..438ea980a 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/pipeline/ApiDocService.java +++ b/src/main/java/stirling/software/SPDF/controller/api/pipeline/ApiDocService.java @@ -25,6 +25,7 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.SPDFApplication; import stirling.software.SPDF.model.ApiEndpoint; import stirling.software.SPDF.model.Role; +import stirling.software.common.service.UserServiceInterface; @Service @Slf4j 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 f8b05f576..d573301d0 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 @@ -30,8 +30,8 @@ import stirling.software.SPDF.model.PipelineConfig; import stirling.software.SPDF.model.PipelineOperation; import stirling.software.SPDF.model.PipelineResult; import stirling.software.SPDF.model.api.HandleDataRequest; -import stirling.software.SPDF.service.PostHogService; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.PostHogService; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/pipeline") diff --git a/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineDirectoryProcessor.java b/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineDirectoryProcessor.java index 96a65fc46..9c127b6ad 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineDirectoryProcessor.java +++ b/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineDirectoryProcessor.java @@ -32,12 +32,12 @@ import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.config.RuntimePathConfig; import stirling.software.SPDF.model.PipelineConfig; import stirling.software.SPDF.model.PipelineOperation; import stirling.software.SPDF.model.PipelineResult; -import stirling.software.SPDF.service.PostHogService; -import stirling.software.SPDF.utils.FileMonitor; +import stirling.software.common.configuration.RuntimePathConfig; +import stirling.software.common.service.PostHogService; +import stirling.software.common.util.FileMonitor; @Service @Slf4j diff --git a/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java b/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java index 12c131f59..21be0861b 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java +++ b/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java @@ -36,6 +36,7 @@ import stirling.software.SPDF.model.PipelineConfig; import stirling.software.SPDF.model.PipelineOperation; import stirling.software.SPDF.model.PipelineResult; import stirling.software.SPDF.model.Role; +import stirling.software.common.service.UserServiceInterface; @Service @Slf4j @@ -221,7 +222,8 @@ public class PipelineProcessor { return result; } - /* package */ ResponseEntity sendWebRequest(String url, MultiValueMap body) { + /* package */ ResponseEntity sendWebRequest( + String url, MultiValueMap body) { RestTemplate restTemplate = new RestTemplate(); // Set up headers, including API key HttpHeaders headers = new HttpHeaders(); diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/CertSignController.java b/src/main/java/stirling/software/SPDF/controller/api/security/CertSignController.java index e853faa62..3260eb31f 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/CertSignController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/CertSignController.java @@ -72,8 +72,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.security.SignPDFWithCertRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/security") diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/GetInfoOnPDF.java b/src/main/java/stirling/software/SPDF/controller/api/security/GetInfoOnPDF.java index ef82a2942..79ffae74f 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/GetInfoOnPDF.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/GetInfoOnPDF.java @@ -61,9 +61,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/security") diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/PasswordController.java b/src/main/java/stirling/software/SPDF/controller/api/security/PasswordController.java index 90fd03dea..4567fcb7e 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/PasswordController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/PasswordController.java @@ -20,8 +20,8 @@ import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.security.AddPasswordRequest; import stirling.software.SPDF.model.api.security.PDFPasswordRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/security") diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/RedactController.java b/src/main/java/stirling/software/SPDF/controller/api/security/RedactController.java index 72571e2d7..1e4feb840 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/RedactController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/RedactController.java @@ -35,11 +35,11 @@ import stirling.software.SPDF.model.api.security.ManualRedactPdfRequest; import stirling.software.SPDF.model.api.security.RedactPdfRequest; import stirling.software.SPDF.model.api.security.RedactionArea; import stirling.software.SPDF.pdf.TextFinder; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.GeneralUtils; -import stirling.software.SPDF.utils.PdfUtils; -import stirling.software.SPDF.utils.WebResponseUtils; -import stirling.software.SPDF.utils.propertyeditor.StringToArrayListPropertyEditor; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.GeneralUtils; +import stirling.software.common.util.PdfUtils; +import stirling.software.common.util.WebResponseUtils; +import stirling.software.common.util.propertyeditor.StringToArrayListPropertyEditor; @RestController @RequestMapping("/api/v1/security") diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/RemoveCertSignController.java b/src/main/java/stirling/software/SPDF/controller/api/security/RemoveCertSignController.java index 5761e854f..79fd18914 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/RemoveCertSignController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/RemoveCertSignController.java @@ -20,9 +20,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/security") diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java b/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java index 9be4cacbc..bc0a4ff9d 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java @@ -26,8 +26,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.security.SanitizePdfRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/security") diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/ValidateSignatureController.java b/src/main/java/stirling/software/SPDF/controller/api/security/ValidateSignatureController.java index 67f776408..b3f01ef47 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/ValidateSignatureController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/ValidateSignatureController.java @@ -40,7 +40,7 @@ import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.security.SignatureValidationRequest; import stirling.software.SPDF.model.api.security.SignatureValidationResult; import stirling.software.SPDF.service.CertificateValidationService; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; +import stirling.software.common.service.CustomPDFDocumentFactory; @RestController @RequestMapping("/api/v1/security") diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java b/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java index 14d23ac09..fd8f1cf8a 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java @@ -40,9 +40,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.security.AddWatermarkRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.PdfUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.PdfUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/security") diff --git a/src/main/java/stirling/software/SPDF/controller/web/AccountWebController.java b/src/main/java/stirling/software/SPDF/controller/web/AccountWebController.java index 327cda76c..1962dffb8 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/AccountWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/AccountWebController.java @@ -1,6 +1,6 @@ package stirling.software.SPDF.controller.web; -import static stirling.software.SPDF.utils.validation.Validator.validateProvider; +import static stirling.software.common.util.ProviderUtils.validateProvider; import java.time.Instant; import java.time.temporal.ChronoUnit; @@ -31,19 +31,19 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticatedPrincipal; import stirling.software.SPDF.config.security.session.SessionPersistentRegistry; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.model.ApplicationProperties.Security; -import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2; -import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2.Client; -import stirling.software.SPDF.model.ApplicationProperties.Security.SAML2; import stirling.software.SPDF.model.Authority; import stirling.software.SPDF.model.Role; import stirling.software.SPDF.model.SessionEntity; import stirling.software.SPDF.model.User; -import stirling.software.SPDF.model.provider.GitHubProvider; -import stirling.software.SPDF.model.provider.GoogleProvider; -import stirling.software.SPDF.model.provider.KeycloakProvider; import stirling.software.SPDF.repository.UserRepository; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties.Security; +import stirling.software.common.model.ApplicationProperties.Security.OAUTH2; +import stirling.software.common.model.ApplicationProperties.Security.OAUTH2.Client; +import stirling.software.common.model.ApplicationProperties.Security.SAML2; +import stirling.software.common.model.oauth2.GitHubProvider; +import stirling.software.common.model.oauth2.GoogleProvider; +import stirling.software.common.model.oauth2.KeycloakProvider; @Controller @Slf4j diff --git a/src/main/java/stirling/software/SPDF/controller/web/ConverterWebController.java b/src/main/java/stirling/software/SPDF/controller/web/ConverterWebController.java index 0307f67a5..10794693e 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/ConverterWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/ConverterWebController.java @@ -8,7 +8,7 @@ import org.springframework.web.servlet.ModelAndView; import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.tags.Tag; -import stirling.software.SPDF.utils.CheckProgramInstall; +import stirling.software.common.util.CheckProgramInstall; @Controller @Tag(name = "Convert", description = "Convert APIs") diff --git a/src/main/java/stirling/software/SPDF/controller/web/DatabaseWebController.java b/src/main/java/stirling/software/SPDF/controller/web/DatabaseWebController.java index 738db8d89..1291895f3 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/DatabaseWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/DatabaseWebController.java @@ -15,7 +15,7 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.config.security.database.DatabaseService; -import stirling.software.SPDF.utils.FileInfo; +import stirling.software.common.model.FileInfo; @Controller @Tag(name = "Database Management", description = "Database management and security APIs") diff --git a/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java b/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java index 83337ae6a..eb51d721a 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java @@ -24,12 +24,12 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.config.InstallationPathConfig; -import stirling.software.SPDF.config.RuntimePathConfig; -import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface; import stirling.software.SPDF.model.SignatureFile; import stirling.software.SPDF.service.SignatureService; -import stirling.software.SPDF.utils.GeneralUtils; +import stirling.software.common.configuration.InstallationPathConfig; +import stirling.software.common.configuration.RuntimePathConfig; +import stirling.software.common.service.UserServiceInterface; +import stirling.software.common.util.GeneralUtils; @Controller @Tag(name = "General", description = "General APIs") 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 9fc644863..e878ef837 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/HomeWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/HomeWebController.java @@ -22,8 +22,8 @@ import io.swagger.v3.oas.annotations.Hidden; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.ApplicationProperties; import stirling.software.SPDF.model.Dependency; +import stirling.software.common.model.ApplicationProperties; @Controller @Slf4j 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 52c79073f..e82acaffa 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java @@ -24,7 +24,7 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.config.EndpointInspector; import stirling.software.SPDF.config.StartupApplicationListener; -import stirling.software.SPDF.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties; @RestController @RequestMapping("/api/v1/info") diff --git a/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java b/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java index ddd189e28..25333d495 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java @@ -15,8 +15,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.utils.CheckProgramInstall; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.util.CheckProgramInstall; @Controller @Tag(name = "Misc", description = "Miscellaneous APIs") diff --git a/src/main/java/stirling/software/SPDF/controller/web/SignatureController.java b/src/main/java/stirling/software/SPDF/controller/web/SignatureController.java index eaf671393..de03680e1 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/SignatureController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/SignatureController.java @@ -11,8 +11,8 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; -import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface; import stirling.software.SPDF.service.SignatureService; +import stirling.software.common.service.UserServiceInterface; @Controller @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/web/UploadLimitService.java b/src/main/java/stirling/software/SPDF/controller/web/UploadLimitService.java index 9a074b6e4..2c4ed9bec 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/UploadLimitService.java +++ b/src/main/java/stirling/software/SPDF/controller/web/UploadLimitService.java @@ -8,7 +8,7 @@ import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties; @Service @Slf4j diff --git a/src/main/java/stirling/software/SPDF/model/api/PDFComparison.java b/src/main/java/stirling/software/SPDF/model/api/PDFComparison.java index 2dcf3731e..9524cd274 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFComparison.java +++ b/src/main/java/stirling/software/SPDF/model/api/PDFComparison.java @@ -5,6 +5,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; +import stirling.software.common.model.api.PDFFile; + @Data @EqualsAndHashCode(callSuper = true) public class PDFComparison extends PDFFile { diff --git a/src/main/java/stirling/software/SPDF/model/api/PDFWithImageFormatRequest.java b/src/main/java/stirling/software/SPDF/model/api/PDFWithImageFormatRequest.java index e269f91ca..c2e8d2658 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFWithImageFormatRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/PDFWithImageFormatRequest.java @@ -5,6 +5,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; +import stirling.software.common.model.api.PDFFile; + @Data @EqualsAndHashCode(callSuper = true) public class PDFWithImageFormatRequest extends PDFFile { diff --git a/src/main/java/stirling/software/SPDF/model/api/PDFWithPageNums.java b/src/main/java/stirling/software/SPDF/model/api/PDFWithPageNums.java index dd73f9763..062c890fc 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFWithPageNums.java +++ b/src/main/java/stirling/software/SPDF/model/api/PDFWithPageNums.java @@ -11,7 +11,8 @@ import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.utils.GeneralUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.util.GeneralUtils; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/PDFWithPageSize.java b/src/main/java/stirling/software/SPDF/model/api/PDFWithPageSize.java index 81f1eedb9..83501fb35 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFWithPageSize.java +++ b/src/main/java/stirling/software/SPDF/model/api/PDFWithPageSize.java @@ -5,6 +5,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; +import stirling.software.common.model.api.PDFFile; + @Data @EqualsAndHashCode(callSuper = true) public class PDFWithPageSize extends PDFFile { diff --git a/src/main/java/stirling/software/SPDF/model/api/SplitPdfByChaptersRequest.java b/src/main/java/stirling/software/SPDF/model/api/SplitPdfByChaptersRequest.java index b6a619d53..364faeca4 100644 --- a/src/main/java/stirling/software/SPDF/model/api/SplitPdfByChaptersRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/SplitPdfByChaptersRequest.java @@ -5,6 +5,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; +import stirling.software.common.model.api.PDFFile; + @Data @EqualsAndHashCode(callSuper = false) public class SplitPdfByChaptersRequest extends PDFFile { diff --git a/src/main/java/stirling/software/SPDF/model/api/SplitPdfBySectionsRequest.java b/src/main/java/stirling/software/SPDF/model/api/SplitPdfBySectionsRequest.java index ca8aad091..3a89ab686 100644 --- a/src/main/java/stirling/software/SPDF/model/api/SplitPdfBySectionsRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/SplitPdfBySectionsRequest.java @@ -5,6 +5,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; +import stirling.software.common.model.api.PDFFile; + @Data @EqualsAndHashCode(callSuper = true) public class SplitPdfBySectionsRequest extends PDFFile { diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/ConvertPDFToMarkdown.java b/src/main/java/stirling/software/SPDF/model/api/converters/ConvertPDFToMarkdown.java index 5481423ac..fbbd4723a 100644 --- a/src/main/java/stirling/software/SPDF/model/api/converters/ConvertPDFToMarkdown.java +++ b/src/main/java/stirling/software/SPDF/model/api/converters/ConvertPDFToMarkdown.java @@ -10,8 +10,8 @@ import org.springframework.web.multipart.MultipartFile; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.utils.PDFToFile; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.util.PDFToFile; @RestController @Tag(name = "Convert", description = "Convert APIs") diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToBookRequest.java b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToBookRequest.java index ab48ce2df..474981e76 100644 --- a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToBookRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToBookRequest.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToPdfARequest.java b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToPdfARequest.java index 0ce91a337..0553988ca 100644 --- a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToPdfARequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToPdfARequest.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToPresentationRequest.java b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToPresentationRequest.java index aa23eb533..8a5b3d376 100644 --- a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToPresentationRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToPresentationRequest.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToTextOrRTFRequest.java b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToTextOrRTFRequest.java index 7d4f9f098..bad03d97a 100644 --- a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToTextOrRTFRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToTextOrRTFRequest.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToWordRequest.java b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToWordRequest.java index f2613e339..e28bb9be8 100644 --- a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToWordRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToWordRequest.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/general/CropPdfForm.java b/src/main/java/stirling/software/SPDF/model/api/general/CropPdfForm.java index 5f991ffcd..913f94a10 100644 --- a/src/main/java/stirling/software/SPDF/model/api/general/CropPdfForm.java +++ b/src/main/java/stirling/software/SPDF/model/api/general/CropPdfForm.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/general/MergeMultiplePagesRequest.java b/src/main/java/stirling/software/SPDF/model/api/general/MergeMultiplePagesRequest.java index 4bd41e400..6d9254023 100644 --- a/src/main/java/stirling/software/SPDF/model/api/general/MergeMultiplePagesRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/general/MergeMultiplePagesRequest.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/general/OverlayPdfsRequest.java b/src/main/java/stirling/software/SPDF/model/api/general/OverlayPdfsRequest.java index 528e57844..f89ba320f 100644 --- a/src/main/java/stirling/software/SPDF/model/api/general/OverlayPdfsRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/general/OverlayPdfsRequest.java @@ -7,7 +7,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/general/RotatePDFRequest.java b/src/main/java/stirling/software/SPDF/model/api/general/RotatePDFRequest.java index fae64edb6..aebc2b399 100644 --- a/src/main/java/stirling/software/SPDF/model/api/general/RotatePDFRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/general/RotatePDFRequest.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/general/SplitPdfBySizeOrCountRequest.java b/src/main/java/stirling/software/SPDF/model/api/general/SplitPdfBySizeOrCountRequest.java index 0c436cf46..0dd599781 100644 --- a/src/main/java/stirling/software/SPDF/model/api/general/SplitPdfBySizeOrCountRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/general/SplitPdfBySizeOrCountRequest.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/AutoSplitPdfRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/AutoSplitPdfRequest.java index ff13c4038..0ba3ad8bd 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/AutoSplitPdfRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/AutoSplitPdfRequest.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/ExtractHeaderRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/ExtractHeaderRequest.java index 641833b77..cbb51a390 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/ExtractHeaderRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/ExtractHeaderRequest.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/FlattenRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/FlattenRequest.java index 37be18444..cf4e7c575 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/FlattenRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/FlattenRequest.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/MetadataRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/MetadataRequest.java index 0238e9607..63b267196 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/MetadataRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/MetadataRequest.java @@ -7,7 +7,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/OptimizePdfRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/OptimizePdfRequest.java index dc426e965..eafeeceaa 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/OptimizePdfRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/OptimizePdfRequest.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/OverlayImageRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/OverlayImageRequest.java index 65bf4ce90..759daa991 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/OverlayImageRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/OverlayImageRequest.java @@ -7,7 +7,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/PrintFileRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/PrintFileRequest.java index f6ee362c3..3119c32d7 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/PrintFileRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/PrintFileRequest.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/ProcessPdfWithOcrRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/ProcessPdfWithOcrRequest.java index 7eb254b3f..00279eb96 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/ProcessPdfWithOcrRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/ProcessPdfWithOcrRequest.java @@ -7,7 +7,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/RemoveBlankPagesRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/RemoveBlankPagesRequest.java index dd018dea3..cef00dcc0 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/RemoveBlankPagesRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/RemoveBlankPagesRequest.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/ReplaceAndInvertColorRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/ReplaceAndInvertColorRequest.java index c6f948f7c..50ef14b1e 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/ReplaceAndInvertColorRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/ReplaceAndInvertColorRequest.java @@ -5,7 +5,9 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.model.api.misc.HighContrastColorCombination; +import stirling.software.common.model.api.misc.ReplaceAndInvert; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/security/AddPasswordRequest.java b/src/main/java/stirling/software/SPDF/model/api/security/AddPasswordRequest.java index 8dfa4e54f..666318a49 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/AddPasswordRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/security/AddPasswordRequest.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/security/AddWatermarkRequest.java b/src/main/java/stirling/software/SPDF/model/api/security/AddWatermarkRequest.java index 0a8a2559e..00408c55e 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/AddWatermarkRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/security/AddWatermarkRequest.java @@ -7,7 +7,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/security/PDFPasswordRequest.java b/src/main/java/stirling/software/SPDF/model/api/security/PDFPasswordRequest.java index 0353fe3e7..cea62b079 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/PDFPasswordRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/security/PDFPasswordRequest.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/security/RedactPdfRequest.java b/src/main/java/stirling/software/SPDF/model/api/security/RedactPdfRequest.java index 0ec6ca20a..279a41a27 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/RedactPdfRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/security/RedactPdfRequest.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/security/SanitizePdfRequest.java b/src/main/java/stirling/software/SPDF/model/api/security/SanitizePdfRequest.java index dc38b9fc8..736fbb20d 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/SanitizePdfRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/security/SanitizePdfRequest.java @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/security/SignPDFWithCertRequest.java b/src/main/java/stirling/software/SPDF/model/api/security/SignPDFWithCertRequest.java index 20356af08..acb4b55fd 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/SignPDFWithCertRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/security/SignPDFWithCertRequest.java @@ -7,7 +7,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/security/SignatureValidationRequest.java b/src/main/java/stirling/software/SPDF/model/api/security/SignatureValidationRequest.java index 39e96b955..dd301e0e1 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/SignatureValidationRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/security/SignatureValidationRequest.java @@ -7,7 +7,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/exception/UnsupportedUsernameAttribute.java b/src/main/java/stirling/software/SPDF/model/exception/UnsupportedUsernameAttribute.java deleted file mode 100644 index 0bf06ee20..000000000 --- a/src/main/java/stirling/software/SPDF/model/exception/UnsupportedUsernameAttribute.java +++ /dev/null @@ -1,7 +0,0 @@ -package stirling.software.SPDF.model.exception; - -public class UnsupportedUsernameAttribute extends RuntimeException { - public UnsupportedUsernameAttribute(String message) { - super(message); - } -} diff --git a/src/main/java/stirling/software/SPDF/service/LanguageService.java b/src/main/java/stirling/software/SPDF/service/LanguageService.java index 805717f3b..4731716a9 100644 --- a/src/main/java/stirling/software/SPDF/service/LanguageService.java +++ b/src/main/java/stirling/software/SPDF/service/LanguageService.java @@ -12,7 +12,7 @@ import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties; @Service @Slf4j diff --git a/src/main/java/stirling/software/SPDF/service/MetricsAggregatorService.java b/src/main/java/stirling/software/SPDF/service/MetricsAggregatorService.java index 8cc0a243f..acd0669c0 100644 --- a/src/main/java/stirling/software/SPDF/service/MetricsAggregatorService.java +++ b/src/main/java/stirling/software/SPDF/service/MetricsAggregatorService.java @@ -15,6 +15,7 @@ import io.micrometer.core.instrument.search.Search; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.config.EndpointInspector; +import stirling.software.common.service.PostHogService; @Service @RequiredArgsConstructor diff --git a/src/main/java/stirling/software/SPDF/service/SignatureService.java b/src/main/java/stirling/software/SPDF/service/SignatureService.java index 984bd0baf..1d25f409f 100644 --- a/src/main/java/stirling/software/SPDF/service/SignatureService.java +++ b/src/main/java/stirling/software/SPDF/service/SignatureService.java @@ -13,8 +13,8 @@ import org.thymeleaf.util.StringUtils; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.config.InstallationPathConfig; import stirling.software.SPDF.model.SignatureFile; +import stirling.software.common.configuration.InstallationPathConfig; @Service @Slf4j diff --git a/src/main/java/stirling/software/SPDF/service/misc/ReplaceAndInvertColorService.java b/src/main/java/stirling/software/SPDF/service/misc/ReplaceAndInvertColorService.java index e2a4e7ea5..dc61a1e1d 100644 --- a/src/main/java/stirling/software/SPDF/service/misc/ReplaceAndInvertColorService.java +++ b/src/main/java/stirling/software/SPDF/service/misc/ReplaceAndInvertColorService.java @@ -9,9 +9,9 @@ import org.springframework.web.multipart.MultipartFile; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.Factories.ReplaceAndInvertColorFactory; -import stirling.software.SPDF.model.api.misc.HighContrastColorCombination; -import stirling.software.SPDF.model.api.misc.ReplaceAndInvert; -import stirling.software.SPDF.utils.misc.ReplaceAndInvertColorStrategy; +import stirling.software.common.model.api.misc.HighContrastColorCombination; +import stirling.software.common.model.api.misc.ReplaceAndInvert; +import stirling.software.common.util.misc.ReplaceAndInvertColorStrategy; @Service @RequiredArgsConstructor diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d7d074223..2ef6e03b4 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -21,18 +21,19 @@ spring.servlet.multipart.max-file-size=2000MB spring.servlet.multipart.max-request-size=2000MB server.servlet.session.tracking-modes=cookie server.servlet.context-path=${SYSTEM_ROOTURIPATH:/} -spring.devtools.restart.enabled=true +spring.devtools.restart.enabled=false spring.devtools.livereload.enabled=true spring.devtools.restart.exclude=stirling.software.SPDF.config.security/** spring.thymeleaf.encoding=UTF-8 spring.web.resources.mime-mappings.webmanifest=application/manifest+json spring.mvc.async.request-timeout=${SYSTEM_CONNECTIONTIMEOUTMILLISECONDS:1200000} +management.endpoints.web.exposure.include=beans spring.datasource.url=jdbc:h2:file:./configs/stirling-pdf-DB-2.3.232;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=PostgreSQL spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password= -spring.h2.console.enabled=false +spring.h2.console.enabled=true spring.jpa.hibernate.ddl-auto=update server.servlet.session.timeout:30m # Change the default URL path for OpenAPI JSON diff --git a/src/main/resources/settings.yml.template b/src/main/resources/settings.yml.template index 380faeb42..0226776c5 100644 --- a/src/main/resources/settings.yml.template +++ b/src/main/resources/settings.yml.template @@ -62,8 +62,9 @@ security: premium: key: 00000000-0000-0000-0000-000000000000 - enabled: false # Enable license key checks for pro/enterprise features + enabled: true # Enable license key checks for pro/enterprise features proFeatures: + database: true # Enable database features SSOAutoLogin: false CustomMetadata: autoUpdateMetadata: false diff --git a/src/test/java/stirling/software/SPDF/EE/LicenseKeyCheckerTest.java b/src/test/java/stirling/software/SPDF/EE/LicenseKeyCheckerTest.java index 90754ee04..e11d0a0b4 100644 --- a/src/test/java/stirling/software/SPDF/EE/LicenseKeyCheckerTest.java +++ b/src/test/java/stirling/software/SPDF/EE/LicenseKeyCheckerTest.java @@ -14,7 +14,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import stirling.software.SPDF.EE.KeygenLicenseVerifier.License; -import stirling.software.SPDF.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties; @ExtendWith(MockitoExtension.class) class LicenseKeyCheckerTest { diff --git a/src/test/java/stirling/software/SPDF/SPDFApplicationTest.java b/src/test/java/stirling/software/SPDF/SPDFApplicationTest.java index c4dae34bf..087475c85 100644 --- a/src/test/java/stirling/software/SPDF/SPDFApplicationTest.java +++ b/src/test/java/stirling/software/SPDF/SPDFApplicationTest.java @@ -10,7 +10,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.core.env.Environment; -import stirling.software.SPDF.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties; @ExtendWith(MockitoExtension.class) public class SPDFApplicationTest { diff --git a/src/test/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandlerTest.java b/src/test/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandlerTest.java index 72dd95418..79638cafe 100644 --- a/src/test/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandlerTest.java +++ b/src/test/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandlerTest.java @@ -16,7 +16,7 @@ import org.springframework.security.oauth2.client.authentication.OAuth2Authentic import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import stirling.software.SPDF.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties; @ExtendWith(MockitoExtension.class) class CustomLogoutSuccessHandlerTest { diff --git a/src/test/java/stirling/software/SPDF/config/security/database/DatabaseConfigTest.java b/src/test/java/stirling/software/SPDF/config/security/database/DatabaseConfigTest.java index 0118e8e32..45bbd28c0 100644 --- a/src/test/java/stirling/software/SPDF/config/security/database/DatabaseConfigTest.java +++ b/src/test/java/stirling/software/SPDF/config/security/database/DatabaseConfigTest.java @@ -2,7 +2,6 @@ package stirling.software.SPDF.config.security.database; import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import javax.sql.DataSource; @@ -15,24 +14,24 @@ import org.junit.jupiter.params.provider.ValueSource; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.model.exception.UnsupportedProviderException; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.exception.UnsupportedProviderException; @ExtendWith(MockitoExtension.class) class DatabaseConfigTest { - @Mock private ApplicationProperties applicationProperties; + @Mock private ApplicationProperties.Datasource datasource; private DatabaseConfig databaseConfig; @BeforeEach void setUp() { - databaseConfig = new DatabaseConfig(applicationProperties, true); + databaseConfig = new DatabaseConfig(datasource, true); } @Test void testDataSource_whenRunningEEIsFalse() throws UnsupportedProviderException { - databaseConfig = new DatabaseConfig(applicationProperties, false); + databaseConfig = new DatabaseConfig(datasource, false); var result = databaseConfig.dataSource(); @@ -41,11 +40,6 @@ class DatabaseConfigTest { @Test void testDefaultConfigurationForDataSource() throws UnsupportedProviderException { - var system = mock(ApplicationProperties.System.class); - var datasource = mock(ApplicationProperties.Datasource.class); - - when(applicationProperties.getSystem()).thenReturn(system); - when(system.getDatasource()).thenReturn(datasource); when(datasource.isEnableCustomDatabase()).thenReturn(false); var result = databaseConfig.dataSource(); @@ -55,11 +49,6 @@ class DatabaseConfigTest { @Test void testCustomUrlForDataSource() throws UnsupportedProviderException { - var system = mock(ApplicationProperties.System.class); - var datasource = mock(ApplicationProperties.Datasource.class); - - when(applicationProperties.getSystem()).thenReturn(system); - when(system.getDatasource()).thenReturn(datasource); when(datasource.isEnableCustomDatabase()).thenReturn(true); when(datasource.getCustomDatabaseUrl()).thenReturn("jdbc:postgresql://mockUrl"); when(datasource.getUsername()).thenReturn("test"); @@ -72,11 +61,6 @@ class DatabaseConfigTest { @Test void testCustomConfigurationForDataSource() throws UnsupportedProviderException { - var system = mock(ApplicationProperties.System.class); - var datasource = mock(ApplicationProperties.Datasource.class); - - when(applicationProperties.getSystem()).thenReturn(system); - when(system.getDatasource()).thenReturn(datasource); when(datasource.isEnableCustomDatabase()).thenReturn(true); when(datasource.getCustomDatabaseUrl()).thenReturn(""); when(datasource.getType()).thenReturn("postgresql"); @@ -94,11 +78,6 @@ class DatabaseConfigTest { @ParameterizedTest(name = "Exception thrown when the DB type [{arguments}] is not supported") @ValueSource(strings = {"oracle", "mysql", "mongoDb"}) void exceptionThrown_whenDBTypeIsUnsupported(String datasourceType) { - var system = mock(ApplicationProperties.System.class); - var datasource = mock(ApplicationProperties.Datasource.class); - - when(applicationProperties.getSystem()).thenReturn(system); - when(system.getDatasource()).thenReturn(datasource); when(datasource.isEnableCustomDatabase()).thenReturn(true); when(datasource.getCustomDatabaseUrl()).thenReturn(""); when(datasource.getType()).thenReturn(datasourceType); diff --git a/src/test/java/stirling/software/SPDF/config/security/mail/EmailServiceTest.java b/src/test/java/stirling/software/SPDF/config/security/mail/EmailServiceTest.java index 1781eb1bb..64f02799b 100644 --- a/src/test/java/stirling/software/SPDF/config/security/mail/EmailServiceTest.java +++ b/src/test/java/stirling/software/SPDF/config/security/mail/EmailServiceTest.java @@ -15,8 +15,8 @@ import org.springframework.web.multipart.MultipartFile; import jakarta.mail.MessagingException; import jakarta.mail.internet.MimeMessage; -import stirling.software.SPDF.model.ApplicationProperties; import stirling.software.SPDF.model.api.Email; +import stirling.software.common.model.ApplicationProperties; @ExtendWith(MockitoExtension.class) public class EmailServiceTest { diff --git a/src/test/java/stirling/software/SPDF/config/security/mail/MailConfigTest.java b/src/test/java/stirling/software/SPDF/config/security/mail/MailConfigTest.java index 2e47f14e3..bff1cb5eb 100644 --- a/src/test/java/stirling/software/SPDF/config/security/mail/MailConfigTest.java +++ b/src/test/java/stirling/software/SPDF/config/security/mail/MailConfigTest.java @@ -13,7 +13,7 @@ import org.junit.jupiter.api.Test; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.JavaMailSenderImpl; -import stirling.software.SPDF.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties; class MailConfigTest { diff --git a/src/test/java/stirling/software/SPDF/controller/api/RearrangePagesPDFControllerTest.java b/src/test/java/stirling/software/SPDF/controller/api/RearrangePagesPDFControllerTest.java index d6085b6f2..fcc0a7f0b 100644 --- a/src/test/java/stirling/software/SPDF/controller/api/RearrangePagesPDFControllerTest.java +++ b/src/test/java/stirling/software/SPDF/controller/api/RearrangePagesPDFControllerTest.java @@ -13,7 +13,7 @@ import org.junit.jupiter.params.provider.CsvSource; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; +import stirling.software.common.service.CustomPDFDocumentFactory; class RearrangePagesPDFControllerTest { diff --git a/src/test/java/stirling/software/SPDF/controller/api/RotationControllerTest.java b/src/test/java/stirling/software/SPDF/controller/api/RotationControllerTest.java index ec84b0e4c..13d76b262 100644 --- a/src/test/java/stirling/software/SPDF/controller/api/RotationControllerTest.java +++ b/src/test/java/stirling/software/SPDF/controller/api/RotationControllerTest.java @@ -21,7 +21,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.mock.web.MockMultipartFile; import stirling.software.SPDF.model.api.general.RotatePDFRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; +import stirling.software.common.service.CustomPDFDocumentFactory; @ExtendWith(MockitoExtension.class) public class RotationControllerTest { diff --git a/src/test/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPdfTest.java b/src/test/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPdfTest.java index a67e84f60..b5d65ba79 100644 --- a/src/test/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPdfTest.java +++ b/src/test/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPdfTest.java @@ -8,10 +8,10 @@ import org.junit.jupiter.api.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import stirling.software.SPDF.config.RuntimePathConfig; -import stirling.software.SPDF.model.ApplicationProperties; import stirling.software.SPDF.model.api.converters.UrlToPdfRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; +import stirling.software.common.configuration.RuntimePathConfig; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.service.CustomPDFDocumentFactory; public class ConvertWebsiteToPdfTest { diff --git a/src/test/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessorTest.java b/src/test/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessorTest.java index eeeaf1a51..45baa992f 100644 --- a/src/test/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessorTest.java +++ b/src/test/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessorTest.java @@ -22,18 +22,16 @@ import jakarta.servlet.ServletContext; import stirling.software.SPDF.model.PipelineConfig; import stirling.software.SPDF.model.PipelineOperation; import stirling.software.SPDF.model.PipelineResult; +import stirling.software.common.service.UserServiceInterface; @ExtendWith(MockitoExtension.class) class PipelineProcessorTest { - @Mock - ApiDocService apiDocService; + @Mock ApiDocService apiDocService; - @Mock - UserServiceInterface userService; + @Mock UserServiceInterface userService; - @Mock - ServletContext servletContext; + @Mock ServletContext servletContext; PipelineProcessor pipelineProcessor; @@ -50,17 +48,19 @@ class PipelineProcessorTest { PipelineConfig config = new PipelineConfig(); config.setOperations(List.of(op)); - Resource file = new ByteArrayResource("data".getBytes()) { - @Override - public String getFilename() { - return "test.pdf"; - } - }; + Resource file = + new ByteArrayResource("data".getBytes()) { + @Override + public String getFilename() { + return "test.pdf"; + } + }; List files = List.of(file); when(apiDocService.isMultiInput("filter-page-count")).thenReturn(false); - when(apiDocService.getExtensionTypes(false, "filter-page-count")).thenReturn(List.of("pdf")); + when(apiDocService.getExtensionTypes(false, "filter-page-count")) + .thenReturn(List.of("pdf")); doReturn(new ResponseEntity<>(new byte[0], HttpStatus.OK)) .when(pipelineProcessor) @@ -68,7 +68,9 @@ class PipelineProcessorTest { PipelineResult result = pipelineProcessor.runPipelineAgainstFiles(files, config); - assertTrue(result.isFiltersApplied(), "Filter flag should be true when operation filters file"); + assertTrue( + result.isFiltersApplied(), + "Filter flag should be true when operation filters file"); assertFalse(result.isHasErrors(), "No errors should occur"); assertTrue(result.getOutputFiles().isEmpty(), "Filtered file list should be empty"); } diff --git a/src/test/java/stirling/software/SPDF/controller/web/UploadLimitServiceTest.java b/src/test/java/stirling/software/SPDF/controller/web/UploadLimitServiceTest.java index 18bcaad59..49ca634a6 100644 --- a/src/test/java/stirling/software/SPDF/controller/web/UploadLimitServiceTest.java +++ b/src/test/java/stirling/software/SPDF/controller/web/UploadLimitServiceTest.java @@ -11,7 +11,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import stirling.software.SPDF.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties; class UploadLimitServiceTest { diff --git a/src/test/java/stirling/software/SPDF/service/LanguageServiceBasicTest.java b/src/test/java/stirling/software/SPDF/service/LanguageServiceBasicTest.java index 453ff205b..f351abc8e 100644 --- a/src/test/java/stirling/software/SPDF/service/LanguageServiceBasicTest.java +++ b/src/test/java/stirling/software/SPDF/service/LanguageServiceBasicTest.java @@ -14,8 +14,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.core.io.Resource; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.model.ApplicationProperties.Ui; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties.Ui; class LanguageServiceBasicTest { diff --git a/src/test/java/stirling/software/SPDF/service/LanguageServiceTest.java b/src/test/java/stirling/software/SPDF/service/LanguageServiceTest.java index 0222017a3..24685e3b7 100644 --- a/src/test/java/stirling/software/SPDF/service/LanguageServiceTest.java +++ b/src/test/java/stirling/software/SPDF/service/LanguageServiceTest.java @@ -17,8 +17,8 @@ import org.junit.jupiter.api.Test; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.model.ApplicationProperties.Ui; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties.Ui; class LanguageServiceTest { diff --git a/src/test/java/stirling/software/SPDF/service/PdfMetadataServiceBasicTest.java b/src/test/java/stirling/software/SPDF/service/PdfMetadataServiceBasicTest.java index bd99767d9..f09156ca8 100644 --- a/src/test/java/stirling/software/SPDF/service/PdfMetadataServiceBasicTest.java +++ b/src/test/java/stirling/software/SPDF/service/PdfMetadataServiceBasicTest.java @@ -14,12 +14,13 @@ import org.apache.pdfbox.pdmodel.PDDocumentInformation; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.model.ApplicationProperties.Premium; -import stirling.software.SPDF.model.ApplicationProperties.Premium.ProFeatures; -import stirling.software.SPDF.model.ApplicationProperties.Premium.ProFeatures.CustomMetadata; -import stirling.software.SPDF.model.PdfMetadata; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties.Premium; +import stirling.software.common.model.ApplicationProperties.Premium.ProFeatures; +import stirling.software.common.model.ApplicationProperties.Premium.ProFeatures.CustomMetadata; +import stirling.software.common.model.PdfMetadata; +import stirling.software.common.service.PdfMetadataService; +import stirling.software.common.service.UserServiceInterface; class PdfMetadataServiceBasicTest { diff --git a/src/test/java/stirling/software/SPDF/service/PdfMetadataServiceTest.java b/src/test/java/stirling/software/SPDF/service/PdfMetadataServiceTest.java index 12960e784..9d3270014 100644 --- a/src/test/java/stirling/software/SPDF/service/PdfMetadataServiceTest.java +++ b/src/test/java/stirling/software/SPDF/service/PdfMetadataServiceTest.java @@ -17,12 +17,13 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface; -import stirling.software.SPDF.model.ApplicationProperties; -import stirling.software.SPDF.model.ApplicationProperties.Premium; -import stirling.software.SPDF.model.ApplicationProperties.Premium.ProFeatures; -import stirling.software.SPDF.model.ApplicationProperties.Premium.ProFeatures.CustomMetadata; -import stirling.software.SPDF.model.PdfMetadata; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.ApplicationProperties.Premium; +import stirling.software.common.model.ApplicationProperties.Premium.ProFeatures; +import stirling.software.common.model.ApplicationProperties.Premium.ProFeatures.CustomMetadata; +import stirling.software.common.model.PdfMetadata; +import stirling.software.common.service.PdfMetadataService; +import stirling.software.common.service.UserServiceInterface; @ExtendWith(MockitoExtension.class) class PdfMetadataServiceTest { diff --git a/src/test/java/stirling/software/SPDF/service/SignatureServiceTest.java b/src/test/java/stirling/software/SPDF/service/SignatureServiceTest.java index 735740754..5161e82ea 100644 --- a/src/test/java/stirling/software/SPDF/service/SignatureServiceTest.java +++ b/src/test/java/stirling/software/SPDF/service/SignatureServiceTest.java @@ -17,8 +17,8 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import org.mockito.MockedStatic; -import stirling.software.SPDF.config.InstallationPathConfig; import stirling.software.SPDF.model.SignatureFile; +import stirling.software.common.configuration.InstallationPathConfig; class SignatureServiceTest { diff --git a/src/test/java/stirling/software/SPDF/utils/RequestUriUtilsTest.java b/src/test/java/stirling/software/SPDF/utils/RequestUriUtilsTest.java deleted file mode 100644 index 87d1bd0a6..000000000 --- a/src/test/java/stirling/software/SPDF/utils/RequestUriUtilsTest.java +++ /dev/null @@ -1,311 +0,0 @@ -package stirling.software.SPDF.utils; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; - -class RequestUriUtilsTest { - - @Test - void testIsStaticResource() { - // Test static resources without context path - assertTrue( - RequestUriUtils.isStaticResource("/css/styles.css"), "CSS files should be static"); - assertTrue(RequestUriUtils.isStaticResource("/js/script.js"), "JS files should be static"); - assertTrue( - RequestUriUtils.isStaticResource("/images/logo.png"), - "Image files should be static"); - assertTrue( - RequestUriUtils.isStaticResource("/public/index.html"), - "Public files should be static"); - assertTrue( - RequestUriUtils.isStaticResource("/pdfjs/pdf.worker.js"), - "PDF.js files should be static"); - assertTrue( - RequestUriUtils.isStaticResource("/api/v1/info/status"), - "API status should be static"); - assertTrue( - RequestUriUtils.isStaticResource("/some-path/icon.svg"), - "SVG files should be static"); - assertTrue(RequestUriUtils.isStaticResource("/login"), "Login page should be static"); - assertTrue(RequestUriUtils.isStaticResource("/error"), "Error page should be static"); - - // Test non-static resources - assertFalse( - RequestUriUtils.isStaticResource("/api/v1/users"), - "API users should not be static"); - assertFalse( - RequestUriUtils.isStaticResource("/api/v1/orders"), - "API orders should not be static"); - assertFalse(RequestUriUtils.isStaticResource("/"), "Root path should not be static"); - assertFalse( - RequestUriUtils.isStaticResource("/register"), - "Register page should not be static"); - assertFalse( - RequestUriUtils.isStaticResource("/api/v1/products"), - "API products should not be static"); - } - - @Test - void testIsStaticResourceWithContextPath() { - String contextPath = "/myapp"; - - // Test static resources with context path - assertTrue( - RequestUriUtils.isStaticResource(contextPath, contextPath + "/css/styles.css"), - "CSS with context path should be static"); - assertTrue( - RequestUriUtils.isStaticResource(contextPath, contextPath + "/js/script.js"), - "JS with context path should be static"); - assertTrue( - RequestUriUtils.isStaticResource(contextPath, contextPath + "/images/logo.png"), - "Images with context path should be static"); - assertTrue( - RequestUriUtils.isStaticResource(contextPath, contextPath + "/login"), - "Login with context path should be static"); - - // Test non-static resources with context path - assertFalse( - RequestUriUtils.isStaticResource(contextPath, contextPath + "/api/v1/users"), - "API users with context path should not be static"); - assertFalse( - RequestUriUtils.isStaticResource(contextPath, "/"), - "Root path with context path should not be static"); - } - - @ParameterizedTest - @ValueSource( - strings = { - "robots.txt", - "/favicon.ico", - "/icon.svg", - "/image.png", - "/site.webmanifest", - "/app/logo.svg", - "/downloads/document.png", - "/assets/brand.ico", - "/any/path/with/image.svg", - "/deep/nested/folder/icon.png" - }) - void testIsStaticResourceWithFileExtensions(String path) { - assertTrue( - RequestUriUtils.isStaticResource(path), - "Files with specific extensions should be static regardless of path"); - } - - @Test - void testIsTrackableResource() { - // Test non-trackable resources (returns false) - assertFalse( - RequestUriUtils.isTrackableResource("/js/script.js"), - "JS files should not be trackable"); - assertFalse( - RequestUriUtils.isTrackableResource("/v1/api-docs"), - "API docs should not be trackable"); - assertFalse( - RequestUriUtils.isTrackableResource("robots.txt"), - "robots.txt should not be trackable"); - assertFalse( - RequestUriUtils.isTrackableResource("/images/logo.png"), - "Images should not be trackable"); - assertFalse( - RequestUriUtils.isTrackableResource("/styles.css"), - "CSS files should not be trackable"); - assertFalse( - RequestUriUtils.isTrackableResource("/script.js.map"), - "Map files should not be trackable"); - assertFalse( - RequestUriUtils.isTrackableResource("/icon.svg"), - "SVG files should not be trackable"); - assertFalse( - RequestUriUtils.isTrackableResource("/popularity.txt"), - "Popularity file should not be trackable"); - assertFalse( - RequestUriUtils.isTrackableResource("/script.js"), - "JS files should not be trackable"); - assertFalse( - RequestUriUtils.isTrackableResource("/swagger/index.html"), - "Swagger files should not be trackable"); - assertFalse( - RequestUriUtils.isTrackableResource("/api/v1/info/status"), - "API info should not be trackable"); - assertFalse( - RequestUriUtils.isTrackableResource("/site.webmanifest"), - "Webmanifest should not be trackable"); - assertFalse( - RequestUriUtils.isTrackableResource("/fonts/font.woff"), - "Fonts should not be trackable"); - assertFalse( - RequestUriUtils.isTrackableResource("/pdfjs/viewer.js"), - "PDF.js files should not be trackable"); - - // Test trackable resources (returns true) - assertTrue(RequestUriUtils.isTrackableResource("/login"), "Login page should be trackable"); - assertTrue( - RequestUriUtils.isTrackableResource("/register"), - "Register page should be trackable"); - assertTrue( - RequestUriUtils.isTrackableResource("/api/v1/users"), - "API users should be trackable"); - assertTrue(RequestUriUtils.isTrackableResource("/"), "Root path should be trackable"); - assertTrue( - RequestUriUtils.isTrackableResource("/some-other-path"), - "Other paths should be trackable"); - } - - @Test - void testIsTrackableResourceWithContextPath() { - String contextPath = "/myapp"; - - // Test with context path - assertFalse( - RequestUriUtils.isTrackableResource(contextPath, "/js/script.js"), - "JS files should not be trackable with context path"); - assertTrue( - RequestUriUtils.isTrackableResource(contextPath, "/login"), - "Login page should be trackable with context path"); - - // Additional tests with context path - assertFalse( - RequestUriUtils.isTrackableResource(contextPath, "/fonts/custom.woff"), - "Font files should not be trackable with context path"); - assertFalse( - RequestUriUtils.isTrackableResource(contextPath, "/images/header.png"), - "Images should not be trackable with context path"); - assertFalse( - RequestUriUtils.isTrackableResource(contextPath, "/swagger/ui.html"), - "Swagger UI should not be trackable with context path"); - assertTrue( - RequestUriUtils.isTrackableResource(contextPath, "/account/profile"), - "Account page should be trackable with context path"); - assertTrue( - RequestUriUtils.isTrackableResource(contextPath, "/pdf/view"), - "PDF view page should be trackable with context path"); - } - - @ParameterizedTest - @ValueSource( - strings = { - "/js/util.js", - "/v1/api-docs/swagger.json", - "/robots.txt", - "/images/header/logo.png", - "/styles/theme.css", - "/build/app.js.map", - "/assets/icon.svg", - "/data/popularity.txt", - "/bundle.js", - "/api/swagger-ui.html", - "/api/v1/info/health", - "/site.webmanifest", - "/fonts/roboto.woff", - "/pdfjs/viewer.js" - }) - void testNonTrackableResources(String path) { - assertFalse( - RequestUriUtils.isTrackableResource(path), - "Resources matching patterns should not be trackable: " + path); - } - - @ParameterizedTest - @ValueSource( - strings = { - "/", - "/home", - "/login", - "/register", - "/pdf/merge", - "/pdf/split", - "/api/v1/users/1", - "/api/v1/documents/process", - "/settings", - "/account/profile", - "/dashboard", - "/help", - "/about" - }) - void testTrackableResources(String path) { - assertTrue( - RequestUriUtils.isTrackableResource(path), - "App routes should be trackable: " + path); - } - - @Test - void testEdgeCases() { - // Test with empty strings - assertFalse(RequestUriUtils.isStaticResource("", ""), "Empty path should not be static"); - assertTrue(RequestUriUtils.isTrackableResource("", ""), "Empty path should be trackable"); - - // Test with null-like behavior (would actually throw NPE in real code) - // These are not actual null tests but shows handling of odd cases - assertFalse(RequestUriUtils.isStaticResource("null"), "String 'null' should not be static"); - - // Test String "null" as a path - boolean isTrackable = RequestUriUtils.isTrackableResource("null"); - assertTrue(isTrackable, "String 'null' should be trackable"); - - // Mixed case extensions test - note that Java's endsWith() is case-sensitive - // We'll check actual behavior and document it rather than asserting - - // Always test the lowercase versions which should definitely work - assertTrue( - RequestUriUtils.isStaticResource("/logo.png"), "PNG (lowercase) should be static"); - assertTrue( - RequestUriUtils.isStaticResource("/icon.svg"), "SVG (lowercase) should be static"); - - // Path with query parameters - assertFalse( - RequestUriUtils.isStaticResource("/api/users?page=1"), - "Path with query params should respect base path"); - assertTrue( - RequestUriUtils.isStaticResource("/images/logo.png?v=123"), - "Static resource with query params should still be static"); - - // Paths with fragments - assertTrue( - RequestUriUtils.isStaticResource("/css/styles.css#section1"), - "CSS with fragment should be static"); - - // Multiple dots in filename - assertTrue( - RequestUriUtils.isStaticResource("/js/jquery.min.js"), - "JS with multiple dots should be static"); - - // Special characters in path - assertTrue( - RequestUriUtils.isStaticResource("/images/user's-photo.png"), - "Path with special chars should be handled correctly"); - } - - @Test - void testComplexPaths() { - // Test complex static resource paths - assertTrue( - RequestUriUtils.isStaticResource("/css/theme/dark/styles.css"), - "Nested CSS should be static"); - assertTrue( - RequestUriUtils.isStaticResource("/fonts/open-sans/bold/font.woff"), - "Nested font should be static"); - assertTrue( - RequestUriUtils.isStaticResource("/js/vendor/jquery/3.5.1/jquery.min.js"), - "Versioned JS should be static"); - - // Test complex paths with context - String contextPath = "/app"; - assertTrue( - RequestUriUtils.isStaticResource( - contextPath, contextPath + "/css/theme/dark/styles.css"), - "Nested CSS with context should be static"); - - // Test boundary cases for isTrackableResource - assertFalse( - RequestUriUtils.isTrackableResource("/js-framework/components"), - "Path starting with js- should not be treated as JS resource"); - assertFalse( - RequestUriUtils.isTrackableResource("/fonts-selection"), - "Path starting with fonts- should not be treated as font resource"); - } -}