From 84a349954516bb0e61c51f516203f1d67808b062 Mon Sep 17 00:00:00 2001 From: Dario Ghunney Ware Date: Thu, 22 May 2025 11:17:08 +0100 Subject: [PATCH] moving files to common module --- build.gradle | 2 - common/build.gradle | 24 +- .../util/DeletingRandomAccessFile.java | 0 .../common/configuration/AppConfig.java | 21 +- .../configuration}/ConfigInitializer.java | 6 +- .../configuration/InstallationPathConfig.java | 27 +- .../common/configuration}/PostHogConfig.java | 2 +- .../configuration}/PostHogLoggerImpl.java | 2 +- .../configuration}/RuntimePathConfig.java | 3 +- .../common/configuration/YamlConfig.java | 45 --- .../interfaces/ShowAdminInterface.java | 7 + .../common/model/ApplicationProperties.java | 20 +- .../software/common/model}/FileInfo.java | 2 +- .../software/common/model/PdfMetadata.java | 19 ++ .../common/model/api/GeneralFile.java | 19 ++ .../software/common}/model/api/PDFFile.java | 2 +- .../api/converters/HTMLToPdfRequest.java | 5 +- .../misc/HighContrastColorCombination.java | 2 +- .../model/api/misc/ReplaceAndInvert.java | 2 +- .../model/api/security/RedactionArea.java | 28 ++ .../common/model/enumeration/Role.java | 66 ++++ .../exception/UnsupportedClaimException.java | 7 + .../UnsupportedUsernameAttribute.java | 7 - .../{provider => oauth2}/GitHubProvider.java | 2 +- .../{provider => oauth2}/GoogleProvider.java | 2 +- .../KeycloakProvider.java | 2 +- .../model/{provider => oauth2}/Provider.java | 10 +- .../service/CustomPDFDocumentFactory.java | 4 +- .../common/service/PdfMetadataService.java | 113 +++++++ .../common}/service/PostHogService.java | 18 +- .../common/service/UserServiceInterface.java | 9 + .../common/util}/CheckProgramInstall.java | 4 +- .../common/util}/CustomHtmlSanitizer.java | 2 +- .../software/common/util}/ErrorUtils.java | 2 +- .../software/common/util}/FileMonitor.java | 5 +- .../software/common/util}/FileToPdf.java | 6 +- .../software/common/util/GeneralUtil.java | 5 +- .../common/util}/ImageProcessingUtils.java | 2 +- .../software/common/util}/PDFToFile.java | 4 +- .../software/common/util}/PdfUtils.java | 9 +- .../common/util}/ProcessExecutor.java | 2 +- .../common/util}/PropertyConfigs.java | 2 +- .../{Validator.java => ProviderUtil.java} | 15 +- .../software/common/util/RequestUriUtil.java | 6 +- .../software/common/util}/UIScaling.java | 4 +- .../software/common/util}/UrlUtils.java | 2 +- .../software/common/util/ValidationUtil.java | 14 + .../common/util}/WebResponseUtils.java | 2 +- .../software/common/util}/YamlHelper.java | 2 +- .../misc/CustomColorReplaceStrategy.java | 7 +- .../misc/HighContrastColorReplaceDecider.java | 6 +- .../util}/misc/InvertFullColorStrategy.java | 5 +- .../util}/misc/PdfTextStripperCustom.java | 2 +- .../misc/ReplaceAndInvertColorStrategy.java | 6 +- .../StringToArrayListPropertyEditor.java | 8 +- .../StringToMapPropertyEditor.java | 4 +- .../service/CustomPDFDocumentFactoryTest.java | 16 +- .../service/SpyPDFDocumentFactory.java | 2 +- .../common/util}/CheckProgramInstallTest.java | 25 +- .../common/util}/CustomHtmlSanitizerTest.java | 2 +- .../software/common/util}/ErrorUtilsTest.java | 2 +- .../software/common/util}/FileInfoTest.java | 4 +- .../common/util}/FileMonitorTest.java | 5 +- .../software/common/util}/FileToPdfTest.java | 4 +- .../util/GeneralUtilAdditionalTest.java | 41 +++ .../software/common/util/GeneralUtilTest.java | 52 +-- .../util}/ImageProcessingUtilsTest.java | 2 +- .../software/common/util}/PDFToFileTest.java | 4 +- .../software/common/util}/PdfUtilsTest.java | 6 +- .../common/util}/ProcessExecutorTest.java | 2 +- .../common/util}/PropertyConfigsTest.java | 2 +- ...lidatorTest.java => ProviderUtilTest.java} | 16 +- .../common/util/RequestUriUtilTest.java | 311 ++++++++++++++++++ .../software/common/util}/UIScalingTest.java | 2 +- .../software/common/util}/UrlUtilsTest.java | 2 +- .../common/util}/WebResponseUtilsTest.java | 2 +- .../misc/CustomColorReplaceStrategyTest.java | 6 +- .../HighContrastColorReplaceDeciderTest.java | 12 +- .../misc/InvertFullColorStrategyTest.java | 5 +- .../util}/misc/PdfTextStripperCustomTest.java | 2 +- .../ReplaceAndInvertColorStrategyTest.java | 5 +- .../StringToArrayListPropertyEditorTest.java | 13 +- .../StringToMapPropertyEditorTest.java | 2 +- .../src}/test/resources/example.pdf | Bin .../SPDF/EE/KeygenLicenseVerifier.java | 4 +- .../software/SPDF/EE/LicenseKeyChecker.java | 4 +- .../ReplaceAndInvertColorFactory.java | 10 +- .../software/SPDF/SPDFApplication.java | 4 +- .../software/SPDF/UI/impl/DesktopBrowser.java | 2 +- .../software/SPDF/UI/impl/LoadingWindow.java | 2 +- .../SPDF/config/ExternalAppDepConfig.java | 2 + .../software/SPDF/config/InitialSetup.java | 22 +- .../software/SPDF/config/MetricsFilter.java | 4 +- .../config/interfaces/DatabaseInterface.java | 2 +- .../CustomAuthenticationSuccessHandler.java | 4 +- .../security/CustomLogoutSuccessHandler.java | 4 +- .../config/security/FirstLoginFilter.java | 4 +- .../config/security/IPRateLimitingFilter.java | 4 +- .../security/database}/DatabaseConfig.java | 10 +- .../security/database/DatabaseService.java | 2 +- ...tomOAuth2AuthenticationSuccessHandler.java | 4 +- .../security/oauth2/OAuth2Configuration.java | 12 +- ...stomSaml2AuthenticationSuccessHandler.java | 4 +- .../controller/api/AnalysisController.java | 4 +- .../SPDF/controller/api/CropController.java | 4 +- .../SPDF/controller/api/MergeController.java | 8 +- .../api/MultiPageLayoutController.java | 4 +- .../api/PdfImageRemovalController.java | 6 +- .../controller/api/PdfOverlayController.java | 8 +- .../api/RearrangePagesPDFController.java | 10 +- .../controller/api/RotationController.java | 4 +- .../controller/api/ScalePagesController.java | 4 +- .../controller/api/SettingsController.java | 4 +- .../controller/api/SplitPDFController.java | 4 +- .../api/SplitPdfByChaptersController.java | 4 +- .../api/SplitPdfBySectionsController.java | 4 +- .../api/SplitPdfBySizeController.java | 8 +- .../api/ToSinglePageController.java | 6 +- .../api/converters/ConvertHtmlToPDF.java | 10 +- .../converters/ConvertImgPDFController.java | 14 +- .../api/converters/ConvertMarkdownToPdf.java | 8 +- .../converters/ConvertOfficeController.java | 10 +- .../api/converters/ConvertPDFToHtml.java | 4 +- .../api/converters/ConvertPDFToOffice.java | 8 +- .../api/converters/ConvertPDFToPDFA.java | 6 +- .../api/converters/ConvertWebsiteToPDF.java | 16 +- .../api/converters/ExtractCSVController.java | 2 +- .../api/filters/FilterController.java | 6 +- .../api/misc/AutoRenameController.java | 4 +- .../api/misc/AutoSplitPdfController.java | 4 +- .../api/misc/BlankPageController.java | 6 +- .../api/misc/CompressController.java | 30 +- .../api/misc/DecompressPdfController.java | 6 +- .../api/misc/ExtractImageScansController.java | 10 +- .../api/misc/ExtractImagesController.java | 6 +- .../api/misc/FakeScanControllerWIP.java | 6 +- .../api/misc/FlattenController.java | 4 +- .../api/misc/MetadataController.java | 6 +- .../controller/api/misc/OCRController.java | 2 +- .../api/misc/OverlayImageController.java | 6 +- .../api/misc/PageNumbersController.java | 8 +- .../controller/api/misc/RepairController.java | 10 +- .../controller/api/misc/ShowJavascript.java | 6 +- .../controller/api/misc/StampController.java | 4 +- .../api/misc/UnlockPDFFormsController.java | 6 +- .../api/pipeline/PipelineController.java | 4 +- .../pipeline/PipelineDirectoryProcessor.java | 6 +- .../api/security/CertSignController.java | 4 +- .../controller/api/security/GetInfoOnPDF.java | 6 +- .../api/security/PasswordController.java | 4 +- .../api/security/RedactController.java | 13 +- .../security/RemoveCertSignController.java | 6 +- .../api/security/SanitizeController.java | 4 +- .../security/ValidateSignatureController.java | 2 +- .../api/security/WatermarkController.java | 6 +- .../controller/web/AccountWebController.java | 8 +- .../web/ConverterWebController.java | 2 +- .../controller/web/DatabaseWebController.java | 2 +- .../controller/web/GeneralWebController.java | 6 +- .../controller/web/OtherWebController.java | 2 +- .../SPDF/model/api/PDFComparison.java | 2 + .../model/api/PDFWithImageFormatRequest.java | 2 + .../SPDF/model/api/PDFWithPageNums.java | 5 +- .../SPDF/model/api/PDFWithPageSize.java | 2 + .../model/api/SplitPdfByChaptersRequest.java | 2 + .../model/api/SplitPdfBySectionsRequest.java | 2 + .../api/converters/ConvertPDFToMarkdown.java | 4 +- .../api/converters/PdfToBookRequest.java | 2 +- .../api/converters/PdfToPdfARequest.java | 2 +- .../converters/PdfToPresentationRequest.java | 2 +- .../api/converters/PdfToTextOrRTFRequest.java | 2 +- .../api/converters/PdfToWordRequest.java | 2 +- .../SPDF/model/api/general/CropPdfForm.java | 2 +- .../general/MergeMultiplePagesRequest.java | 2 +- .../model/api/general/OverlayPdfsRequest.java | 2 +- .../model/api/general/RotatePDFRequest.java | 2 +- .../general/SplitPdfBySizeOrCountRequest.java | 2 +- .../model/api/misc/AutoSplitPdfRequest.java | 2 +- .../model/api/misc/ExtractHeaderRequest.java | 2 +- .../SPDF/model/api/misc/FlattenRequest.java | 2 +- .../SPDF/model/api/misc/MetadataRequest.java | 2 +- .../model/api/misc/OptimizePdfRequest.java | 2 +- .../model/api/misc/OverlayImageRequest.java | 2 +- .../SPDF/model/api/misc/PrintFileRequest.java | 2 +- .../api/misc/ProcessPdfWithOcrRequest.java | 2 +- .../api/misc/RemoveBlankPagesRequest.java | 2 +- .../misc/ReplaceAndInvertColorRequest.java | 4 +- .../api/security/AddPasswordRequest.java | 2 +- .../api/security/AddWatermarkRequest.java | 2 +- .../api/security/PDFPasswordRequest.java | 2 +- .../model/api/security/RedactPdfRequest.java | 2 +- .../api/security/SanitizePdfRequest.java | 2 +- .../api/security/SignPDFWithCertRequest.java | 2 +- .../security/SignatureValidationRequest.java | 2 +- .../service/MetricsAggregatorService.java | 1 + .../misc/ReplaceAndInvertColorService.java | 6 +- .../database}/DatabaseConfigTest.java | 2 +- .../api/RearrangePagesPDFControllerTest.java | 2 +- .../api/RotationControllerTest.java | 2 +- .../converters/ConvertWebsiteToPdfTest.java | 4 +- .../utils/GeneralUtilsAdditionalTest.java | 41 --- .../SPDF/utils/RequestUriUtilsTest.java | 311 ------------------ 202 files changed, 1154 insertions(+), 910 deletions(-) rename {src => common/src}/main/java/org/apache/pdfbox/examples/util/DeletingRandomAccessFile.java (100%) rename {src/main/java/stirling/software/SPDF/config => common/src/main/java/stirling/software/common/configuration}/ConfigInitializer.java (97%) rename {src/main/java/stirling/software/SPDF/config => common/src/main/java/stirling/software/common/configuration}/PostHogConfig.java (95%) rename {src/main/java/stirling/software/SPDF/config => common/src/main/java/stirling/software/common/configuration}/PostHogLoggerImpl.java (94%) rename {src/main/java/stirling/software/SPDF/config => common/src/main/java/stirling/software/common/configuration}/RuntimePathConfig.java (96%) delete mode 100644 common/src/main/java/stirling/software/common/configuration/YamlConfig.java create mode 100644 common/src/main/java/stirling/software/common/configuration/interfaces/ShowAdminInterface.java rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/model}/FileInfo.java (97%) create mode 100644 common/src/main/java/stirling/software/common/model/PdfMetadata.java create mode 100644 common/src/main/java/stirling/software/common/model/api/GeneralFile.java rename {src/main/java/stirling/software/SPDF => common/src/main/java/stirling/software/common}/model/api/PDFFile.java (91%) rename {src/main/java/stirling/software/SPDF => common/src/main/java/stirling/software/common}/model/api/converters/HTMLToPdfRequest.java (79%) rename {src/main/java/stirling/software/SPDF => common/src/main/java/stirling/software/common}/model/api/misc/HighContrastColorCombination.java (75%) rename {src/main/java/stirling/software/SPDF => common/src/main/java/stirling/software/common}/model/api/misc/ReplaceAndInvert.java (66%) create mode 100644 common/src/main/java/stirling/software/common/model/api/security/RedactionArea.java create mode 100644 common/src/main/java/stirling/software/common/model/enumeration/Role.java create mode 100644 common/src/main/java/stirling/software/common/model/exception/UnsupportedClaimException.java delete mode 100644 common/src/main/java/stirling/software/common/model/exception/UnsupportedUsernameAttribute.java rename common/src/main/java/stirling/software/common/model/{provider => oauth2}/GitHubProvider.java (97%) rename common/src/main/java/stirling/software/common/model/{provider => oauth2}/GoogleProvider.java (97%) rename common/src/main/java/stirling/software/common/model/{provider => oauth2}/KeycloakProvider.java (97%) rename common/src/main/java/stirling/software/common/model/{provider => oauth2}/Provider.java (93%) rename {src/main/java/stirling/software/SPDF => common/src/main/java/stirling/software/common}/service/CustomPDFDocumentFactory.java (99%) create mode 100644 common/src/main/java/stirling/software/common/service/PdfMetadataService.java rename {src/main/java/stirling/software/SPDF => common/src/main/java/stirling/software/common}/service/PostHogService.java (96%) create mode 100644 common/src/main/java/stirling/software/common/service/UserServiceInterface.java rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/CheckProgramInstall.java (94%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/CustomHtmlSanitizer.java (94%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/ErrorUtils.java (96%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/FileMonitor.java (98%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/FileToPdf.java (97%) rename src/main/java/stirling/software/SPDF/utils/GeneralUtils.java => common/src/main/java/stirling/software/common/util/GeneralUtil.java (99%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/ImageProcessingUtils.java (99%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/PDFToFile.java (99%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/PdfUtils.java (98%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/ProcessExecutor.java (99%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/PropertyConfigs.java (96%) rename common/src/main/java/stirling/software/common/util/{Validator.java => ProviderUtil.java} (57%) rename src/main/java/stirling/software/SPDF/utils/RequestUriUtils.java => common/src/main/java/stirling/software/common/util/RequestUriUtil.java (96%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/UIScaling.java (97%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/UrlUtils.java (96%) create mode 100644 common/src/main/java/stirling/software/common/util/ValidationUtil.java rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/WebResponseUtils.java (98%) rename {src/main/java/stirling/software/SPDF/config => common/src/main/java/stirling/software/common/util}/YamlHelper.java (99%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/misc/CustomColorReplaceStrategy.java (97%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/misc/HighContrastColorReplaceDecider.java (84%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/misc/InvertFullColorStrategy.java (97%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/misc/PdfTextStripperCustom.java (96%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/misc/ReplaceAndInvertColorStrategy.java (79%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/propertyeditor/StringToArrayListPropertyEditor.java (86%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/util}/propertyeditor/StringToMapPropertyEditor.java (86%) rename {src/test/java/stirling/software/SPDF => common/src/test/java/stirling/software/common}/service/CustomPDFDocumentFactoryTest.java (93%) rename {src/test/java/stirling/software/SPDF => common/src/test/java/stirling/software/common}/service/SpyPDFDocumentFactory.java (95%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/CheckProgramInstallTest.java (98%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/CustomHtmlSanitizerTest.java (99%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/ErrorUtilsTest.java (97%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/FileInfoTest.java (92%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/FileMonitorTest.java (98%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/FileToPdfTest.java (96%) create mode 100644 common/src/test/java/stirling/software/common/util/GeneralUtilAdditionalTest.java rename src/test/java/stirling/software/SPDF/utils/GeneralUtilsTest.java => common/src/test/java/stirling/software/common/util/GeneralUtilTest.java (59%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/ImageProcessingUtilsTest.java (98%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/PDFToFileTest.java (99%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/PdfUtilsTest.java (96%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/ProcessExecutorTest.java (98%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/PropertyConfigsTest.java (98%) rename common/src/test/java/stirling/software/common/util/{ValidatorTest.java => ProviderUtilTest.java} (74%) create mode 100644 common/src/test/java/stirling/software/common/util/RequestUriUtilTest.java rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/UIScalingTest.java (99%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/UrlUtilsTest.java (99%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/WebResponseUtilsTest.java (99%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/misc/CustomColorReplaceStrategyTest.java (95%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/misc/HighContrastColorReplaceDeciderTest.java (95%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/misc/InvertFullColorStrategyTest.java (98%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/misc/PdfTextStripperCustomTest.java (97%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/misc/ReplaceAndInvertColorStrategyTest.java (96%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/propertyeditor/StringToArrayListPropertyEditorTest.java (97%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/propertyeditor/StringToMapPropertyEditorTest.java (98%) rename {src => common/src}/test/resources/example.pdf (100%) rename {common/src/main/java/stirling/software/common/configuration => src/main/java/stirling/software/SPDF/config/security/database}/DatabaseConfig.java (97%) rename {common/src/test/java/stirling/software/common/configuration => src/test/java/stirling/software/SPDF/config/security/database}/DatabaseConfigTest.java (98%) delete mode 100644 src/test/java/stirling/software/SPDF/utils/GeneralUtilsAdditionalTest.java delete mode 100644 src/test/java/stirling/software/SPDF/utils/RequestUriUtilsTest.java diff --git a/build.gradle b/build.gradle index 5e2c52338..ad82dfabb 100644 --- a/build.gradle +++ b/build.gradle @@ -421,7 +421,6 @@ dependencies { 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' @@ -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/build.gradle b/common/build.gradle index 41f738094..64b98b88b 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'stirling.software' -version = '0.45.6' +version = '0.46.2' ext { lombokVersion = "1.18.38" @@ -30,17 +30,23 @@ dependencyManagement { } dependencies { - implementation "org.springframework.boot:spring-boot-starter-web" - implementation "org.springframework.boot:spring-boot-starter-thymeleaf" + 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 platform('org.junit:junit-bom:5.10.0') testImplementation "org.springframework.boot:spring-boot-starter-test" - testImplementation 'org.junit.jupiter:junit-jupiter' -} - -test { - useJUnitPlatform() + 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/common/src/main/java/stirling/software/common/configuration/AppConfig.java b/common/src/main/java/stirling/software/common/configuration/AppConfig.java index 22c7105d4..58a60ed1c 100644 --- a/common/src/main/java/stirling/software/common/configuration/AppConfig.java +++ b/common/src/main/java/stirling/software/common/configuration/AppConfig.java @@ -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,9 +23,6 @@ import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.thymeleaf.spring6.SpringTemplateEngine; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import stirling.software.common.model.ApplicationProperties; @Lazy @@ -32,9 +31,21 @@ import stirling.software.common.model.ApplicationProperties; @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") 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 97% rename from src/main/java/stirling/software/SPDF/config/ConfigInitializer.java rename to common/src/main/java/stirling/software/common/configuration/ConfigInitializer.java index 6c46526aa..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,7 +13,7 @@ import java.util.List; import lombok.extern.slf4j.Slf4j; -import stirling.software.common.configuration.InstallationPathConfig; +import stirling.software.common.util.YamlHelper; /** * A naive, line-based approach to merging "settings.yml" with "settings.yml.template" while @@ -78,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/common/src/main/java/stirling/software/common/configuration/InstallationPathConfig.java b/common/src/main/java/stirling/software/common/configuration/InstallationPathConfig.java index e3293e3bd..9d9d66e39 100644 --- a/common/src/main/java/stirling/software/common/configuration/InstallationPathConfig.java +++ b/common/src/main/java/stirling/software/common/configuration/InstallationPathConfig.java @@ -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 96% rename from src/main/java/stirling/software/SPDF/config/RuntimePathConfig.java rename to common/src/main/java/stirling/software/common/configuration/RuntimePathConfig.java index 1ceabb7b6..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,7 +9,6 @@ import org.springframework.context.annotation.Configuration; import lombok.Getter; import lombok.extern.slf4j.Slf4j; -import stirling.software.common.configuration.InstallationPathConfig; import stirling.software.common.model.ApplicationProperties; import stirling.software.common.model.ApplicationProperties.CustomPaths.Operations; import stirling.software.common.model.ApplicationProperties.CustomPaths.Pipeline; diff --git a/common/src/main/java/stirling/software/common/configuration/YamlConfig.java b/common/src/main/java/stirling/software/common/configuration/YamlConfig.java deleted file mode 100644 index b03b184ca..000000000 --- a/common/src/main/java/stirling/software/common/configuration/YamlConfig.java +++ /dev/null @@ -1,45 +0,0 @@ -package stirling.software.common.configuration; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.PropertySource; -import org.springframework.core.io.FileSystemResource; -import org.springframework.core.io.Resource; -import org.springframework.core.io.support.EncodedResource; - -@Slf4j -@Configuration -public class YamlConfig { - - @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; - } - -} 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/common/src/main/java/stirling/software/common/model/ApplicationProperties.java b/common/src/main/java/stirling/software/common/model/ApplicationProperties.java index ce5a57c71..33ec5e217 100644 --- a/common/src/main/java/stirling/software/common/model/ApplicationProperties.java +++ b/common/src/main/java/stirling/software/common/model/ApplicationProperties.java @@ -22,11 +22,11 @@ import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.springframework.stereotype.Component; import stirling.software.common.model.exception.UnsupportedProviderException; -import stirling.software.common.model.provider.GitHubProvider; -import stirling.software.common.model.provider.GoogleProvider; -import stirling.software.common.model.provider.KeycloakProvider; -import stirling.software.common.model.provider.Provider; -import stirling.software.common.util.Validator; +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.ValidationUtil; @Data @Component @@ -208,11 +208,11 @@ public class ApplicationProperties { } public boolean isSettingsValid() { - return !Validator.isStringEmpty(this.getIssuer()) - && !Validator.isStringEmpty(this.getClientId()) - && !Validator.isStringEmpty(this.getClientSecret()) - && !Validator.isCollectionEmpty(this.getScopes()) - && !Validator.isStringEmpty(this.getUseAsUsername()); + return !ValidationUtil.isStringEmpty(this.getIssuer()) + && !ValidationUtil.isStringEmpty(this.getClientId()) + && !ValidationUtil.isStringEmpty(this.getClientSecret()) + && !ValidationUtil.isCollectionEmpty(this.getScopes()) + && !ValidationUtil.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/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/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/common/src/main/java/stirling/software/common/model/exception/UnsupportedUsernameAttribute.java b/common/src/main/java/stirling/software/common/model/exception/UnsupportedUsernameAttribute.java deleted file mode 100644 index c639dda60..000000000 --- a/common/src/main/java/stirling/software/common/model/exception/UnsupportedUsernameAttribute.java +++ /dev/null @@ -1,7 +0,0 @@ -package stirling.software.common.model.exception; - -public class UnsupportedUsernameAttribute extends RuntimeException { - public UnsupportedUsernameAttribute(String message) { - super(message); - } -} diff --git a/common/src/main/java/stirling/software/common/model/provider/GitHubProvider.java b/common/src/main/java/stirling/software/common/model/oauth2/GitHubProvider.java similarity index 97% rename from common/src/main/java/stirling/software/common/model/provider/GitHubProvider.java rename to common/src/main/java/stirling/software/common/model/oauth2/GitHubProvider.java index 35fe9c1f1..a62eb21fb 100644 --- a/common/src/main/java/stirling/software/common/model/provider/GitHubProvider.java +++ b/common/src/main/java/stirling/software/common/model/oauth2/GitHubProvider.java @@ -1,4 +1,4 @@ -package stirling.software.common.model.provider; +package stirling.software.common.model.oauth2; import java.util.ArrayList; import java.util.Collection; diff --git a/common/src/main/java/stirling/software/common/model/provider/GoogleProvider.java b/common/src/main/java/stirling/software/common/model/oauth2/GoogleProvider.java similarity index 97% rename from common/src/main/java/stirling/software/common/model/provider/GoogleProvider.java rename to common/src/main/java/stirling/software/common/model/oauth2/GoogleProvider.java index b3e5b0c8b..34ce9d106 100644 --- a/common/src/main/java/stirling/software/common/model/provider/GoogleProvider.java +++ b/common/src/main/java/stirling/software/common/model/oauth2/GoogleProvider.java @@ -1,4 +1,4 @@ -package stirling.software.common.model.provider; +package stirling.software.common.model.oauth2; import java.util.ArrayList; import java.util.Collection; diff --git a/common/src/main/java/stirling/software/common/model/provider/KeycloakProvider.java b/common/src/main/java/stirling/software/common/model/oauth2/KeycloakProvider.java similarity index 97% rename from common/src/main/java/stirling/software/common/model/provider/KeycloakProvider.java rename to common/src/main/java/stirling/software/common/model/oauth2/KeycloakProvider.java index 8b483b4a4..420230a0e 100644 --- a/common/src/main/java/stirling/software/common/model/provider/KeycloakProvider.java +++ b/common/src/main/java/stirling/software/common/model/oauth2/KeycloakProvider.java @@ -1,4 +1,4 @@ -package stirling.software.common.model.provider; +package stirling.software.common.model.oauth2; import java.util.ArrayList; import java.util.Collection; diff --git a/common/src/main/java/stirling/software/common/model/provider/Provider.java b/common/src/main/java/stirling/software/common/model/oauth2/Provider.java similarity index 93% rename from common/src/main/java/stirling/software/common/model/provider/Provider.java rename to common/src/main/java/stirling/software/common/model/oauth2/Provider.java index 280939be9..c5d91efdb 100644 --- a/common/src/main/java/stirling/software/common/model/provider/Provider.java +++ b/common/src/main/java/stirling/software/common/model/oauth2/Provider.java @@ -1,4 +1,4 @@ -package stirling.software.common.model.provider; +package stirling.software.common.model.oauth2; import java.util.ArrayList; import java.util.Arrays; @@ -6,7 +6,7 @@ import java.util.Collection; import lombok.Data; import lombok.NoArgsConstructor; import stirling.software.common.model.enumeration.UsernameAttribute; -import stirling.software.common.model.exception.UnsupportedUsernameAttribute; +import stirling.software.common.model.exception.UnsupportedClaimException; import static stirling.software.common.model.enumeration.UsernameAttribute.EMAIL; @Data @@ -80,7 +80,7 @@ public class Provider { return usernameAttribute; } default -> - throw new UnsupportedUsernameAttribute( + throw new UnsupportedClaimException( String.format(EXCEPTION_MESSAGE, usernameAttribute, clientName)); } } @@ -91,7 +91,7 @@ public class Provider { return usernameAttribute; } default -> - throw new UnsupportedUsernameAttribute( + throw new UnsupportedClaimException( String.format(EXCEPTION_MESSAGE, usernameAttribute, clientName)); } } @@ -102,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/common/src/main/java/stirling/software/common/service/PdfMetadataService.java b/common/src/main/java/stirling/software/common/service/PdfMetadataService.java new file mode 100644 index 000000000..621e19d46 --- /dev/null +++ b/common/src/main/java/stirling/software/common/service/PdfMetadataService.java @@ -0,0 +1,113 @@ +package stirling.software.common.service; + +import java.util.Calendar; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; + +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.PdfMetadata; + +@Service +public class PdfMetadataService { + + private final ApplicationProperties applicationProperties; + private final String stirlingPDFLabel; + private final UserServiceInterface userService; + private final boolean runningProOrHigher; + + public PdfMetadataService( + ApplicationProperties applicationProperties, + @Qualifier("StirlingPDFLabel") String stirlingPDFLabel, + @Qualifier("runningProOrHigher") boolean runningProOrHigher, + @Autowired(required = false) UserServiceInterface userService) { + this.applicationProperties = applicationProperties; + this.stirlingPDFLabel = stirlingPDFLabel; + this.userService = userService; + this.runningProOrHigher = runningProOrHigher; + } + + public PdfMetadata extractMetadataFromPdf(PDDocument pdf) { + return PdfMetadata.builder() + .author(pdf.getDocumentInformation().getAuthor()) + .producer(pdf.getDocumentInformation().getProducer()) + .title(pdf.getDocumentInformation().getTitle()) + .creator(pdf.getDocumentInformation().getCreator()) + .subject(pdf.getDocumentInformation().getSubject()) + .keywords(pdf.getDocumentInformation().getKeywords()) + .creationDate(pdf.getDocumentInformation().getCreationDate()) + .modificationDate(pdf.getDocumentInformation().getModificationDate()) + .build(); + } + + public void setDefaultMetadata(PDDocument pdf) { + PdfMetadata metadata = extractMetadataFromPdf(pdf); + setMetadataToPdf(pdf, metadata); + } + + public void setMetadataToPdf(PDDocument pdf, PdfMetadata pdfMetadata) { + setMetadataToPdf(pdf, pdfMetadata, false); + } + + public void setMetadataToPdf(PDDocument pdf, PdfMetadata pdfMetadata, boolean newlyCreated) { + if (newlyCreated || pdfMetadata.getCreationDate() == null) { + setNewDocumentMetadata(pdf, pdfMetadata); + } + setCommonMetadata(pdf, pdfMetadata); + } + + private void setNewDocumentMetadata(PDDocument pdf, PdfMetadata pdfMetadata) { + + String creator = stirlingPDFLabel; + + if (applicationProperties + .getPremium() + .getProFeatures() + .getCustomMetadata() + .isAutoUpdateMetadata() + && runningProOrHigher) { + + creator = + applicationProperties + .getPremium() + .getProFeatures() + .getCustomMetadata() + .getCreator(); + pdf.getDocumentInformation().setProducer(stirlingPDFLabel); + } + + pdf.getDocumentInformation().setCreator(creator); + pdf.getDocumentInformation().setCreationDate(Calendar.getInstance()); + } + + private void setCommonMetadata(PDDocument pdf, PdfMetadata pdfMetadata) { + String title = pdfMetadata.getTitle(); + pdf.getDocumentInformation().setTitle(title); + pdf.getDocumentInformation().setProducer(stirlingPDFLabel); + pdf.getDocumentInformation().setSubject(pdfMetadata.getSubject()); + pdf.getDocumentInformation().setKeywords(pdfMetadata.getKeywords()); + pdf.getDocumentInformation().setModificationDate(Calendar.getInstance()); + + String author = pdfMetadata.getAuthor(); + if (applicationProperties + .getPremium() + .getProFeatures() + .getCustomMetadata() + .isAutoUpdateMetadata() + && runningProOrHigher) { + author = + applicationProperties + .getPremium() + .getProFeatures() + .getCustomMetadata() + .getAuthor(); + + if (userService != null) { + author = author.replace("username", userService.getCurrentUsername()); + } + } + pdf.getDocumentInformation().setAuthor(author); + } +} 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 6b9b2eaef..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,7 +25,6 @@ import org.springframework.stereotype.Service; import com.posthog.java.PostHog; -import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface; import stirling.software.common.model.ApplicationProperties; @Service @@ -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/common/src/main/java/stirling/software/common/service/UserServiceInterface.java b/common/src/main/java/stirling/software/common/service/UserServiceInterface.java new file mode 100644 index 000000000..d4cc25dc0 --- /dev/null +++ b/common/src/main/java/stirling/software/common/service/UserServiceInterface.java @@ -0,0 +1,9 @@ +package stirling.software.common.service; + +public interface UserServiceInterface { + String getApiKeyForUser(String username); + + String getCurrentUsername(); + + long getTotalUsersCount(); +} 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/GeneralUtil.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/GeneralUtil.java index 2fe76b0c0..f716dcee8 100644 --- a/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java +++ b/common/src/main/java/stirling/software/common/util/GeneralUtil.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.io.File; import java.io.FileOutputStream; @@ -27,11 +27,10 @@ import io.github.pixee.security.Urls; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.config.YamlHelper; import stirling.software.common.configuration.InstallationPathConfig; @Slf4j -public class GeneralUtils { +public class GeneralUtil { public static File convertMultipartFileToFile(MultipartFile multipartFile) throws IOException { File tempFile = Files.createTempFile("temp", null).toFile(); 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 98% 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..acfbe0ce4 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 { @@ -85,7 +84,7 @@ public class PdfUtils { public static boolean hasImages(PDDocument document, String pagesToCheck) throws IOException { String[] pageOrderArr = pagesToCheck.split(","); List pageList = - GeneralUtils.parsePageList(pageOrderArr, document.getNumberOfPages()); + GeneralUtil.parsePageList(pageOrderArr, document.getNumberOfPages()); for (int pageNumber : pageList) { PDPage page = document.getPage(pageNumber); @@ -101,7 +100,7 @@ public class PdfUtils { throws IOException { String[] pageOrderArr = pageNumbersToCheck.split(","); List pageList = - GeneralUtils.parsePageList(pageOrderArr, document.getNumberOfPages()); + GeneralUtil.parsePageList(pageOrderArr, document.getNumberOfPages()); for (int pageNumber : pageList) { PDPage page = document.getPage(pageNumber); 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 c95c5676e..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; 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/common/src/main/java/stirling/software/common/util/Validator.java b/common/src/main/java/stirling/software/common/util/ProviderUtil.java similarity index 57% rename from common/src/main/java/stirling/software/common/util/Validator.java rename to common/src/main/java/stirling/software/common/util/ProviderUtil.java index 6237095e7..ee570346d 100644 --- a/common/src/main/java/stirling/software/common/util/Validator.java +++ b/common/src/main/java/stirling/software/common/util/ProviderUtil.java @@ -1,9 +1,10 @@ package stirling.software.common.util; -import java.util.Collection; -import stirling.software.common.model.provider.Provider; +import stirling.software.common.model.oauth2.Provider; +import static stirling.software.common.util.ValidationUtil.isCollectionEmpty; +import static stirling.software.common.util.ValidationUtil.isStringEmpty; -public class Validator { +public class ProviderUtil { public static boolean validateProvider(Provider provider) { if (provider == null) { @@ -24,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/RequestUriUtil.java similarity index 96% rename from src/main/java/stirling/software/SPDF/utils/RequestUriUtils.java rename to common/src/main/java/stirling/software/common/util/RequestUriUtil.java index 504fe64e1..4cf6d6034 100644 --- a/src/main/java/stirling/software/SPDF/utils/RequestUriUtils.java +++ b/common/src/main/java/stirling/software/common/util/RequestUriUtil.java @@ -1,14 +1,12 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; -public class RequestUriUtils { +public class RequestUriUtil { 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/ValidationUtil.java b/common/src/main/java/stirling/software/common/util/ValidationUtil.java new file mode 100644 index 000000000..8646f3bb6 --- /dev/null +++ b/common/src/main/java/stirling/software/common/util/ValidationUtil.java @@ -0,0 +1,14 @@ +package stirling.software.common.util; + +import java.util.Collection; + +public class ValidationUtil { + + 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/common/src/test/java/stirling/software/common/util/GeneralUtilAdditionalTest.java b/common/src/test/java/stirling/software/common/util/GeneralUtilAdditionalTest.java new file mode 100644 index 000000000..8a8aaf770 --- /dev/null +++ b/common/src/test/java/stirling/software/common/util/GeneralUtilAdditionalTest.java @@ -0,0 +1,41 @@ +package stirling.software.common.util; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class GeneralUtilAdditionalTest { + + @Test + void testConvertSizeToBytes() { + assertEquals(1024L, GeneralUtil.convertSizeToBytes("1KB")); + assertEquals(1024L * 1024, GeneralUtil.convertSizeToBytes("1MB")); + assertEquals(1024L * 1024 * 1024, GeneralUtil.convertSizeToBytes("1GB")); + assertEquals(100L * 1024 * 1024, GeneralUtil.convertSizeToBytes("100")); + assertNull(GeneralUtil.convertSizeToBytes("invalid")); + assertNull(GeneralUtil.convertSizeToBytes(null)); + } + + @Test + void testFormatBytes() { + assertEquals("512 B", GeneralUtil.formatBytes(512)); + assertEquals("1.00 KB", GeneralUtil.formatBytes(1024)); + assertEquals("1.00 MB", GeneralUtil.formatBytes(1024L * 1024)); + assertEquals("1.00 GB", GeneralUtil.formatBytes(1024L * 1024 * 1024)); + } + + @Test + void testURLHelpersAndUUID() { + assertTrue(GeneralUtil.isValidURL("https://example.com")); + assertFalse(GeneralUtil.isValidURL("htp:/bad")); + assertFalse(GeneralUtil.isURLReachable("http://localhost")); + assertFalse(GeneralUtil.isURLReachable("ftp://example.com")); + + assertTrue(GeneralUtil.isValidUUID("123e4567-e89b-12d3-a456-426614174000")); + assertFalse(GeneralUtil.isValidUUID("not-a-uuid")); + + assertFalse(GeneralUtil.isVersionHigher(null, "1.0")); + assertTrue(GeneralUtil.isVersionHigher("2.0", "1.9")); + assertFalse(GeneralUtil.isVersionHigher("1.0", "1.0.1")); + } +} diff --git a/src/test/java/stirling/software/SPDF/utils/GeneralUtilsTest.java b/common/src/test/java/stirling/software/common/util/GeneralUtilTest.java similarity index 59% rename from src/test/java/stirling/software/SPDF/utils/GeneralUtilsTest.java rename to common/src/test/java/stirling/software/common/util/GeneralUtilTest.java index 72389130d..b2a1c8c79 100644 --- a/src/test/java/stirling/software/SPDF/utils/GeneralUtilsTest.java +++ b/common/src/test/java/stirling/software/common/util/GeneralUtilTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -6,152 +6,152 @@ import java.util.List; import org.junit.jupiter.api.Test; -public class GeneralUtilsTest { +public class GeneralUtilTest { @Test void testParsePageListWithAll() { - List result = GeneralUtils.parsePageList(new String[] {"all"}, 5, false); + List result = GeneralUtil.parsePageList(new String[] {"all"}, 5, false); assertEquals(List.of(0, 1, 2, 3, 4), result, "'All' keyword should return all pages."); } @Test void testParsePageListWithAllOneBased() { - List result = GeneralUtils.parsePageList(new String[] {"all"}, 5, true); + List result = GeneralUtil.parsePageList(new String[] {"all"}, 5, true); assertEquals(List.of(1, 2, 3, 4, 5), result, "'All' keyword should return all pages."); } @Test void nFunc() { - List result = GeneralUtils.parsePageList(new String[] {"n"}, 5, true); + List result = GeneralUtil.parsePageList(new String[] {"n"}, 5, true); assertEquals(List.of(1, 2, 3, 4, 5), result, "'n' keyword should return all pages."); } @Test void nFuncAdvanced() { - List result = GeneralUtils.parsePageList(new String[] {"4n"}, 9, true); + List result = GeneralUtil.parsePageList(new String[] {"4n"}, 9, true); // skip 0 as not valid assertEquals(List.of(4, 8), result, "'All' keyword should return all pages."); } @Test void nFuncAdvancedZero() { - List result = GeneralUtils.parsePageList(new String[] {"4n"}, 9, false); + List result = GeneralUtil.parsePageList(new String[] {"4n"}, 9, false); // skip 0 as not valid assertEquals(List.of(3, 7), result, "'All' keyword should return all pages."); } @Test void nFuncAdvanced2() { - List result = GeneralUtils.parsePageList(new String[] {"4n-1"}, 9, true); + List result = GeneralUtil.parsePageList(new String[] {"4n-1"}, 9, true); // skip -1 as not valid assertEquals(List.of(3, 7), result, "4n-1 should do (0-1), (4-1), (8-1)"); } @Test void nFuncAdvanced3() { - List result = GeneralUtils.parsePageList(new String[] {"4n+1"}, 9, true); + List result = GeneralUtil.parsePageList(new String[] {"4n+1"}, 9, true); assertEquals(List.of(5, 9), result, "'All' keyword should return all pages."); } @Test void nFunc_spaces() { - List result = GeneralUtils.parsePageList(new String[] {"n + 1"}, 9, true); + List result = GeneralUtil.parsePageList(new String[] {"n + 1"}, 9, true); assertEquals(List.of(2, 3, 4, 5, 6, 7, 8, 9), result); } @Test void nFunc_consecutive_Ns_nnn() { - List result = GeneralUtils.parsePageList(new String[] {"nnn"}, 9, true); + List result = GeneralUtil.parsePageList(new String[] {"nnn"}, 9, true); assertEquals(List.of(1, 8), result); } @Test void nFunc_consecutive_Ns_nn() { - List result = GeneralUtils.parsePageList(new String[] {"nn"}, 9, true); + List result = GeneralUtil.parsePageList(new String[] {"nn"}, 9, true); assertEquals(List.of(1, 4, 9), result); } @Test void nFunc_opening_closing_round_brackets() { - List result = GeneralUtils.parsePageList(new String[] {"(n-1)(n-2)"}, 9, true); + List result = GeneralUtil.parsePageList(new String[] {"(n-1)(n-2)"}, 9, true); assertEquals(List.of(2, 6), result); } @Test void nFunc_opening_round_brackets() { - List result = GeneralUtils.parsePageList(new String[] {"2(n-1)"}, 9, true); + List result = GeneralUtil.parsePageList(new String[] {"2(n-1)"}, 9, true); assertEquals(List.of(2, 4, 6, 8), result); } @Test void nFunc_opening_round_brackets_n() { - List result = GeneralUtils.parsePageList(new String[] {"n(n-1)"}, 9, true); + List result = GeneralUtil.parsePageList(new String[] {"n(n-1)"}, 9, true); assertEquals(List.of(2, 6), result); } @Test void nFunc_closing_round_brackets() { - List result = GeneralUtils.parsePageList(new String[] {"(n-1)2"}, 9, true); + List result = GeneralUtil.parsePageList(new String[] {"(n-1)2"}, 9, true); assertEquals(List.of(2, 4, 6, 8), result); } @Test void nFunc_closing_round_brackets_n() { - List result = GeneralUtils.parsePageList(new String[] {"(n-1)n"}, 9, true); + List result = GeneralUtil.parsePageList(new String[] {"(n-1)n"}, 9, true); assertEquals(List.of(2, 6), result); } @Test void nFunc_function_surrounded_with_brackets() { - List result = GeneralUtils.parsePageList(new String[] {"(n-1)"}, 9, true); + List result = GeneralUtil.parsePageList(new String[] {"(n-1)"}, 9, true); assertEquals(List.of(1, 2, 3, 4, 5, 6, 7, 8), result); } @Test void nFuncAdvanced4() { - List result = GeneralUtils.parsePageList(new String[] {"3+2n"}, 9, true); + List result = GeneralUtil.parsePageList(new String[] {"3+2n"}, 9, true); assertEquals(List.of(5, 7, 9), result, "'All' keyword should return all pages."); } @Test void nFuncAdvancedZerobased() { - List result = GeneralUtils.parsePageList(new String[] {"4n"}, 9, false); + List result = GeneralUtil.parsePageList(new String[] {"4n"}, 9, false); assertEquals(List.of(3, 7), result, "'All' keyword should return all pages."); } @Test void nFuncAdvanced2Zerobased() { - List result = GeneralUtils.parsePageList(new String[] {"4n-1"}, 9, false); + List result = GeneralUtil.parsePageList(new String[] {"4n-1"}, 9, false); assertEquals(List.of(2, 6), result, "'All' keyword should return all pages."); } @Test void testParsePageListWithRangeOneBasedOutput() { - List result = GeneralUtils.parsePageList(new String[] {"1-3"}, 5, true); + List result = GeneralUtil.parsePageList(new String[] {"1-3"}, 5, true); assertEquals(List.of(1, 2, 3), result, "Range should be parsed correctly."); } @Test void testParsePageListWithRangeZeroBaseOutput() { - List result = GeneralUtils.parsePageList(new String[] {"1-3"}, 5, false); + List result = GeneralUtil.parsePageList(new String[] {"1-3"}, 5, false); assertEquals(List.of(0, 1, 2), result, "Range should be parsed correctly."); } @Test void testParsePageListWithRangeOneBasedOutputFull() { - List result = GeneralUtils.parsePageList(new String[] {"1,3,7-8"}, 8, true); + List result = GeneralUtil.parsePageList(new String[] {"1,3,7-8"}, 8, true); assertEquals(List.of(1, 3, 7, 8), result, "Range should be parsed correctly."); } @Test void testParsePageListWithRangeOneBasedOutputFullOutOfRange() { - List result = GeneralUtils.parsePageList(new String[] {"1,3,7-8"}, 5, true); + List result = GeneralUtil.parsePageList(new String[] {"1,3,7-8"}, 5, true); assertEquals(List.of(1, 3), result, "Range should be parsed correctly."); } @Test void testParsePageListWithRangeZeroBaseOutputFull() { - List result = GeneralUtils.parsePageList(new String[] {"1,3,7-8"}, 8, false); + List result = GeneralUtil.parsePageList(new String[] {"1,3,7-8"}, 8, false); assertEquals(List.of(0, 2, 6, 7), result, "Range should be parsed correctly."); } } 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 96% rename from src/test/java/stirling/software/SPDF/utils/PdfUtilsTest.java rename to common/src/test/java/stirling/software/common/util/PdfUtilsTest.java index 175f0650a..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.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/common/src/test/java/stirling/software/common/util/ValidatorTest.java b/common/src/test/java/stirling/software/common/util/ProviderUtilTest.java similarity index 74% rename from common/src/test/java/stirling/software/common/util/ValidatorTest.java rename to common/src/test/java/stirling/software/common/util/ProviderUtilTest.java index ea49d917b..231bc3760 100644 --- a/common/src/test/java/stirling/software/common/util/ValidatorTest.java +++ b/common/src/test/java/stirling/software/common/util/ProviderUtilTest.java @@ -2,23 +2,21 @@ 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.Mockito; import org.mockito.junit.jupiter.MockitoExtension; import stirling.software.common.model.enumeration.UsernameAttribute; -import stirling.software.common.model.provider.GitHubProvider; -import stirling.software.common.model.provider.GoogleProvider; -import stirling.software.common.model.provider.Provider; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +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 ProviderUtilTest { @Test void testSuccessfulValidation() { @@ -28,13 +26,13 @@ class ValidatorTest { when(provider.getClientSecret()).thenReturn("clientSecret"); when(provider.getScopes()).thenReturn(List.of("read:user")); - assertTrue(Validator.validateProvider(provider)); + Assertions.assertTrue(ProviderUtil.validateProvider(provider)); } @ParameterizedTest @MethodSource("providerParams") void testUnsuccessfulValidation(Provider provider) { - assertFalse(Validator.validateProvider(provider)); + Assertions.assertFalse(ProviderUtil.validateProvider(provider)); } public static Stream providerParams() { diff --git a/common/src/test/java/stirling/software/common/util/RequestUriUtilTest.java b/common/src/test/java/stirling/software/common/util/RequestUriUtilTest.java new file mode 100644 index 000000000..b2d74c10c --- /dev/null +++ b/common/src/test/java/stirling/software/common/util/RequestUriUtilTest.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 RequestUriUtilTest { + + @Test + void testIsStaticResource() { + // Test static resources without context path + assertTrue( + RequestUriUtil.isStaticResource("/css/styles.css"), "CSS files should be static"); + assertTrue(RequestUriUtil.isStaticResource("/js/script.js"), "JS files should be static"); + assertTrue( + RequestUriUtil.isStaticResource("/images/logo.png"), + "Image files should be static"); + assertTrue( + RequestUriUtil.isStaticResource("/public/index.html"), + "Public files should be static"); + assertTrue( + RequestUriUtil.isStaticResource("/pdfjs/pdf.worker.js"), + "PDF.js files should be static"); + assertTrue( + RequestUriUtil.isStaticResource("/api/v1/info/status"), + "API status should be static"); + assertTrue( + RequestUriUtil.isStaticResource("/some-path/icon.svg"), + "SVG files should be static"); + assertTrue(RequestUriUtil.isStaticResource("/login"), "Login page should be static"); + assertTrue(RequestUriUtil.isStaticResource("/error"), "Error page should be static"); + + // Test non-static resources + assertFalse( + RequestUriUtil.isStaticResource("/api/v1/users"), + "API users should not be static"); + assertFalse( + RequestUriUtil.isStaticResource("/api/v1/orders"), + "API orders should not be static"); + assertFalse(RequestUriUtil.isStaticResource("/"), "Root path should not be static"); + assertFalse( + RequestUriUtil.isStaticResource("/register"), + "Register page should not be static"); + assertFalse( + RequestUriUtil.isStaticResource("/api/v1/products"), + "API products should not be static"); + } + + @Test + void testIsStaticResourceWithContextPath() { + String contextPath = "/myapp"; + + // Test static resources with context path + assertTrue( + RequestUriUtil.isStaticResource(contextPath, contextPath + "/css/styles.css"), + "CSS with context path should be static"); + assertTrue( + RequestUriUtil.isStaticResource(contextPath, contextPath + "/js/script.js"), + "JS with context path should be static"); + assertTrue( + RequestUriUtil.isStaticResource(contextPath, contextPath + "/images/logo.png"), + "Images with context path should be static"); + assertTrue( + RequestUriUtil.isStaticResource(contextPath, contextPath + "/login"), + "Login with context path should be static"); + + // Test non-static resources with context path + assertFalse( + RequestUriUtil.isStaticResource(contextPath, contextPath + "/api/v1/users"), + "API users with context path should not be static"); + assertFalse( + RequestUriUtil.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( + RequestUriUtil.isStaticResource(path), + "Files with specific extensions should be static regardless of path"); + } + + @Test + void testIsTrackableResource() { + // Test non-trackable resources (returns false) + assertFalse( + RequestUriUtil.isTrackableResource("/js/script.js"), + "JS files should not be trackable"); + assertFalse( + RequestUriUtil.isTrackableResource("/v1/api-docs"), + "API docs should not be trackable"); + assertFalse( + RequestUriUtil.isTrackableResource("robots.txt"), + "robots.txt should not be trackable"); + assertFalse( + RequestUriUtil.isTrackableResource("/images/logo.png"), + "Images should not be trackable"); + assertFalse( + RequestUriUtil.isTrackableResource("/styles.css"), + "CSS files should not be trackable"); + assertFalse( + RequestUriUtil.isTrackableResource("/script.js.map"), + "Map files should not be trackable"); + assertFalse( + RequestUriUtil.isTrackableResource("/icon.svg"), + "SVG files should not be trackable"); + assertFalse( + RequestUriUtil.isTrackableResource("/popularity.txt"), + "Popularity file should not be trackable"); + assertFalse( + RequestUriUtil.isTrackableResource("/script.js"), + "JS files should not be trackable"); + assertFalse( + RequestUriUtil.isTrackableResource("/swagger/index.html"), + "Swagger files should not be trackable"); + assertFalse( + RequestUriUtil.isTrackableResource("/api/v1/info/status"), + "API info should not be trackable"); + assertFalse( + RequestUriUtil.isTrackableResource("/site.webmanifest"), + "Webmanifest should not be trackable"); + assertFalse( + RequestUriUtil.isTrackableResource("/fonts/font.woff"), + "Fonts should not be trackable"); + assertFalse( + RequestUriUtil.isTrackableResource("/pdfjs/viewer.js"), + "PDF.js files should not be trackable"); + + // Test trackable resources (returns true) + assertTrue(RequestUriUtil.isTrackableResource("/login"), "Login page should be trackable"); + assertTrue( + RequestUriUtil.isTrackableResource("/register"), + "Register page should be trackable"); + assertTrue( + RequestUriUtil.isTrackableResource("/api/v1/users"), + "API users should be trackable"); + assertTrue(RequestUriUtil.isTrackableResource("/"), "Root path should be trackable"); + assertTrue( + RequestUriUtil.isTrackableResource("/some-other-path"), + "Other paths should be trackable"); + } + + @Test + void testIsTrackableResourceWithContextPath() { + String contextPath = "/myapp"; + + // Test with context path + assertFalse( + RequestUriUtil.isTrackableResource(contextPath, "/js/script.js"), + "JS files should not be trackable with context path"); + assertTrue( + RequestUriUtil.isTrackableResource(contextPath, "/login"), + "Login page should be trackable with context path"); + + // Additional tests with context path + assertFalse( + RequestUriUtil.isTrackableResource(contextPath, "/fonts/custom.woff"), + "Font files should not be trackable with context path"); + assertFalse( + RequestUriUtil.isTrackableResource(contextPath, "/images/header.png"), + "Images should not be trackable with context path"); + assertFalse( + RequestUriUtil.isTrackableResource(contextPath, "/swagger/ui.html"), + "Swagger UI should not be trackable with context path"); + assertTrue( + RequestUriUtil.isTrackableResource(contextPath, "/account/profile"), + "Account page should be trackable with context path"); + assertTrue( + RequestUriUtil.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( + RequestUriUtil.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( + RequestUriUtil.isTrackableResource(path), + "App routes should be trackable: " + path); + } + + @Test + void testEdgeCases() { + // Test with empty strings + assertFalse(RequestUriUtil.isStaticResource("", ""), "Empty path should not be static"); + assertTrue(RequestUriUtil.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(RequestUriUtil.isStaticResource("null"), "String 'null' should not be static"); + + // Test String "null" as a path + boolean isTrackable = RequestUriUtil.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( + RequestUriUtil.isStaticResource("/logo.png"), "PNG (lowercase) should be static"); + assertTrue( + RequestUriUtil.isStaticResource("/icon.svg"), "SVG (lowercase) should be static"); + + // Path with query parameters + assertFalse( + RequestUriUtil.isStaticResource("/api/users?page=1"), + "Path with query params should respect base path"); + assertTrue( + RequestUriUtil.isStaticResource("/images/logo.png?v=123"), + "Static resource with query params should still be static"); + + // Paths with fragments + assertTrue( + RequestUriUtil.isStaticResource("/css/styles.css#section1"), + "CSS with fragment should be static"); + + // Multiple dots in filename + assertTrue( + RequestUriUtil.isStaticResource("/js/jquery.min.js"), + "JS with multiple dots should be static"); + + // Special characters in path + assertTrue( + RequestUriUtil.isStaticResource("/images/user's-photo.png"), + "Path with special chars should be handled correctly"); + } + + @Test + void testComplexPaths() { + // Test complex static resource paths + assertTrue( + RequestUriUtil.isStaticResource("/css/theme/dark/styles.css"), + "Nested CSS should be static"); + assertTrue( + RequestUriUtil.isStaticResource("/fonts/open-sans/bold/font.woff"), + "Nested font should be static"); + assertTrue( + RequestUriUtil.isStaticResource("/js/vendor/jquery/3.5.1/jquery.min.js"), + "Versioned JS should be static"); + + // Test complex paths with context + String contextPath = "/app"; + assertTrue( + RequestUriUtil.isStaticResource( + contextPath, contextPath + "/css/theme/dark/styles.css"), + "Nested CSS with context should be static"); + + // Test boundary cases for isTrackableResource + assertFalse( + RequestUriUtil.isTrackableResource("/js-framework/components"), + "Path starting with js- should not be treated as JS resource"); + assertFalse( + RequestUriUtil.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/src/main/java/stirling/software/SPDF/EE/KeygenLicenseVerifier.java b/src/main/java/stirling/software/SPDF/EE/KeygenLicenseVerifier.java index fae3f4dc5..25e9fefec 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.utils.GeneralUtils; import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.util.GeneralUtil; @Service @Slf4j @@ -765,7 +765,7 @@ public class KeygenLicenseVerifier { } private String generateMachineFingerprint() { - return GeneralUtils.generateMachineFingerprint(); + return GeneralUtil.generateMachineFingerprint(); } /** diff --git a/src/main/java/stirling/software/SPDF/EE/LicenseKeyChecker.java b/src/main/java/stirling/software/SPDF/EE/LicenseKeyChecker.java index e00dfc133..f0cb76a8e 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.utils.GeneralUtils; import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.util.GeneralUtil; @Component @Slf4j @@ -88,7 +88,7 @@ public class LicenseKeyChecker { public void updateLicenseKey(String newKey) throws IOException { applicationProperties.getPremium().setKey(newKey); - GeneralUtils.saveKeyToSettings("EnterpriseEdition.key", newKey); + GeneralUtil.saveKeyToSettings("EnterpriseEdition.key", newKey); checkLicense(); } 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 d2e7ab703..b3f6dd078 100644 --- a/src/main/java/stirling/software/SPDF/SPDFApplication.java +++ b/src/main/java/stirling/software/SPDF/SPDFApplication.java @@ -27,10 +27,10 @@ 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.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 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 732928bed..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.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/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 5a22c5525..8722a2c5f 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.utils.GeneralUtils; import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.util.GeneralUtil; @Component @Slf4j @@ -39,31 +39,31 @@ public class InitialSetup { public void initUUIDKey() throws IOException { String uuid = applicationProperties.getAutomaticallyGenerated().getUUID(); - if (!GeneralUtils.isValidUUID(uuid)) { + if (!GeneralUtil.isValidUUID(uuid)) { // Generating a random UUID as the secret key uuid = UUID.randomUUID().toString(); - GeneralUtils.saveKeyToSettings("AutomaticallyGenerated.UUID", uuid); + GeneralUtil.saveKeyToSettings("AutomaticallyGenerated.UUID", uuid); applicationProperties.getAutomaticallyGenerated().setUUID(uuid); } } public void initSecretKey() throws IOException { String secretKey = applicationProperties.getAutomaticallyGenerated().getKey(); - if (!GeneralUtils.isValidUUID(secretKey)) { + if (!GeneralUtil.isValidUUID(secretKey)) { // Generating a random UUID as the secret key secretKey = UUID.randomUUID().toString(); - GeneralUtils.saveKeyToSettings("AutomaticallyGenerated.key", secretKey); + GeneralUtil.saveKeyToSettings("AutomaticallyGenerated.key", secretKey); applicationProperties.getAutomaticallyGenerated().setKey(secretKey); } } public void initEnableCSRFSecurity() throws IOException { - if (GeneralUtils.isVersionHigher( + if (GeneralUtil.isVersionHigher( "0.36.0", applicationProperties.getAutomaticallyGenerated().getAppVersion())) { Boolean csrf = applicationProperties.getSecurity().getCsrfDisabled(); if (!csrf) { - GeneralUtils.saveKeyToSettings("security.csrfDisabled", false); - GeneralUtils.saveKeyToSettings("system.enableAnalytics", true); + GeneralUtil.saveKeyToSettings("security.csrfDisabled", false); + GeneralUtil.saveKeyToSettings("system.enableAnalytics", true); applicationProperties.getSecurity().setCsrfDisabled(false); } } @@ -74,14 +74,14 @@ public class InitialSetup { String termsUrl = applicationProperties.getLegal().getTermsAndConditions(); if (StringUtils.isEmpty(termsUrl)) { String defaultTermsUrl = "https://www.stirlingpdf.com/terms"; - GeneralUtils.saveKeyToSettings("legal.termsAndConditions", defaultTermsUrl); + GeneralUtil.saveKeyToSettings("legal.termsAndConditions", defaultTermsUrl); applicationProperties.getLegal().setTermsAndConditions(defaultTermsUrl); } // Initialize Privacy Policy String privacyUrl = applicationProperties.getLegal().getPrivacyPolicy(); if (StringUtils.isEmpty(privacyUrl)) { String defaultPrivacyUrl = "https://www.stirlingpdf.com/privacy-policy"; - GeneralUtils.saveKeyToSettings("legal.privacyPolicy", defaultPrivacyUrl); + GeneralUtil.saveKeyToSettings("legal.privacyPolicy", defaultPrivacyUrl); applicationProperties.getLegal().setPrivacyPolicy(defaultPrivacyUrl); } } @@ -95,7 +95,7 @@ public class InitialSetup { appVersion = props.getProperty("version"); } catch (Exception e) { } - GeneralUtils.saveKeyToSettings("AutomaticallyGenerated.appVersion", appVersion); + GeneralUtil.saveKeyToSettings("AutomaticallyGenerated.appVersion", appVersion); applicationProperties.getAutomaticallyGenerated().setAppVersion(appVersion); } } diff --git a/src/main/java/stirling/software/SPDF/config/MetricsFilter.java b/src/main/java/stirling/software/SPDF/config/MetricsFilter.java index 586374cbe..cb0062c26 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.RequestUriUtil; @Component @RequiredArgsConstructor @@ -30,7 +30,7 @@ public class MetricsFilter extends OncePerRequestFilter { throws ServletException, IOException { String uri = request.getRequestURI(); - if (RequestUriUtils.isTrackableResource(request.getContextPath(), uri)) { + if (RequestUriUtil.isTrackableResource(request.getContextPath(), uri)) { HttpSession session = request.getSession(false); String sessionId = (session != null) ? session.getId() : "no-session"; Counter counter = 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 1c7511a7c..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,7 +3,7 @@ package stirling.software.SPDF.config.interfaces; import java.sql.SQLException; import java.util.List; -import stirling.software.SPDF.utils.FileInfo; +import stirling.software.common.model.FileInfo; import stirling.software.common.model.exception.UnsupportedProviderException; public interface DatabaseInterface { 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..345361238 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.RequestUriUtil; @Slf4j public class CustomAuthenticationSuccessHandler @@ -48,7 +48,7 @@ public class CustomAuthenticationSuccessHandler : null; if (savedRequest != null - && !RequestUriUtils.isStaticResource( + && !RequestUriUtil.isStaticResource( request.getContextPath(), savedRequest.getRedirectUrl())) { // Redirect to the original destination super.onAuthenticationSuccess(request, response, authentication); 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 be400aeff..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.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.provider.KeycloakProvider; +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..927d8485b 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.RequestUriUtil; @Slf4j @Component @@ -40,7 +40,7 @@ public class FirstLoginFilter extends OncePerRequestFilter { String requestURI = request.getRequestURI(); String contextPath = request.getContextPath(); // Check if the request is for static resources - boolean isStaticResource = RequestUriUtils.isStaticResource(contextPath, requestURI); + boolean isStaticResource = RequestUriUtil.isStaticResource(contextPath, requestURI); // If it's a static resource, just continue the filter chain and skip the logic below if (isStaticResource) { filterChain.doFilter(request, response); 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..405e0f769 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.RequestUriUtil; @RequiredArgsConstructor public class IPRateLimitingFilter implements Filter { @@ -29,7 +29,7 @@ public class IPRateLimitingFilter implements Filter { String requestURI = httpRequest.getRequestURI(); // Check if the request is for static resources boolean isStaticResource = - RequestUriUtils.isStaticResource(httpRequest.getContextPath(), requestURI); + RequestUriUtil.isStaticResource(httpRequest.getContextPath(), requestURI); // If it's a static resource, just continue the filter chain and skip the logic below if (isStaticResource) { diff --git a/common/src/main/java/stirling/software/common/configuration/DatabaseConfig.java b/src/main/java/stirling/software/SPDF/config/security/database/DatabaseConfig.java similarity index 97% rename from common/src/main/java/stirling/software/common/configuration/DatabaseConfig.java rename to src/main/java/stirling/software/SPDF/config/security/database/DatabaseConfig.java index 2445a9c84..3deeee48a 100644 --- a/common/src/main/java/stirling/software/common/configuration/DatabaseConfig.java +++ b/src/main/java/stirling/software/SPDF/config/security/database/DatabaseConfig.java @@ -1,12 +1,16 @@ -package stirling.software.common.configuration; +package stirling.software.SPDF.config.security.database; import javax.sql.DataSource; -import lombok.Getter; -import lombok.extern.slf4j.Slf4j; + import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +import stirling.software.common.configuration.InstallationPathConfig; import stirling.software.common.model.ApplicationProperties; import stirling.software.common.model.exception.UnsupportedProviderException; 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 fed520789..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 @@ -29,9 +29,9 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.config.interfaces.DatabaseInterface; 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 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 bfe4d71fe..61b198635 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 @@ -20,10 +20,10 @@ import lombok.RequiredArgsConstructor; import stirling.software.SPDF.config.security.LoginAttemptService; import stirling.software.SPDF.config.security.UserService; import stirling.software.SPDF.model.AuthenticationType; -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.RequestUriUtil; @RequiredArgsConstructor public class CustomOAuth2AuthenticationSuccessHandler @@ -56,7 +56,7 @@ public class CustomOAuth2AuthenticationSuccessHandler : null; if (savedRequest != null - && !RequestUriUtils.isStaticResource(contextPath, savedRequest.getRedirectUrl())) { + && !RequestUriUtil.isStaticResource(contextPath, savedRequest.getRedirectUrl())) { // Redirect to the original destination super.onAuthenticationSuccess(request, response, authentication); } else { 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 0cb6bf3c6..1879ed1d8 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,8 +1,8 @@ package stirling.software.SPDF.config.security.oauth2; import static org.springframework.security.oauth2.core.AuthorizationGrantType.AUTHORIZATION_CODE; -import static stirling.software.common.util.Validator.isStringEmpty; -import static stirling.software.common.util.Validator.validateProvider; +import static stirling.software.common.util.ProviderUtil.validateProvider; +import static stirling.software.common.util.ValidationUtil.isStringEmpty; import java.util.ArrayList; import java.util.HashSet; @@ -32,10 +32,10 @@ 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.provider.GitHubProvider; -import stirling.software.common.model.provider.GoogleProvider; -import stirling.software.common.model.provider.KeycloakProvider; -import stirling.software.common.model.provider.Provider; +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 b1acff1ae..74c0da443 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 @@ -19,10 +19,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.AuthenticationType; -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.RequestUriUtil; @AllArgsConstructor @Slf4j @@ -58,7 +58,7 @@ public class CustomSaml2AuthenticationSuccessHandler savedRequest != null); if (savedRequest != null - && !RequestUriUtils.isStaticResource( + && !RequestUriUtil.isStaticResource( contextPath, savedRequest.getRedirectUrl())) { log.debug( "Valid saved request found, redirecting to original destination: {}", 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..509ef054d 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.GeneralUtil; +import stirling.software.common.util.WebResponseUtils; @RestController @Slf4j @@ -137,7 +137,7 @@ public class MergeController { for (MultipartFile multipartFile : files) { totalSize += multipartFile.getSize(); File tempFile = - GeneralUtils.convertMultipartFileToFile( + GeneralUtil.convertMultipartFileToFile( multipartFile); // Convert MultipartFile to File filesToDelete.add(tempFile); // Add temp file to the list for later deletion mergerUtility.addSource(tempFile); // Add source file to the merger utility 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..c725563b3 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.GeneralUtil; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") @@ -56,7 +56,7 @@ public class PdfOverlayController { try { for (int i = 0; i < overlayFiles.length; i++) { - overlayPdfFiles[i] = GeneralUtils.multipartToFile(overlayFiles[i]); + overlayPdfFiles[i] = GeneralUtil.multipartToFile(overlayFiles[i]); } String mode = request.getOverlayMode(); // "SequentialOverlay", "InterleavedOverlay", 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..356a8490f 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.GeneralUtil; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") @@ -56,7 +56,7 @@ public class RearrangePagesPDFController { String[] pageOrderArr = pagesToDelete.split(","); List pagesToRemove = - GeneralUtils.parsePageList(pageOrderArr, document.getNumberOfPages(), false); + GeneralUtil.parsePageList(pageOrderArr, document.getNumberOfPages(), false); Collections.sort(pagesToRemove); @@ -262,7 +262,7 @@ public class RearrangePagesPDFController { && !"custom".equals(sortType.toLowerCase())) { newPageOrder = processSortTypes(sortType, totalPages, pageOrder); } else { - newPageOrder = GeneralUtils.parsePageList(pageOrderArr, totalPages, false); + newPageOrder = GeneralUtil.parsePageList(pageOrderArr, totalPages, false); } log.info("newPageOrder = " + newPageOrder); log.info("totalPages = " + totalPages); 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 11b14e338..13ee8545f 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.utils.GeneralUtils; import stirling.software.common.configuration.InstallationPathConfig; import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.util.GeneralUtil; @Controller @Tag(name = "Settings", description = "Settings APIs") @@ -40,7 +40,7 @@ public class SettingsController { "Setting has already been set, To adjust please edit " + InstallationPathConfig.getSettingsPath()); } - GeneralUtils.saveKeyToSettings("system.enableAnalytics", enabled); + GeneralUtil.saveKeyToSettings("system.enableAnalytics", enabled); applicationProperties.getSystem().setEnableAnalytics(enabled); return ResponseEntity.ok("Updated"); } 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..dc642dd13 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfByChaptersController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfByChaptersController.java @@ -33,9 +33,9 @@ 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.service.CustomPDFDocumentFactory; +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..2b1ffa6e3 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.GeneralUtil; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") @@ -81,7 +81,7 @@ public class SplitPdfBySizeController { if (type == 0) { log.debug("Processing split by size"); - long maxBytes = GeneralUtils.convertSizeToBytes(value); + long maxBytes = GeneralUtil.convertSizeToBytes(value); log.debug("Max bytes per document: {}", maxBytes); handleSplitBySize(sourceDocument, maxBytes, zipOut, filename); } else if (type == 1) { 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/converters/ConvertHtmlToPDF.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertHtmlToPDF.java index b19f69272..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.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..dd2faa5ea 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.GeneralUtil; +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(); @@ -247,7 +251,7 @@ public class ConvertImgPDFController { // Load the input PDF PDDocument document = pdfDocumentFactory.load(pdfFile); int totalPages = document.getNumberOfPages(); - List newPageOrder = GeneralUtils.parsePageList(pageOrderArr, totalPages, false); + List newPageOrder = GeneralUtil.parsePageList(pageOrderArr, totalPages, false); // Create a new list to hold the pages in the new order List newPages = new ArrayList<>(); 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 8234fce45..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.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 491b89d6c..c57bf4213 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.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.GeneralUtil; +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") @@ -53,12 +53,12 @@ public class ConvertWebsiteToPDF { throw new IllegalArgumentException("This endpoint has been disabled by the admin."); } // Validate the URL format - if (!URL.matches("^https?://.*") || !GeneralUtils.isValidURL(URL)) { + if (!URL.matches("^https?://.*") || !GeneralUtil.isValidURL(URL)) { throw new IllegalArgumentException("Invalid URL format provided."); } // validate the URL is reachable - if (!GeneralUtils.isURLReachable(URL)) { + if (!GeneralUtil.isURLReachable(URL)) { throw new IllegalArgumentException("URL is not reachable, please provide a valid URL."); } 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..b3d82731a 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.GeneralUtil; +import stirling.software.common.util.ProcessExecutor; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") @@ -111,7 +111,7 @@ public class CompressController { scaleFactor, jpegQuality, convertToGrayscale, - GeneralUtils.formatBytes(originalFileSize)); + GeneralUtil.formatBytes(originalFileSize)); try (PDDocument doc = pdfDocumentFactory.load(pdfFile)) { // Find all unique images in the document @@ -145,8 +145,8 @@ public class CompressController { double overallReduction = 100.0 - ((compressedFileSize * 100.0) / originalFileSize); log.info( "Overall PDF compression: {} → {} (reduced by {}%)", - GeneralUtils.formatBytes(originalFileSize), - GeneralUtils.formatBytes(compressedFileSize), + GeneralUtil.formatBytes(originalFileSize), + GeneralUtil.formatBytes(compressedFileSize), String.format("%.1f", overallReduction)); return newCompressedPDF; } @@ -316,8 +316,8 @@ public class CompressController { log.info( "Image hash {}: Compressed from {} to {} (reduced by {}%)", imageHash, - GeneralUtils.formatBytes(originalSize), - GeneralUtils.formatBytes(compressedSize), + GeneralUtil.formatBytes(originalSize), + GeneralUtil.formatBytes(compressedSize), String.format("%.1f", reductionPercentage)); } else { log.info("Image hash {}: Not suitable for compression, skipping", imageHash); @@ -456,8 +456,8 @@ public class CompressController { stats.nestedImages); log.info( "Total original image size: {}, compressed: {} (reduced by {}%)", - GeneralUtils.formatBytes(stats.totalOriginalBytes), - GeneralUtils.formatBytes(stats.totalCompressedBytes), + GeneralUtil.formatBytes(stats.totalOriginalBytes), + GeneralUtil.formatBytes(stats.totalCompressedBytes), String.format("%.1f", overallImageReduction)); } @@ -673,7 +673,7 @@ public class CompressController { Long expectedOutputSize = 0L; boolean autoMode = false; if (expectedOutputSizeString != null && expectedOutputSizeString.length() > 1) { - expectedOutputSize = GeneralUtils.convertSizeToBytes(expectedOutputSizeString); + expectedOutputSize = GeneralUtil.convertSizeToBytes(expectedOutputSizeString); autoMode = true; } @@ -794,7 +794,7 @@ public class CompressController { throws IOException { long preQpdfSize = Files.size(currentFile); - log.info("Pre-QPDF file size: {}", GeneralUtils.formatBytes(preQpdfSize)); + log.info("Pre-QPDF file size: {}", GeneralUtil.formatBytes(preQpdfSize)); // Map optimization levels to QPDF compression levels int qpdfCompressionLevel; @@ -839,7 +839,7 @@ public class CompressController { double qpdfReduction = 100.0 - ((postQpdfSize * 100.0) / preQpdfSize); log.info( "Post-QPDF file size: {} (reduced by {}%)", - GeneralUtils.formatBytes(postQpdfSize), String.format("%.1f", qpdfReduction)); + GeneralUtil.formatBytes(postQpdfSize), String.format("%.1f", qpdfReduction)); } catch (Exception e) { if (returnCode != null && returnCode.getRc() != 3) { 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 90809df87..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 @@ -32,8 +32,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; 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..eeb3240cb 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.GeneralUtil; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") @@ -80,7 +80,7 @@ public class PageNumbersController { customText = "{n}"; } List pagesToNumberList = - GeneralUtils.parsePageList(pagesToNumber.split(","), document.getNumberOfPages()); + GeneralUtil.parsePageList(pagesToNumber.split(","), document.getNumberOfPages()); for (int i : pagesToNumberList) { PDPage page = document.getPage(i); 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/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/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..facbe8bd9 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.GeneralUtil; +import stirling.software.common.util.PdfUtils; +import stirling.software.common.util.WebResponseUtils; +import stirling.software.common.util.propertyeditor.StringToArrayListPropertyEditor; @RestController @RequestMapping("/api/v1/security") @@ -184,8 +184,7 @@ public class RedactController { String pageNumbersInput = request.getPageNumbers(); String[] parsedPageNumbers = pageNumbersInput != null ? pageNumbersInput.split(",") : new String[0]; - List pageNumbers = - GeneralUtils.parsePageList(parsedPageNumbers, pagesCount, false); + List pageNumbers = GeneralUtil.parsePageList(parsedPageNumbers, pagesCount, false); Collections.sort(pageNumbers); return pageNumbers; } 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 42a3f2da9..f031b2e4f 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.common.util.Validator.validateProvider; +import static stirling.software.common.util.ProviderUtil.validateProvider; import java.time.Instant; import java.time.temporal.ChronoUnit; @@ -41,9 +41,9 @@ 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.provider.GitHubProvider; -import stirling.software.common.model.provider.GoogleProvider; -import stirling.software.common.model.provider.KeycloakProvider; +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 c4b778f0b..fae51567b 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.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.util.GeneralUtil; @Controller @Tag(name = "General", description = "General APIs") @@ -240,7 +240,7 @@ public class GeneralWebController { private List getFontNamesFromLocation(String locationPattern) { try { Resource[] resources = - GeneralUtils.getResourcesFromLocationPattern(locationPattern, resourceLoader); + GeneralUtil.getResourcesFromLocationPattern(locationPattern, resourceLoader); return Arrays.stream(resources) .map( resource -> { 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 b31389d95..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.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/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..3720bad65 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.GeneralUtil; @Data @EqualsAndHashCode(callSuper = true) @@ -29,6 +30,6 @@ public class PDFWithPageNums extends PDFFile { @Hidden public List getPageNumbersList(PDDocument doc, boolean oneBased) { int pageCount = doc.getNumberOfPages(); - return GeneralUtils.parsePageList(pageNumbers, pageCount, oneBased); + return GeneralUtil.parsePageList(pageNumbers, pageCount, oneBased); } } 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/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/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/common/src/test/java/stirling/software/common/configuration/DatabaseConfigTest.java b/src/test/java/stirling/software/SPDF/config/security/database/DatabaseConfigTest.java similarity index 98% rename from common/src/test/java/stirling/software/common/configuration/DatabaseConfigTest.java rename to src/test/java/stirling/software/SPDF/config/security/database/DatabaseConfigTest.java index b5982515d..45bbd28c0 100644 --- a/common/src/test/java/stirling/software/common/configuration/DatabaseConfigTest.java +++ b/src/test/java/stirling/software/SPDF/config/security/database/DatabaseConfigTest.java @@ -1,4 +1,4 @@ -package stirling.software.common.configuration; +package stirling.software.SPDF.config.security.database; import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.junit.jupiter.api.Assertions.assertThrows; 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 2c2b0f217..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.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/utils/GeneralUtilsAdditionalTest.java b/src/test/java/stirling/software/SPDF/utils/GeneralUtilsAdditionalTest.java deleted file mode 100644 index 4a48cdb0f..000000000 --- a/src/test/java/stirling/software/SPDF/utils/GeneralUtilsAdditionalTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package stirling.software.SPDF.utils; - -import static org.junit.jupiter.api.Assertions.*; - -import org.junit.jupiter.api.Test; - -class GeneralUtilsAdditionalTest { - - @Test - void testConvertSizeToBytes() { - assertEquals(1024L, GeneralUtils.convertSizeToBytes("1KB")); - assertEquals(1024L * 1024, GeneralUtils.convertSizeToBytes("1MB")); - assertEquals(1024L * 1024 * 1024, GeneralUtils.convertSizeToBytes("1GB")); - assertEquals(100L * 1024 * 1024, GeneralUtils.convertSizeToBytes("100")); - assertNull(GeneralUtils.convertSizeToBytes("invalid")); - assertNull(GeneralUtils.convertSizeToBytes(null)); - } - - @Test - void testFormatBytes() { - assertEquals("512 B", GeneralUtils.formatBytes(512)); - assertEquals("1.00 KB", GeneralUtils.formatBytes(1024)); - assertEquals("1.00 MB", GeneralUtils.formatBytes(1024L * 1024)); - assertEquals("1.00 GB", GeneralUtils.formatBytes(1024L * 1024 * 1024)); - } - - @Test - void testURLHelpersAndUUID() { - assertTrue(GeneralUtils.isValidURL("https://example.com")); - assertFalse(GeneralUtils.isValidURL("htp:/bad")); - assertFalse(GeneralUtils.isURLReachable("http://localhost")); - assertFalse(GeneralUtils.isURLReachable("ftp://example.com")); - - assertTrue(GeneralUtils.isValidUUID("123e4567-e89b-12d3-a456-426614174000")); - assertFalse(GeneralUtils.isValidUUID("not-a-uuid")); - - assertFalse(GeneralUtils.isVersionHigher(null, "1.0")); - assertTrue(GeneralUtils.isVersionHigher("2.0", "1.9")); - assertFalse(GeneralUtils.isVersionHigher("1.0", "1.0.1")); - } -} 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"); - } -}