From f9cc7833b4a6f923fe703a6418269f0a787b369e Mon Sep 17 00:00:00 2001 From: Dario Ghunney Ware Date: Wed, 7 May 2025 12:03:37 +0100 Subject: [PATCH] wip - compiling and tests fixed --- LICENSE | 5 + build.gradle | 12 +- common/build.gradle | 15 +- .../util/DeletingRandomAccessFile.java | 0 .../common/configuration/AppConfig.java | 15 + .../configuration}/ConfigInitializer.java | 6 +- .../common/configuration/DatabaseConfig.java | 14 +- .../configuration}/RuntimePathConfig.java | 3 +- .../interfaces/ShowAdminInterface.java | 2 +- .../common/model/ApplicationProperties.java | 12 +- .../software/common/model}/FileInfo.java | 2 +- .../software/common}/model/PdfMetadata.java | 2 +- .../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 | 2 +- .../exception/BackupNotFoundException.java | 2 +- .../exception/NoProviderFoundException.java | 2 +- .../service/CustomPDFDocumentFactory.java | 4 +- .../common}/service/PdfMetadataService.java | 5 +- .../common/service}/UserServiceInterface.java | 2 +- .../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}/GeneralUtils.java | 3 +- .../common/util}/ImageProcessingUtils.java | 2 +- .../software/common/util}/PDFToFile.java | 4 +- .../software/common/util}/PdfUtils.java | 5 +- .../common/util}/ProcessExecutor.java | 2 +- .../common/util}/PropertyConfigs.java | 2 +- .../{Validator.java => ProviderUtil.java} | 13 +- .../software/common/util/RequestUriUtil.java | 4 +- .../software/common/util}/UIScaling.java | 4 +- .../software/common/util}/UrlUtils.java | 2 +- .../software/common/util/ValidationUtil.java | 15 + .../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 +- .../configuration}/DatabaseConfigTest.java | 20 +- .../software/common/util}/ErrorUtilsTest.java | 2 +- .../software/common/util}/FileInfoTest.java | 4 +- .../software/common/util}/FileToPdfTest.java | 4 +- .../common/util}/GeneralUtilsTest.java | 2 +- .../util}/ImageProcessingUtilsTest.java | 2 +- .../software/common/util}/PdfUtilsTest.java | 2 +- .../common/util}/ProcessExecutorTest.java | 2 +- .../common/util}/PropertyConfigsTest.java | 2 +- ...lidatorTest.java => ProviderUtilTest.java} | 7 +- .../common/util/RequestUriUtilTest.java | 26 ++ .../software/common/util}/UrlUtilsTest.java | 2 +- .../common/util}/WebResponseUtilsTest.java | 2 +- enterprise/LICENSE | 45 +++ enterprise/build.gradle | 83 +++++ .../configuration}/EEAppConfig.java | 6 +- .../configuration}/KeygenLicenseVerifier.java | 4 +- .../configuration}/LicenseKeyChecker.java | 6 +- .../CustomAuthenticationFailureHandler.java | 18 +- .../CustomAuthenticationSuccessHandler.java | 20 +- .../security/CustomLogoutSuccessHandler.java | 35 +- .../security/FirstLoginFilter.java | 31 +- .../security/IPRateLimitingFilter.java | 17 +- .../security/InitialSecuritySetup.java | 19 +- .../security/RateLimitResetScheduler.java | 7 +- .../security/SecurityConfiguration.java | 320 ++++++++++++++++++ .../security/UserAuthenticationFilter.java | 25 +- .../security/UserBasedRateLimitingFilter.java | 24 +- .../controller/api/DatabaseController.java | 6 +- .../controller/api/UserController.java | 16 +- .../controller/web/AccountWebController.java | 18 +- .../controller/web/DatabaseWebController.java | 6 +- .../security/database}/H2SQLCondition.java | 10 +- .../security/database/ScheduledTasks.java | 12 +- .../repository/AuthorityRepository.java | 4 +- .../repository/JPATokenRepositoryImpl.java | 4 +- .../repository/PersistentLoginRepository.java | 4 +- .../database}/repository/UserRepository.java | 4 +- .../model/ApiKeyAuthenticationToken.java | 2 +- .../security}/model/AttemptCounter.java | 2 +- .../security}/model/AuthenticationType.java | 2 +- .../enterprise/security}/model/Authority.java | 2 +- .../security}/model/PersistentLogin.java | 2 +- .../enterprise/security}/model/Role.java | 2 +- .../security}/model/SessionEntity.java | 2 +- .../enterprise/security}/model/User.java | 2 +- .../model/api/user/UpdateUserDetails.java | 2 +- .../model/api/user/UpdateUserUsername.java | 2 +- .../security}/model/api/user/Username.java | 2 +- .../model/api/user/UsernameAndPass.java | 2 +- ...tomOAuth2AuthenticationFailureHandler.java | 13 +- ...tomOAuth2AuthenticationSuccessHandler.java | 26 +- .../security/oauth2/OAuth2Configuration.java | 20 +- .../security/saml2/CertificateUtils.java | 3 +- .../CustomSaml2AuthenticatedPrincipal.java | 3 +- ...stomSaml2AuthenticationFailureHandler.java | 11 +- ...stomSaml2AuthenticationSuccessHandler.java | 28 +- ...mSaml2ResponseAuthenticationConverter.java | 19 +- .../security/saml2/SAML2Configuration.java | 12 +- .../service}/AppUpdateAuthService.java | 13 +- .../service}/CustomOAuth2UserService.java | 11 +- .../service}/CustomUserDetailsService.java | 13 +- .../security/service}/DatabaseService.java | 9 +- .../service/DatabaseServiceInterface.java | 6 +- .../service}/LoginAttemptService.java | 14 +- .../security/service}/UserService.java | 26 +- .../UserServiceEnterpriseInterface.java | 11 + .../session/CustomHttpSessionListener.java | 6 +- .../session/SessionPersistentRegistry.java | 21 +- .../session/SessionRegistryConfig.java | 2 +- .../security/session/SessionRepository.java | 9 +- .../security/session/SessionScheduled.java | 6 +- settings.gradle | 2 +- .../ReplaceAndInvertColorFactory.java | 10 +- .../software/SPDF/SPDFApplication.java | 34 +- .../software/SPDF/UI/impl/DesktopBrowser.java | 2 +- .../software/SPDF/UI/impl/LoadingWindow.java | 2 +- .../SPDF/config/AppUpdateService.java | 2 +- .../SPDF/config/ExternalAppDepConfig.java | 2 + .../software/SPDF/config/InitialSetup.java | 2 +- .../software/SPDF/config/MetricsFilter.java | 4 +- .../FingerprintBasedSessionFilter.java | 2 +- .../security/SecurityConfiguration.java | 317 ----------------- .../controller/api/AnalysisController.java | 4 +- .../SPDF/controller/api/CropController.java | 4 +- .../SPDF/controller/api/MergeController.java | 6 +- .../api/MultiPageLayoutController.java | 4 +- .../api/PdfImageRemovalController.java | 6 +- .../controller/api/PdfOverlayController.java | 6 +- .../api/RearrangePagesPDFController.java | 6 +- .../controller/api/RotationController.java | 4 +- .../controller/api/ScalePagesController.java | 4 +- .../controller/api/SettingsController.java | 2 +- .../controller/api/SplitPDFController.java | 4 +- .../api/SplitPdfByChaptersController.java | 8 +- .../api/SplitPdfBySectionsController.java | 4 +- .../api/SplitPdfBySizeController.java | 6 +- .../api/ToSinglePageController.java | 6 +- .../api/converters/ConvertHtmlToPDF.java | 10 +- .../converters/ConvertImgPDFController.java | 10 +- .../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 | 12 +- .../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 | 10 +- .../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 | 6 +- .../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/ApiDocService.java | 7 +- .../api/pipeline/PipelineController.java | 2 +- .../pipeline/PipelineDirectoryProcessor.java | 4 +- .../api/pipeline/PipelineProcessor.java | 7 +- .../api/security/CertSignController.java | 4 +- .../controller/api/security/GetInfoOnPDF.java | 6 +- .../api/security/PasswordController.java | 4 +- .../api/security/RedactController.java | 12 +- .../security/RemoveCertSignController.java | 6 +- .../api/security/SanitizeController.java | 4 +- .../security/ValidateSignatureController.java | 2 +- .../api/security/WatermarkController.java | 6 +- .../web/ConverterWebController.java | 2 +- .../controller/web/GeneralWebController.java | 10 +- .../controller/web/OtherWebController.java | 2 +- .../controller/web/SignatureController.java | 6 +- .../SPDF/model/api/PDFComparison.java | 2 + .../model/api/PDFWithImageFormatRequest.java | 2 + .../SPDF/model/api/PDFWithPageNums.java | 3 +- .../SPDF/model/api/PDFWithPageSize.java | 2 + .../model/api/SplitPdfByChaptersRequest.java | 2 + .../model/api/SplitPdfBySectionsRequest.java | 2 + .../api/converters/ConvertPDFToMarkdown.java | 4 +- .../api/converters/ConvertToImageRequest.java | 2 +- .../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/ManualRedactPdfRequest.java | 1 + .../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 +- .../software/SPDF/service/PostHogService.java | 6 +- .../misc/ReplaceAndInvertColorService.java | 6 +- .../CustomLogoutSuccessHandlerTest.java | 1 + .../api/RearrangePagesPDFControllerTest.java | 2 +- .../api/RotationControllerTest.java | 2 +- .../converters/ConvertWebsiteToPdfTest.java | 4 +- .../SPDF/utils/RequestUriUtilsTest.java | 26 -- 231 files changed, 1156 insertions(+), 1042 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}/RuntimePathConfig.java (96%) rename {src/main/java/stirling/software/SPDF/config => common/src/main/java/stirling/software/common/configuration}/interfaces/ShowAdminInterface.java (66%) rename {src/main/java/stirling/software/SPDF/utils => common/src/main/java/stirling/software/common/model}/FileInfo.java (97%) rename {src/main/java/stirling/software/SPDF => common/src/main/java/stirling/software/common}/model/PdfMetadata.java (89%) 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%) rename {src/main/java/stirling/software/SPDF => common/src/main/java/stirling/software/common}/model/api/security/RedactionArea.java (93%) rename {src/main/java/stirling/software/SPDF => common/src/main/java/stirling/software/common}/model/exception/BackupNotFoundException.java (75%) rename {src/main/java/stirling/software/SPDF => common/src/main/java/stirling/software/common}/model/exception/NoProviderFoundException.java (83%) rename {src/main/java/stirling/software/SPDF => common/src/main/java/stirling/software/common}/service/CustomPDFDocumentFactory.java (99%) rename {src/main/java/stirling/software/SPDF => common/src/main/java/stirling/software/common}/service/PdfMetadataService.java (96%) rename {src/main/java/stirling/software/SPDF/controller/api/pipeline => common/src/main/java/stirling/software/common/service}/UserServiceInterface.java (73%) 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 => common/src/main/java/stirling/software/common/util}/GeneralUtils.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 (99%) 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} (64%) 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/config/security/database => common/src/test/java/stirling/software/common/configuration}/DatabaseConfigTest.java (90%) 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}/FileToPdfTest.java (96%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/GeneralUtilsTest.java (99%) 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}/PdfUtilsTest.java (98%) 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} (90%) 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}/UrlUtilsTest.java (95%) rename {src/test/java/stirling/software/SPDF/utils => common/src/test/java/stirling/software/common/util}/WebResponseUtilsTest.java (99%) create mode 100644 enterprise/LICENSE create mode 100644 enterprise/build.gradle rename {src/main/java/stirling/software/SPDF/EE => enterprise/src/main/java/stirling/software/enterprise/configuration}/EEAppConfig.java (97%) rename {src/main/java/stirling/software/SPDF/EE => enterprise/src/main/java/stirling/software/enterprise/configuration}/KeygenLicenseVerifier.java (99%) rename {src/main/java/stirling/software/SPDF/EE => enterprise/src/main/java/stirling/software/enterprise/configuration}/LicenseKeyChecker.java (94%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/CustomAuthenticationFailureHandler.java (93%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/CustomAuthenticationSuccessHandler.java (88%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/CustomLogoutSuccessHandler.java (94%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/FirstLoginFilter.java (90%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/IPRateLimitingFilter.java (85%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/InitialSecuritySetup.java (90%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/RateLimitResetScheduler.java (90%) create mode 100644 enterprise/src/main/java/stirling/software/enterprise/security/SecurityConfiguration.java rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/UserAuthenticationFilter.java (96%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/UserBasedRateLimitingFilter.java (98%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security}/controller/api/DatabaseController.java (97%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security}/controller/api/UserController.java (96%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security}/controller/web/AccountWebController.java (96%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security}/controller/web/DatabaseWebController.java (89%) rename {src/main/java/stirling/software/SPDF/controller/api => enterprise/src/main/java/stirling/software/enterprise/security/database}/H2SQLCondition.java (77%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/database/ScheduledTasks.java (71%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security/database}/repository/AuthorityRepository.java (74%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security/database}/repository/JPATokenRepositoryImpl.java (93%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security/database}/repository/PersistentLoginRepository.java (66%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security/database}/repository/UserRepository.java (86%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security}/model/ApiKeyAuthenticationToken.java (96%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security}/model/AttemptCounter.java (93%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security}/model/AuthenticationType.java (50%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security}/model/Authority.java (94%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security}/model/PersistentLogin.java (91%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security}/model/Role.java (97%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security}/model/SessionEntity.java (88%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security}/model/User.java (98%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security}/model/api/user/UpdateUserDetails.java (86%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security}/model/api/user/UpdateUserUsername.java (82%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security}/model/api/user/Username.java (81%) rename {src/main/java/stirling/software/SPDF => enterprise/src/main/java/stirling/software/enterprise/security}/model/api/user/UsernameAndPass.java (82%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/oauth2/CustomOAuth2AuthenticationFailureHandler.java (97%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java (90%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/oauth2/OAuth2Configuration.java (96%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/saml2/CertificateUtils.java (97%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/saml2/CustomSaml2AuthenticatedPrincipal.java (93%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/saml2/CustomSaml2AuthenticationFailureHandler.java (96%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/saml2/CustomSaml2AuthenticationSuccessHandler.java (93%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/saml2/CustomSaml2ResponseAuthenticationConverter.java (94%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/saml2/SAML2Configuration.java (99%) rename {src/main/java/stirling/software/SPDF/config/security => enterprise/src/main/java/stirling/software/enterprise/security/service}/AppUpdateAuthService.java (84%) rename {src/main/java/stirling/software/SPDF/config/security/oauth2 => enterprise/src/main/java/stirling/software/enterprise/security/service}/CustomOAuth2UserService.java (94%) rename {src/main/java/stirling/software/SPDF/config/security => enterprise/src/main/java/stirling/software/enterprise/security/service}/CustomUserDetailsService.java (89%) rename {src/main/java/stirling/software/SPDF/config/security/database => enterprise/src/main/java/stirling/software/enterprise/security/service}/DatabaseService.java (97%) rename src/main/java/stirling/software/SPDF/config/interfaces/DatabaseInterface.java => enterprise/src/main/java/stirling/software/enterprise/security/service/DatabaseServiceInterface.java (67%) rename {src/main/java/stirling/software/SPDF/config/security => enterprise/src/main/java/stirling/software/enterprise/security/service}/LoginAttemptService.java (95%) rename {src/main/java/stirling/software/SPDF/config/security => enterprise/src/main/java/stirling/software/enterprise/security/service}/UserService.java (95%) create mode 100644 enterprise/src/main/java/stirling/software/enterprise/security/service/UserServiceEnterpriseInterface.java rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/session/CustomHttpSessionListener.java (92%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/session/SessionPersistentRegistry.java (95%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/session/SessionRegistryConfig.java (90%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/session/SessionRepository.java (89%) rename {src/main/java/stirling/software/SPDF/config => enterprise/src/main/java/stirling/software/enterprise}/security/session/SessionScheduled.java (95%) delete mode 100644 src/main/java/stirling/software/SPDF/config/security/SecurityConfiguration.java delete mode 100644 src/test/java/stirling/software/SPDF/utils/RequestUriUtilsTest.java diff --git a/LICENSE b/LICENSE index 10633f4a3..07c21cee3 100644 --- a/LICENSE +++ b/LICENSE @@ -2,6 +2,11 @@ MIT License Copyright (c) 2024 Stirling Tools +Portions of this software are licensed as follows: + +* All content that resides under the "enterprise/" directory of this repository, if that directory exists, is licensed under the license defined in "enterprise/LICENSE". +* Content outside of the above mentioned directories or restrictions above is available under the MIT License as defined below. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights diff --git a/build.gradle b/build.gradle index b517120d0..fa275aa02 100644 --- a/build.gradle +++ b/build.gradle @@ -415,6 +415,7 @@ configurations.all { dependencies { implementation project(':common') + implementation project(':enterprise') //tmp for security bumps implementation 'ch.qos.logback:logback-core:1.5.18' @@ -437,7 +438,7 @@ dependencies { //security updates implementation "org.springframework:spring-webmvc:6.2.6" - implementation("io.github.pixee:java-security-toolkit:1.2.1") + implementation 'io.github.pixee:java-security-toolkit:1.2.1' // Exclude Tomcat and include Jetty implementation("org.springframework.boot:spring-boot-starter-web:$springBootVersion") @@ -474,7 +475,6 @@ dependencies { implementation 'com.coveo:saml-client:5.0.0' } - implementation 'org.snakeyaml:snakeyaml-engine:2.9' testImplementation "org.springframework.boot:spring-boot-starter-test:$springBootVersion" @@ -499,9 +499,6 @@ dependencies { runtimeOnly "com.twelvemonkeys.imageio:imageio-webp:$imageioVersion" // runtimeOnly "com.twelvemonkeys.imageio:imageio-xwd:$imageioVersion" - // Image metadata extractor - implementation "com.drewnoakes:metadata-extractor:2.19.0" - implementation "commons-io:commons-io:2.19.0" implementation "org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.8" //general PDF @@ -532,11 +529,6 @@ dependencies { // https://mvnrepository.com/artifact/org.commonmark/commonmark implementation "org.commonmark:commonmark:0.24.0" implementation "org.commonmark:commonmark-ext-gfm-tables:0.24.0" - // https://mvnrepository.com/artifact/com.bucket4j/bucket4j_jdk17 - implementation "com.bucket4j:bucket4j_jdk17-core:8.14.0" - implementation "com.fathzer:javaluator:3.0.6" - - implementation 'com.vladsch.flexmark:flexmark-html2md-converter:0.64.8' developmentOnly("org.springframework.boot:spring-boot-devtools:$springBootVersion") compileOnly "org.projectlombok:lombok:$lombokVersion" diff --git a/common/build.gradle b/common/build.gradle index 41f738094..55eb54eaa 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -30,14 +30,27 @@ dependencyManagement { } dependencies { - implementation "org.springframework.boot:spring-boot-starter-web" + 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 '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:3.0.4' + 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" + testRuntimeOnly 'org.springframework.boot:spring-boot-starter-data-jpa' + testRuntimeOnly 'com.h2database:h2:2.3.232' + testRuntimeOnly 'org.postgresql:postgresql:42.7.5' testImplementation 'org.junit.jupiter:junit-jupiter' } 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..ee761e881 100644 --- a/common/src/main/java/stirling/software/common/configuration/AppConfig.java +++ b/common/src/main/java/stirling/software/common/configuration/AppConfig.java @@ -1,5 +1,7 @@ package stirling.software.common.configuration; +import io.github.pixee.security.SystemCommand; +import jakarta.annotation.PostConstruct; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -9,6 +11,7 @@ import java.util.Locale; import java.util.Properties; import java.util.function.Predicate; +import lombok.Getter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -36,6 +39,18 @@ public class AppConfig { 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") public SpringTemplateEngine templateEngine(ResourceLoader resourceLoader) { 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/DatabaseConfig.java b/common/src/main/java/stirling/software/common/configuration/DatabaseConfig.java index 2445a9c84..e2941dd05 100644 --- a/common/src/main/java/stirling/software/common/configuration/DatabaseConfig.java +++ b/common/src/main/java/stirling/software/common/configuration/DatabaseConfig.java @@ -5,6 +5,7 @@ import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.boot.jdbc.DatabaseDriver; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import stirling.software.common.model.ApplicationProperties; @@ -18,9 +19,7 @@ public class DatabaseConfig { public final String DATASOURCE_DEFAULT_URL; public static final String DATASOURCE_URL_TEMPLATE = "jdbc:%s://%s:%4d/%s"; - public static final String DEFAULT_DRIVER = "org.h2.Driver"; public static final String DEFAULT_USERNAME = "sa"; - public static final String POSTGRES_DRIVER = "org.postgresql.Driver"; private final ApplicationProperties.Datasource datasource; private final boolean runningProOrHigher; @@ -62,7 +61,7 @@ public class DatabaseConfig { if (!datasource.getCustomDatabaseUrl().isBlank()) { if (datasource.getCustomDatabaseUrl().contains("postgresql")) { - dataSourceBuilder.driverClassName(POSTGRES_DRIVER); + dataSourceBuilder.driverClassName(DatabaseDriver.POSTGRESQL.getDriverClassName()); } dataSourceBuilder.url(datasource.getCustomDatabaseUrl()); @@ -84,8 +83,9 @@ public class DatabaseConfig { private DataSource useDefaultDataSource(DataSourceBuilder dataSourceBuilder) { log.info("Using default H2 database"); - dataSourceBuilder.url(DATASOURCE_DEFAULT_URL); - dataSourceBuilder.username(DEFAULT_USERNAME); + dataSourceBuilder.url(DATASOURCE_DEFAULT_URL) + .driverClassName(DatabaseDriver.H2.getDriverClassName()) + .username(DEFAULT_USERNAME); return dataSourceBuilder.build(); } @@ -119,11 +119,11 @@ public class DatabaseConfig { switch (driver) { case H2 -> { log.debug("H2 driver selected"); - return DEFAULT_DRIVER; + return DatabaseDriver.H2.getDriverClassName(); } case POSTGRESQL -> { log.debug("Postgres driver selected"); - return POSTGRES_DRIVER; + return DatabaseDriver.POSTGRESQL.getDriverClassName(); } default -> { log.warn("{} driver selected", driverName); 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/src/main/java/stirling/software/SPDF/config/interfaces/ShowAdminInterface.java b/common/src/main/java/stirling/software/common/configuration/interfaces/ShowAdminInterface.java similarity index 66% rename from src/main/java/stirling/software/SPDF/config/interfaces/ShowAdminInterface.java rename to common/src/main/java/stirling/software/common/configuration/interfaces/ShowAdminInterface.java index 1bbebf5a9..67ec2aa76 100644 --- a/src/main/java/stirling/software/SPDF/config/interfaces/ShowAdminInterface.java +++ b/common/src/main/java/stirling/software/common/configuration/interfaces/ShowAdminInterface.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.config.interfaces; +package stirling.software.common.configuration.interfaces; public interface ShowAdminInterface { default boolean getShowUpdateOnlyAdmins() { 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..d72b0107a 100644 --- a/common/src/main/java/stirling/software/common/model/ApplicationProperties.java +++ b/common/src/main/java/stirling/software/common/model/ApplicationProperties.java @@ -26,7 +26,7 @@ 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.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/src/main/java/stirling/software/SPDF/model/PdfMetadata.java b/common/src/main/java/stirling/software/common/model/PdfMetadata.java similarity index 89% rename from src/main/java/stirling/software/SPDF/model/PdfMetadata.java rename to common/src/main/java/stirling/software/common/model/PdfMetadata.java index 35054bc8c..ef8684788 100644 --- a/src/main/java/stirling/software/SPDF/model/PdfMetadata.java +++ b/common/src/main/java/stirling/software/common/model/PdfMetadata.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model; +package stirling.software.common.model; import java.util.Calendar; 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/src/main/java/stirling/software/SPDF/model/api/security/RedactionArea.java b/common/src/main/java/stirling/software/common/model/api/security/RedactionArea.java similarity index 93% rename from src/main/java/stirling/software/SPDF/model/api/security/RedactionArea.java rename to common/src/main/java/stirling/software/common/model/api/security/RedactionArea.java index 9b44835f9..e0028a8ae 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/RedactionArea.java +++ b/common/src/main/java/stirling/software/common/model/api/security/RedactionArea.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model.api.security; +package stirling.software.common.model.api.security; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/src/main/java/stirling/software/SPDF/model/exception/BackupNotFoundException.java b/common/src/main/java/stirling/software/common/model/exception/BackupNotFoundException.java similarity index 75% rename from src/main/java/stirling/software/SPDF/model/exception/BackupNotFoundException.java rename to common/src/main/java/stirling/software/common/model/exception/BackupNotFoundException.java index 7e0649ce9..588e89199 100644 --- a/src/main/java/stirling/software/SPDF/model/exception/BackupNotFoundException.java +++ b/common/src/main/java/stirling/software/common/model/exception/BackupNotFoundException.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model.exception; +package stirling.software.common.model.exception; public class BackupNotFoundException extends RuntimeException { public BackupNotFoundException(String message) { diff --git a/src/main/java/stirling/software/SPDF/model/exception/NoProviderFoundException.java b/common/src/main/java/stirling/software/common/model/exception/NoProviderFoundException.java similarity index 83% rename from src/main/java/stirling/software/SPDF/model/exception/NoProviderFoundException.java rename to common/src/main/java/stirling/software/common/model/exception/NoProviderFoundException.java index 162070f38..def079678 100644 --- a/src/main/java/stirling/software/SPDF/model/exception/NoProviderFoundException.java +++ b/common/src/main/java/stirling/software/common/model/exception/NoProviderFoundException.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model.exception; +package stirling.software.common.model.exception; public class NoProviderFoundException extends Exception { public NoProviderFoundException(String message) { diff --git a/src/main/java/stirling/software/SPDF/service/CustomPDFDocumentFactory.java b/common/src/main/java/stirling/software/common/service/CustomPDFDocumentFactory.java similarity index 99% rename from src/main/java/stirling/software/SPDF/service/CustomPDFDocumentFactory.java rename to common/src/main/java/stirling/software/common/service/CustomPDFDocumentFactory.java index e5bb50d73..e4b9173d0 100644 --- a/src/main/java/stirling/software/SPDF/service/CustomPDFDocumentFactory.java +++ b/common/src/main/java/stirling/software/common/service/CustomPDFDocumentFactory.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.service; +package stirling.software.common.service; import java.io.ByteArrayOutputStream; import java.io.File; @@ -22,7 +22,7 @@ import org.springframework.web.multipart.MultipartFile; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.common.model.api.PDFFile; /** * Adaptive PDF document factory that optimizes memory usage based on file size and available system diff --git a/src/main/java/stirling/software/SPDF/service/PdfMetadataService.java b/common/src/main/java/stirling/software/common/service/PdfMetadataService.java similarity index 96% rename from src/main/java/stirling/software/SPDF/service/PdfMetadataService.java rename to common/src/main/java/stirling/software/common/service/PdfMetadataService.java index 3bbb938bf..621e19d46 100644 --- a/src/main/java/stirling/software/SPDF/service/PdfMetadataService.java +++ b/common/src/main/java/stirling/software/common/service/PdfMetadataService.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.service; +package stirling.software.common.service; import java.util.Calendar; @@ -7,9 +7,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; -import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface; -import stirling.software.SPDF.model.PdfMetadata; import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.model.PdfMetadata; @Service public class PdfMetadataService { diff --git a/src/main/java/stirling/software/SPDF/controller/api/pipeline/UserServiceInterface.java b/common/src/main/java/stirling/software/common/service/UserServiceInterface.java similarity index 73% rename from src/main/java/stirling/software/SPDF/controller/api/pipeline/UserServiceInterface.java rename to common/src/main/java/stirling/software/common/service/UserServiceInterface.java index 3b69456b1..d4cc25dc0 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/pipeline/UserServiceInterface.java +++ b/common/src/main/java/stirling/software/common/service/UserServiceInterface.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.controller.api.pipeline; +package stirling.software.common.service; public interface UserServiceInterface { String getApiKeyForUser(String username); diff --git a/src/main/java/stirling/software/SPDF/utils/CheckProgramInstall.java b/common/src/main/java/stirling/software/common/util/CheckProgramInstall.java similarity index 94% rename from src/main/java/stirling/software/SPDF/utils/CheckProgramInstall.java rename to common/src/main/java/stirling/software/common/util/CheckProgramInstall.java index 1c0ed2244..f39daf8ae 100644 --- a/src/main/java/stirling/software/SPDF/utils/CheckProgramInstall.java +++ b/common/src/main/java/stirling/software/common/util/CheckProgramInstall.java @@ -1,10 +1,10 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.io.IOException; import java.util.Arrays; import java.util.List; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; public class CheckProgramInstall { diff --git a/src/main/java/stirling/software/SPDF/utils/CustomHtmlSanitizer.java b/common/src/main/java/stirling/software/common/util/CustomHtmlSanitizer.java similarity index 94% rename from src/main/java/stirling/software/SPDF/utils/CustomHtmlSanitizer.java rename to common/src/main/java/stirling/software/common/util/CustomHtmlSanitizer.java index 587aae6fa..e5fe0436a 100644 --- a/src/main/java/stirling/software/SPDF/utils/CustomHtmlSanitizer.java +++ b/common/src/main/java/stirling/software/common/util/CustomHtmlSanitizer.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import org.owasp.html.HtmlPolicyBuilder; import org.owasp.html.PolicyFactory; diff --git a/src/main/java/stirling/software/SPDF/utils/ErrorUtils.java b/common/src/main/java/stirling/software/common/util/ErrorUtils.java similarity index 96% rename from src/main/java/stirling/software/SPDF/utils/ErrorUtils.java rename to common/src/main/java/stirling/software/common/util/ErrorUtils.java index e84e8d885..75097c67e 100644 --- a/src/main/java/stirling/software/SPDF/utils/ErrorUtils.java +++ b/common/src/main/java/stirling/software/common/util/ErrorUtils.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.io.PrintWriter; import java.io.StringWriter; diff --git a/src/main/java/stirling/software/SPDF/utils/FileMonitor.java b/common/src/main/java/stirling/software/common/util/FileMonitor.java similarity index 98% rename from src/main/java/stirling/software/SPDF/utils/FileMonitor.java rename to common/src/main/java/stirling/software/common/util/FileMonitor.java index e0b3fc2cf..e236dee88 100644 --- a/src/main/java/stirling/software/SPDF/utils/FileMonitor.java +++ b/common/src/main/java/stirling/software/common/util/FileMonitor.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static java.nio.file.StandardWatchEventKinds.*; @@ -17,8 +17,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.config.RuntimePathConfig; +import stirling.software.common.configuration.RuntimePathConfig; @Component @Slf4j diff --git a/src/main/java/stirling/software/SPDF/utils/FileToPdf.java b/common/src/main/java/stirling/software/common/util/FileToPdf.java similarity index 97% rename from src/main/java/stirling/software/SPDF/utils/FileToPdf.java rename to common/src/main/java/stirling/software/common/util/FileToPdf.java index da4aeab3c..8439b67a2 100644 --- a/src/main/java/stirling/software/SPDF/utils/FileToPdf.java +++ b/common/src/main/java/stirling/software/common/util/FileToPdf.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.io.*; import java.nio.charset.StandardCharsets; @@ -16,8 +16,8 @@ import java.util.zip.ZipOutputStream; import io.github.pixee.security.ZipSecurity; -import stirling.software.SPDF.model.api.converters.HTMLToPdfRequest; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.model.api.converters.HTMLToPdfRequest; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; public class FileToPdf { diff --git a/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java b/common/src/main/java/stirling/software/common/util/GeneralUtils.java similarity index 99% rename from src/main/java/stirling/software/SPDF/utils/GeneralUtils.java rename to common/src/main/java/stirling/software/common/util/GeneralUtils.java index 2fe76b0c0..3353cdfeb 100644 --- a/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java +++ b/common/src/main/java/stirling/software/common/util/GeneralUtils.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.io.File; import java.io.FileOutputStream; @@ -27,7 +27,6 @@ import io.github.pixee.security.Urls; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.config.YamlHelper; import stirling.software.common.configuration.InstallationPathConfig; @Slf4j diff --git a/src/main/java/stirling/software/SPDF/utils/ImageProcessingUtils.java b/common/src/main/java/stirling/software/common/util/ImageProcessingUtils.java similarity index 99% rename from src/main/java/stirling/software/SPDF/utils/ImageProcessingUtils.java rename to common/src/main/java/stirling/software/common/util/ImageProcessingUtils.java index f6a496021..ae6c0b66f 100644 --- a/src/main/java/stirling/software/SPDF/utils/ImageProcessingUtils.java +++ b/common/src/main/java/stirling/software/common/util/ImageProcessingUtils.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.awt.geom.AffineTransform; import java.awt.image.*; diff --git a/src/main/java/stirling/software/SPDF/utils/PDFToFile.java b/common/src/main/java/stirling/software/common/util/PDFToFile.java similarity index 99% rename from src/main/java/stirling/software/SPDF/utils/PDFToFile.java rename to common/src/main/java/stirling/software/common/util/PDFToFile.java index 268a92172..f763f5414 100644 --- a/src/main/java/stirling/software/SPDF/utils/PDFToFile.java +++ b/common/src/main/java/stirling/software/common/util/PDFToFile.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.io.ByteArrayOutputStream; import java.io.File; @@ -28,7 +28,7 @@ import io.github.pixee.security.Filenames; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; @Slf4j @NoArgsConstructor diff --git a/src/main/java/stirling/software/SPDF/utils/PdfUtils.java b/common/src/main/java/stirling/software/common/util/PdfUtils.java similarity index 99% rename from src/main/java/stirling/software/SPDF/utils/PdfUtils.java rename to common/src/main/java/stirling/software/common/util/PdfUtils.java index 14c5c09d7..bee180f70 100644 --- a/src/main/java/stirling/software/SPDF/utils/PdfUtils.java +++ b/common/src/main/java/stirling/software/common/util/PdfUtils.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import java.awt.*; import java.awt.image.BufferedImage; @@ -34,8 +34,7 @@ import org.springframework.web.multipart.MultipartFile; import io.github.pixee.security.Filenames; import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.service.CustomPDFDocumentFactory; +import stirling.software.common.service.CustomPDFDocumentFactory; @Slf4j public class PdfUtils { diff --git a/src/main/java/stirling/software/SPDF/utils/ProcessExecutor.java b/common/src/main/java/stirling/software/common/util/ProcessExecutor.java similarity index 99% rename from src/main/java/stirling/software/SPDF/utils/ProcessExecutor.java rename to common/src/main/java/stirling/software/common/util/ProcessExecutor.java index 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 64% 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..2035ba2f9 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 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..b72ad413f 100644 --- a/src/main/java/stirling/software/SPDF/utils/RequestUriUtils.java +++ b/common/src/main/java/stirling/software/common/util/RequestUriUtil.java @@ -1,6 +1,6 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; -public class RequestUriUtils { +public class RequestUriUtil { public static boolean isStaticResource(String requestURI) { 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..3393ca437 --- /dev/null +++ b/common/src/main/java/stirling/software/common/util/ValidationUtil.java @@ -0,0 +1,15 @@ +package stirling.software.common.util; + +import java.util.Collection; +import stirling.software.common.model.provider.Provider; + +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/config/security/database/DatabaseConfigTest.java b/common/src/test/java/stirling/software/common/configuration/DatabaseConfigTest.java similarity index 90% rename from src/test/java/stirling/software/SPDF/config/security/database/DatabaseConfigTest.java rename to common/src/test/java/stirling/software/common/configuration/DatabaseConfigTest.java index c734a8b7e..666a248e2 100644 --- a/src/test/java/stirling/software/SPDF/config/security/database/DatabaseConfigTest.java +++ b/common/src/test/java/stirling/software/common/configuration/DatabaseConfigTest.java @@ -1,11 +1,6 @@ -package stirling.software.SPDF.config.security.database; - -import static org.junit.jupiter.api.Assertions.assertInstanceOf; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.when; +package stirling.software.common.configuration; import javax.sql.DataSource; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -13,15 +8,16 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; - -import stirling.software.common.configuration.DatabaseConfig; import stirling.software.common.model.ApplicationProperties; import stirling.software.common.model.exception.UnsupportedProviderException; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class DatabaseConfigTest { - @Mock private ApplicationProperties.Datasource datasource; + @Mock + private ApplicationProperties.Datasource datasource; private DatabaseConfig databaseConfig; @@ -48,6 +44,9 @@ class DatabaseConfigTest { assertInstanceOf(DataSource.class, result); } + /** + * Must have PostgreSQL running to test this! + * */ @Test void testCustomUrlForDataSource() throws UnsupportedProviderException { when(datasource.isEnableCustomDatabase()).thenReturn(true); @@ -60,6 +59,9 @@ class DatabaseConfigTest { assertInstanceOf(DataSource.class, result); } + /** + * Must have PostgreSQL running to test this! + * */ @Test void testCustomConfigurationForDataSource() throws UnsupportedProviderException { when(datasource.isEnableCustomDatabase()).thenReturn(true); 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/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 38e2ec3b8..2a7e7c0e9 100644 --- a/src/test/java/stirling/software/SPDF/utils/FileToPdfTest.java +++ b/common/src/test/java/stirling/software/common/util/FileToPdfTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -8,7 +8,7 @@ import java.io.IOException; import org.junit.jupiter.api.Test; -import stirling.software.SPDF.model.api.converters.HTMLToPdfRequest; +import stirling.software.common.model.api.converters.HTMLToPdfRequest; public class FileToPdfTest { diff --git a/src/test/java/stirling/software/SPDF/utils/GeneralUtilsTest.java b/common/src/test/java/stirling/software/common/util/GeneralUtilsTest.java similarity index 99% rename from src/test/java/stirling/software/SPDF/utils/GeneralUtilsTest.java rename to common/src/test/java/stirling/software/common/util/GeneralUtilsTest.java index 72389130d..a73cd332b 100644 --- a/src/test/java/stirling/software/SPDF/utils/GeneralUtilsTest.java +++ b/common/src/test/java/stirling/software/common/util/GeneralUtilsTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/src/test/java/stirling/software/SPDF/utils/ImageProcessingUtilsTest.java b/common/src/test/java/stirling/software/common/util/ImageProcessingUtilsTest.java similarity index 98% rename from src/test/java/stirling/software/SPDF/utils/ImageProcessingUtilsTest.java rename to common/src/test/java/stirling/software/common/util/ImageProcessingUtilsTest.java index dc4a94d7b..59c187662 100644 --- a/src/test/java/stirling/software/SPDF/utils/ImageProcessingUtilsTest.java +++ b/common/src/test/java/stirling/software/common/util/ImageProcessingUtilsTest.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.utils; +package stirling.software.common.util; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; diff --git a/src/test/java/stirling/software/SPDF/utils/PdfUtilsTest.java b/common/src/test/java/stirling/software/common/util/PdfUtilsTest.java similarity index 98% rename from src/test/java/stirling/software/SPDF/utils/PdfUtilsTest.java rename to common/src/test/java/stirling/software/common/util/PdfUtilsTest.java index a03564ee9..cbd10fe49 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; 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 871a1678c..0723aa8ae 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 90% 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..d5f3e3c2a 100644 --- a/common/src/test/java/stirling/software/common/util/ValidatorTest.java +++ b/common/src/test/java/stirling/software/common/util/ProviderUtilTest.java @@ -7,7 +7,6 @@ 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; @@ -18,7 +17,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) -class ValidatorTest { +class ProviderUtilTest { @Test void testSuccessfulValidation() { @@ -28,13 +27,13 @@ class ValidatorTest { when(provider.getClientSecret()).thenReturn("clientSecret"); when(provider.getScopes()).thenReturn(List.of("read:user")); - assertTrue(Validator.validateProvider(provider)); + assertTrue(ProviderUtil.validateProvider(provider)); } @ParameterizedTest @MethodSource("providerParams") void testUnsuccessfulValidation(Provider provider) { - assertFalse(Validator.validateProvider(provider)); + 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..83eb92114 --- /dev/null +++ b/common/src/test/java/stirling/software/common/util/RequestUriUtilTest.java @@ -0,0 +1,26 @@ +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; + +public class RequestUriUtilTest { + + @Test + public void testIsStaticResource() { + assertTrue(RequestUriUtil.isStaticResource("/css/styles.css")); + assertTrue(RequestUriUtil.isStaticResource("/js/script.js")); + assertTrue(RequestUriUtil.isStaticResource("/images/logo.png")); + assertTrue(RequestUriUtil.isStaticResource("/public/index.html")); + assertTrue(RequestUriUtil.isStaticResource("/pdfjs/pdf.worker.js")); + assertTrue(RequestUriUtil.isStaticResource("/api/v1/info/status")); + assertTrue(RequestUriUtil.isStaticResource("/some-path/icon.svg")); + assertFalse(RequestUriUtil.isStaticResource("/api/v1/users")); + assertFalse(RequestUriUtil.isStaticResource("/api/v1/orders")); + assertFalse(RequestUriUtil.isStaticResource("/")); + assertTrue(RequestUriUtil.isStaticResource("/login")); + assertFalse(RequestUriUtil.isStaticResource("/register")); + assertFalse(RequestUriUtil.isStaticResource("/api/v1/products")); + } +} 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 95% rename from src/test/java/stirling/software/SPDF/utils/UrlUtilsTest.java rename to common/src/test/java/stirling/software/common/util/UrlUtilsTest.java index c6383accb..43dd06408 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; 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/enterprise/LICENSE b/enterprise/LICENSE new file mode 100644 index 000000000..f723a2809 --- /dev/null +++ b/enterprise/LICENSE @@ -0,0 +1,45 @@ +Stirling PDF Enterprise Edition (EE) license (the “EE License”) + +Copyright (c) 2025-present Stirling Tools + +With regard to the Stirling PDF Software: + +This software and associated documentation files (the "Software") may only be +used in production, if you (and any entity that you represent) have agreed to, +and are in compliance with, the Stirling PDF Terms of Service, available +at https://www.stirlingpdf.com/terms-and-conditions (the “EE Terms”), or other +agreement governing the use of the Software, as agreed by you and Stirling PDF, +and otherwise have a valid Stirling PDF Enterprise Edition subscription for the +correct number of user seats. Subject to the foregoing sentence, you are free to +modify this Software and publish patches to the Software. You agree that Stirling PDF +and/or its licensors (as applicable) retain all right, title and interest in and +to all such modifications and/or patches, and all such modifications and/or +patches may only be used, copied, modified, displayed, distributed, or otherwise +exploited with a valid Stirling PDF Enterprise Edition subscription for the correct +number of user seats. Notwithstanding the foregoing, you may copy and modify +the Software for development and testing purposes, without requiring a +subscription. You agree that Stirling PDF and/or its licensors (as applicable) retain +all right, title and interest in and to all such modifications. You are not +granted any other rights beyond what is expressly stated herein. Subject to the +foregoing, it is forbidden to copy, merge, publish, distribute, sublicense, +and/or sell the Software. + +This EE License applies only to the part of this Software that is not +distributed as part of MIT License. Any part of this Software +distributed as part of MIT License or is served client-side as an image, font, +cascading stylesheet (CSS), file which produces or is compiled, arranged, +augmented, or combined into client-side JavaScript, in whole or in part, is +copyrighted under the MIT Expat license. The full text of this EE License shall +be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +For all third party components incorporated into the Stirling PDF Software, those +components are licensed under the original license provided by the owner of the +applicable component. diff --git a/enterprise/build.gradle b/enterprise/build.gradle new file mode 100644 index 000000000..c1ba5aef6 --- /dev/null +++ b/enterprise/build.gradle @@ -0,0 +1,83 @@ +plugins { + id 'java-library' + id 'io.spring.dependency-management' version '1.1.7' +} + +group = 'stirling.software' +version = '0.46.0' + +repositories { + mavenCentral() + maven { url = "https://build.shibboleth.net/maven/releases" } + maven { url = "https://maven.pkg.github.com/jcefmaven/jcefmaven" } +} + +java { + // 17 is lowest but we support and recommend 21 + sourceCompatibility = JavaVersion.VERSION_17 +} + +ext { + lombokVersion = "1.18.38" +} + +configurations.all { + exclude group: 'commons-logging', module: 'commons-logging' + exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat" +} + +dependencyManagement { + imports { + mavenBom 'org.springframework.boot:spring-boot-dependencies:3.4.5' + } +} + +dependencies { + implementation project(':common') + + implementation 'org.springframework.boot:spring-boot-starter-jetty' + implementation 'io.swagger.core.v3:swagger-core-jakarta:2.2.30' + implementation 'org.springframework:spring-webmvc:6.2.6' +// implementation 'jakarta.servlet:jakarta.servlet-api:6.0.0' todo: testing + implementation 'com.posthog.java:posthog:1.2.0' + // https://mvnrepository.com/artifact/com.bucket4j/bucket4j_jdk17 + implementation 'com.bucket4j:bucket4j_jdk17-core:8.14.0' + implementation 'io.github.pixee:java-security-toolkit:1.2.1' + implementation 'org.bouncycastle:bcprov-jdk18on:1.80' + + if (System.getenv('DOCKER_ENABLE_SECURITY') != 'false') { + implementation 'io.micrometer:micrometer-registry-prometheus' + + implementation 'org.springframework.boot:spring-boot-starter-security' + implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5:3.1.3.RELEASE' + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' + + implementation "org.springframework.session:spring-session-core:3.4.3" + implementation "org.springframework:spring-jdbc:6.2.6" + + implementation 'com.unboundid.product.scim2:scim2-sdk-client:2.3.5' + // Don't upgrade h2database + runtimeOnly "com.h2database:h2:2.3.232" + runtimeOnly "org.postgresql:postgresql:42.7.5" + constraints { + implementation "org.opensaml:opensaml-core:$openSamlVersion" + implementation "org.opensaml:opensaml-saml-api:$openSamlVersion" + implementation "org.opensaml:opensaml-saml-impl:$openSamlVersion" + } + implementation "org.springframework.security:spring-security-saml2-service-provider:$springSecuritySamlVersion" + // implementation 'org.springframework.security:spring-security-core:$springSecuritySamlVersion' + implementation 'com.coveo:saml-client:5.0.0' + + } + + compileOnly "org.projectlombok:lombok:$lombokVersion" + annotationProcessor "org.projectlombok:lombok:$lombokVersion" + + testImplementation platform('org.junit:junit-bom:5.10.0') + testImplementation 'org.junit.jupiter:junit-jupiter' +} + +test { + useJUnitPlatform() +} diff --git a/src/main/java/stirling/software/SPDF/EE/EEAppConfig.java b/enterprise/src/main/java/stirling/software/enterprise/configuration/EEAppConfig.java similarity index 97% rename from src/main/java/stirling/software/SPDF/EE/EEAppConfig.java rename to enterprise/src/main/java/stirling/software/enterprise/configuration/EEAppConfig.java index 2683e2e4d..b98b86901 100644 --- a/src/main/java/stirling/software/SPDF/EE/EEAppConfig.java +++ b/enterprise/src/main/java/stirling/software/enterprise/configuration/EEAppConfig.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.EE; +package stirling.software.enterprise.configuration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -7,15 +7,15 @@ import org.springframework.core.annotation.Order; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.EE.KeygenLicenseVerifier.License; import stirling.software.common.model.ApplicationProperties; import stirling.software.common.model.ApplicationProperties.EnterpriseEdition; import stirling.software.common.model.ApplicationProperties.Premium; import stirling.software.common.model.ApplicationProperties.Premium.ProFeatures.GoogleDrive; +import static stirling.software.enterprise.configuration.KeygenLicenseVerifier.*; +@Slf4j @Configuration @Order(Ordered.HIGHEST_PRECEDENCE) -@Slf4j public class EEAppConfig { private final ApplicationProperties applicationProperties; diff --git a/src/main/java/stirling/software/SPDF/EE/KeygenLicenseVerifier.java b/enterprise/src/main/java/stirling/software/enterprise/configuration/KeygenLicenseVerifier.java similarity index 99% rename from src/main/java/stirling/software/SPDF/EE/KeygenLicenseVerifier.java rename to enterprise/src/main/java/stirling/software/enterprise/configuration/KeygenLicenseVerifier.java index 11e034629..a0763c536 100644 --- a/src/main/java/stirling/software/SPDF/EE/KeygenLicenseVerifier.java +++ b/enterprise/src/main/java/stirling/software/enterprise/configuration/KeygenLicenseVerifier.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.EE; +package stirling.software.enterprise.configuration; import java.net.URI; import java.net.http.HttpClient; @@ -19,7 +19,7 @@ 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.util.GeneralUtils; import stirling.software.common.model.ApplicationProperties; @Service diff --git a/src/main/java/stirling/software/SPDF/EE/LicenseKeyChecker.java b/enterprise/src/main/java/stirling/software/enterprise/configuration/LicenseKeyChecker.java similarity index 94% rename from src/main/java/stirling/software/SPDF/EE/LicenseKeyChecker.java rename to enterprise/src/main/java/stirling/software/enterprise/configuration/LicenseKeyChecker.java index e00dfc133..28bb39641 100644 --- a/src/main/java/stirling/software/SPDF/EE/LicenseKeyChecker.java +++ b/enterprise/src/main/java/stirling/software/enterprise/configuration/LicenseKeyChecker.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.EE; +package stirling.software.enterprise.configuration; import java.io.IOException; import java.nio.file.Files; @@ -10,8 +10,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.enterprise.configuration.KeygenLicenseVerifier.License; +import stirling.software.common.util.GeneralUtils; import stirling.software.common.model.ApplicationProperties; @Component diff --git a/src/main/java/stirling/software/SPDF/config/security/CustomAuthenticationFailureHandler.java b/enterprise/src/main/java/stirling/software/enterprise/security/CustomAuthenticationFailureHandler.java similarity index 93% rename from src/main/java/stirling/software/SPDF/config/security/CustomAuthenticationFailureHandler.java rename to enterprise/src/main/java/stirling/software/enterprise/security/CustomAuthenticationFailureHandler.java index f4f103190..cae4282b4 100644 --- a/src/main/java/stirling/software/SPDF/config/security/CustomAuthenticationFailureHandler.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/CustomAuthenticationFailureHandler.java @@ -1,8 +1,11 @@ -package stirling.software.SPDF.config.security; +package stirling.software.enterprise.security; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Optional; - +import lombok.extern.slf4j.Slf4j; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.DisabledException; import org.springframework.security.authentication.InternalAuthenticationServiceException; @@ -10,14 +13,9 @@ import org.springframework.security.authentication.LockedException; import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler; - -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.model.User; +import stirling.software.enterprise.security.model.User; +import stirling.software.enterprise.security.service.LoginAttemptService; +import stirling.software.enterprise.security.service.UserService; @Slf4j public class CustomAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler { diff --git a/src/main/java/stirling/software/SPDF/config/security/CustomAuthenticationSuccessHandler.java b/enterprise/src/main/java/stirling/software/enterprise/security/CustomAuthenticationSuccessHandler.java similarity index 88% rename from src/main/java/stirling/software/SPDF/config/security/CustomAuthenticationSuccessHandler.java rename to enterprise/src/main/java/stirling/software/enterprise/security/CustomAuthenticationSuccessHandler.java index 9784a99cd..946bf2540 100644 --- a/src/main/java/stirling/software/SPDF/config/security/CustomAuthenticationSuccessHandler.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/CustomAuthenticationSuccessHandler.java @@ -1,19 +1,17 @@ -package stirling.software.SPDF.config.security; - -import java.io.IOException; - -import org.springframework.security.core.Authentication; -import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; -import org.springframework.security.web.savedrequest.SavedRequest; +package stirling.software.enterprise.security; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; - +import java.io.IOException; import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.utils.RequestUriUtils; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; +import org.springframework.security.web.savedrequest.SavedRequest; +import stirling.software.common.util.RequestUriUtil; +import stirling.software.enterprise.security.service.LoginAttemptService; +import stirling.software.enterprise.security.service.UserService; @Slf4j public class CustomAuthenticationSuccessHandler @@ -48,7 +46,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/enterprise/src/main/java/stirling/software/enterprise/security/CustomLogoutSuccessHandler.java similarity index 94% rename from src/main/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandler.java rename to enterprise/src/main/java/stirling/software/enterprise/security/CustomLogoutSuccessHandler.java index be400aeff..7e300cd9a 100644 --- a/src/main/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandler.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/CustomLogoutSuccessHandler.java @@ -1,35 +1,30 @@ -package stirling.software.SPDF.config.security; +package stirling.software.enterprise.security; +import com.coveo.saml.SamlClient; +import com.coveo.saml.SamlException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.security.cert.X509Certificate; import java.security.interfaces.RSAPrivateKey; import java.util.ArrayList; import java.util.List; - +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.core.io.Resource; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; import org.springframework.security.saml2.provider.service.authentication.Saml2Authentication; import org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler; - -import com.coveo.saml.SamlClient; -import com.coveo.saml.SamlException; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -import lombok.RequiredArgsConstructor; -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.configuration.AppConfig; 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.util.UrlUtils; +import stirling.software.enterprise.security.saml2.CertificateUtils; +import stirling.software.enterprise.security.saml2.CustomSaml2AuthenticatedPrincipal; @Slf4j @RequiredArgsConstructor @@ -38,6 +33,7 @@ public class CustomLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler { public static final String LOGOUT_PATH = "/login?logout=true"; private final ApplicationProperties applicationProperties; + private final AppConfig appConfig; @Override public void onLogoutSuccess( @@ -102,7 +98,7 @@ public class CustomLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler { // Set service provider keys for the SamlClient samlClient.setSPKeys(certificate, privateKey); - // Redirect to identity provider for logout + // Redirect to identity provider for logout. todo: add relay state samlClient.redirectToIdentityProvider(response, null, nameIdValue); } catch (Exception e) { log.error( @@ -172,11 +168,12 @@ public class CustomLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler { } } - private static SamlClient getSamlClient( + private SamlClient getSamlClient( String registrationId, SAML2 samlConf, List certificates) throws SamlException { + // fixMe: move to a config class String serverUrl = - SPDFApplication.getStaticBaseUrl() + ":" + SPDFApplication.getStaticPort(); + appConfig.getBaseUrl() + ":" + appConfig.getServerPort(); String relyingPartyIdentifier = serverUrl + "/saml2/service-provider-metadata/" + registrationId; diff --git a/src/main/java/stirling/software/SPDF/config/security/FirstLoginFilter.java b/enterprise/src/main/java/stirling/software/enterprise/security/FirstLoginFilter.java similarity index 90% rename from src/main/java/stirling/software/SPDF/config/security/FirstLoginFilter.java rename to enterprise/src/main/java/stirling/software/enterprise/security/FirstLoginFilter.java index a11eba7f0..4d98fb722 100644 --- a/src/main/java/stirling/software/SPDF/config/security/FirstLoginFilter.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/FirstLoginFilter.java @@ -1,26 +1,23 @@ -package stirling.software.SPDF.config.security; - -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Optional; - -import org.springframework.context.annotation.Lazy; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.stereotype.Component; -import org.springframework.web.filter.OncePerRequestFilter; +package stirling.software.enterprise.security; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; - +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Optional; import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.model.User; -import stirling.software.SPDF.utils.RequestUriUtils; +import org.springframework.context.annotation.Lazy; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; +import stirling.software.common.util.RequestUriUtil; +import stirling.software.enterprise.security.model.User; +import stirling.software.enterprise.security.service.UserService; @Slf4j @Component @@ -40,7 +37,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/enterprise/src/main/java/stirling/software/enterprise/security/IPRateLimitingFilter.java similarity index 85% rename from src/main/java/stirling/software/SPDF/config/security/IPRateLimitingFilter.java rename to enterprise/src/main/java/stirling/software/enterprise/security/IPRateLimitingFilter.java index 25f27d658..dc501a505 100644 --- a/src/main/java/stirling/software/SPDF/config/security/IPRateLimitingFilter.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/IPRateLimitingFilter.java @@ -1,15 +1,16 @@ -package stirling.software.SPDF.config.security; +package stirling.software.enterprise.security; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; - -import jakarta.servlet.*; -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 +30,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/src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java b/enterprise/src/main/java/stirling/software/enterprise/security/InitialSecuritySetup.java similarity index 90% rename from src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java rename to enterprise/src/main/java/stirling/software/enterprise/security/InitialSecuritySetup.java index 3b1a8d5fb..c8a98d429 100644 --- a/src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/InitialSecuritySetup.java @@ -1,19 +1,16 @@ -package stirling.software.SPDF.config.security; - -import java.sql.SQLException; -import java.util.UUID; - -import org.springframework.stereotype.Component; +package stirling.software.enterprise.security; import jakarta.annotation.PostConstruct; - +import java.sql.SQLException; +import java.util.UUID; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.config.interfaces.DatabaseInterface; -import stirling.software.SPDF.model.Role; +import org.springframework.stereotype.Component; import stirling.software.common.model.ApplicationProperties; import stirling.software.common.model.exception.UnsupportedProviderException; +import stirling.software.enterprise.security.model.Role; +import stirling.software.enterprise.security.service.DatabaseServiceInterface; +import stirling.software.enterprise.security.service.UserService; @Slf4j @Component @@ -24,7 +21,7 @@ public class InitialSecuritySetup { private final ApplicationProperties applicationProperties; - private final DatabaseInterface databaseService; + private final DatabaseServiceInterface databaseService; @PostConstruct public void init() { diff --git a/src/main/java/stirling/software/SPDF/config/security/RateLimitResetScheduler.java b/enterprise/src/main/java/stirling/software/enterprise/security/RateLimitResetScheduler.java similarity index 90% rename from src/main/java/stirling/software/SPDF/config/security/RateLimitResetScheduler.java rename to enterprise/src/main/java/stirling/software/enterprise/security/RateLimitResetScheduler.java index 5751ec871..072edfdc9 100644 --- a/src/main/java/stirling/software/SPDF/config/security/RateLimitResetScheduler.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/RateLimitResetScheduler.java @@ -1,9 +1,8 @@ -package stirling.software.SPDF.config.security; - -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; +package stirling.software.enterprise.security; import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; @Component @RequiredArgsConstructor diff --git a/enterprise/src/main/java/stirling/software/enterprise/security/SecurityConfiguration.java b/enterprise/src/main/java/stirling/software/enterprise/security/SecurityConfiguration.java new file mode 100644 index 000000000..036738bd6 --- /dev/null +++ b/enterprise/src/main/java/stirling/software/enterprise/security/SecurityConfiguration.java @@ -0,0 +1,320 @@ +package stirling.software.enterprise.security; + +import java.util.Optional; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; +import org.springframework.context.annotation.Lazy; +import org.springframework.security.authentication.ProviderManager; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.saml2.provider.service.authentication.OpenSaml4AuthenticationProvider; +import org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistrationRepository; +import org.springframework.security.saml2.provider.service.web.authentication.OpenSaml4AuthenticationRequestResolver; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository; +import org.springframework.security.web.csrf.CookieCsrfTokenRepository; +import org.springframework.security.web.csrf.CsrfTokenRequestAttributeHandler; +import org.springframework.security.web.savedrequest.NullRequestCache; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; +import stirling.software.common.configuration.AppConfig; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.enterprise.security.database.repository.JPATokenRepositoryImpl; +import stirling.software.enterprise.security.database.repository.PersistentLoginRepository; +import stirling.software.enterprise.security.model.User; +import stirling.software.enterprise.security.oauth2.CustomOAuth2AuthenticationFailureHandler; +import stirling.software.enterprise.security.oauth2.CustomOAuth2AuthenticationSuccessHandler; +import stirling.software.enterprise.security.saml2.CustomSaml2AuthenticationFailureHandler; +import stirling.software.enterprise.security.saml2.CustomSaml2AuthenticationSuccessHandler; +import stirling.software.enterprise.security.saml2.CustomSaml2ResponseAuthenticationConverter; +import stirling.software.enterprise.security.service.CustomOAuth2UserService; +import stirling.software.enterprise.security.service.CustomUserDetailsService; +import stirling.software.enterprise.security.service.LoginAttemptService; +import stirling.software.enterprise.security.service.UserService; +import stirling.software.enterprise.security.session.SessionPersistentRegistry; + +@Configuration +@EnableWebSecurity +@EnableMethodSecurity +@Slf4j +@DependsOn("runningProOrHigher") +public class SecurityConfiguration { + + private final CustomUserDetailsService userDetailsService; + private final UserService userService; + private final boolean loginEnabledValue; + private final boolean runningProOrHigher; + + private final ApplicationProperties applicationProperties; + private final AppConfig appConfig; + private final UserAuthenticationFilter userAuthenticationFilter; + private final LoginAttemptService loginAttemptService; + private final FirstLoginFilter firstLoginFilter; + private final SessionPersistentRegistry sessionRegistry; + private final PersistentLoginRepository persistentLoginRepository; + private final GrantedAuthoritiesMapper oAuth2userAuthoritiesMapper; + private final RelyingPartyRegistrationRepository saml2RelyingPartyRegistrations; + private final OpenSaml4AuthenticationRequestResolver saml2AuthenticationRequestResolver; + + public SecurityConfiguration( + PersistentLoginRepository persistentLoginRepository, + CustomUserDetailsService userDetailsService, + @Lazy UserService userService, + @Qualifier("loginEnabled") boolean loginEnabledValue, + @Qualifier("runningProOrHigher") boolean runningProOrHigher, + AppConfig appConfig, + ApplicationProperties applicationProperties, + UserAuthenticationFilter userAuthenticationFilter, + LoginAttemptService loginAttemptService, + FirstLoginFilter firstLoginFilter, + SessionPersistentRegistry sessionRegistry, + @Autowired(required = false) GrantedAuthoritiesMapper oAuth2userAuthoritiesMapper, + @Autowired(required = false) + RelyingPartyRegistrationRepository saml2RelyingPartyRegistrations, + @Autowired(required = false) + OpenSaml4AuthenticationRequestResolver saml2AuthenticationRequestResolver) { + this.userDetailsService = userDetailsService; + this.userService = userService; + this.loginEnabledValue = loginEnabledValue; + this.runningProOrHigher = runningProOrHigher; + this.appConfig = appConfig; + this.applicationProperties = applicationProperties; + this.userAuthenticationFilter = userAuthenticationFilter; + this.loginAttemptService = loginAttemptService; + this.firstLoginFilter = firstLoginFilter; + this.sessionRegistry = sessionRegistry; + this.persistentLoginRepository = persistentLoginRepository; + this.oAuth2userAuthoritiesMapper = oAuth2userAuthoritiesMapper; + this.saml2RelyingPartyRegistrations = saml2RelyingPartyRegistrations; + this.saml2AuthenticationRequestResolver = saml2AuthenticationRequestResolver; + } + + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } + + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + if (applicationProperties.getSecurity().getCsrfDisabled() || !loginEnabledValue) { + http.csrf(csrf -> csrf.disable()); + } + + if (loginEnabledValue) { + http.addFilterBefore( + userAuthenticationFilter, UsernamePasswordAuthenticationFilter.class); + if (!applicationProperties.getSecurity().getCsrfDisabled()) { + CookieCsrfTokenRepository cookieRepo = + CookieCsrfTokenRepository.withHttpOnlyFalse(); + CsrfTokenRequestAttributeHandler requestHandler = + new CsrfTokenRequestAttributeHandler(); + requestHandler.setCsrfRequestAttributeName(null); + http.csrf( + csrf -> + csrf.ignoringRequestMatchers( + request -> { + String apiKey = request.getHeader("X-API-KEY"); + // If there's no API key, don't ignore CSRF + // (return false) + if (apiKey == null || apiKey.trim().isEmpty()) { + return false; + } + // Validate API key using existing UserService + try { + Optional user = + userService.getUserByApiKey(apiKey); + // If API key is valid, ignore CSRF (return + // true) + // If API key is invalid, don't ignore CSRF + // (return false) + return user.isPresent(); + } catch (Exception e) { + // If there's any error validating the API + // key, don't ignore CSRF + return false; + } + }) + .csrfTokenRepository(cookieRepo) + .csrfTokenRequestHandler(requestHandler)); + } + http.addFilterBefore(rateLimitingFilter(), UsernamePasswordAuthenticationFilter.class); + http.addFilterAfter(firstLoginFilter, UsernamePasswordAuthenticationFilter.class); + http.sessionManagement( + sessionManagement -> + sessionManagement + .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) + .maximumSessions(10) + .maxSessionsPreventsLogin(false) + .sessionRegistry(sessionRegistry) + .expiredUrl("/login?logout=true")); + http.authenticationProvider(daoAuthenticationProvider()); + http.requestCache(requestCache -> requestCache.requestCache(new NullRequestCache())); + http.logout( + logout -> + logout.logoutRequestMatcher(new AntPathRequestMatcher("/logout")) + .logoutSuccessHandler( + new CustomLogoutSuccessHandler(applicationProperties, appConfig)) + .clearAuthentication(true) + .invalidateHttpSession(true) + .deleteCookies("JSESSIONID", "remember-me")); + http.rememberMe( + rememberMeConfigurer -> // Use the configurator directly + rememberMeConfigurer + .tokenRepository(persistentTokenRepository()) + .tokenValiditySeconds( // 14 days + 14 * 24 * 60 * 60) + .userDetailsService( // Your existing UserDetailsService + userDetailsService) + .useSecureCookie( // Enable secure cookie + true) + .rememberMeParameter( // Form parameter name + "remember-me") + .rememberMeCookieName( // Cookie name + "remember-me") + .alwaysRemember(false)); + http.authorizeHttpRequests( + authz -> + authz.requestMatchers( + req -> { + String uri = req.getRequestURI(); + String contextPath = req.getContextPath(); + // Remove the context path from the URI + String trimmedUri = + uri.startsWith(contextPath) + ? uri.substring( + contextPath.length()) + : uri; + return trimmedUri.startsWith("/login") + || trimmedUri.startsWith("/oauth") + || trimmedUri.startsWith("/saml2") + || trimmedUri.endsWith(".svg") + || trimmedUri.startsWith("/register") + || trimmedUri.startsWith("/error") + || trimmedUri.startsWith("/images/") + || trimmedUri.startsWith("/public/") + || trimmedUri.startsWith("/css/") + || trimmedUri.startsWith("/fonts/") + || trimmedUri.startsWith("/js/") + || trimmedUri.startsWith( + "/api/v1/info/status"); + }) + .permitAll() + .anyRequest() + .authenticated()); + // Handle User/Password Logins + if (applicationProperties.getSecurity().isUserPass()) { + http.formLogin( + formLogin -> + formLogin + .loginPage("/login") + .successHandler( + new CustomAuthenticationSuccessHandler( + loginAttemptService, userService)) + .failureHandler( + new CustomAuthenticationFailureHandler( + loginAttemptService, userService)) + .defaultSuccessUrl("/") + .permitAll()); + } + // Handle OAUTH2 Logins + if (applicationProperties.getSecurity().isOauth2Active()) { + http.oauth2Login( + oauth2 -> + oauth2.loginPage("/oauth2") + /* + This Custom handler is used to check if the OAUTH2 user trying to log in, already exists in the database. + If user exists, login proceeds as usual. If user does not exist, then it is auto-created but only if 'OAUTH2AutoCreateUser' + is set as true, else login fails with an error message advising the same. + */ + .successHandler( + new CustomOAuth2AuthenticationSuccessHandler( + loginAttemptService, + applicationProperties, + userService)) + .failureHandler( + new CustomOAuth2AuthenticationFailureHandler()) + . // Add existing Authorities from the database + userInfoEndpoint( + userInfoEndpoint -> + userInfoEndpoint + .oidcUserService( + new CustomOAuth2UserService( + applicationProperties, + userService, + loginAttemptService)) + .userAuthoritiesMapper( + oAuth2userAuthoritiesMapper)) + .permitAll()); + } + // Handle SAML + if (applicationProperties.getSecurity().isSaml2Active() && runningProOrHigher) { + // Configure the authentication provider + OpenSaml4AuthenticationProvider authenticationProvider = + new OpenSaml4AuthenticationProvider(); + authenticationProvider.setResponseAuthenticationConverter( + new CustomSaml2ResponseAuthenticationConverter(userService)); + http.authenticationProvider(authenticationProvider) + .saml2Login( + saml2 -> { + try { + saml2.loginPage("/saml2") + .relyingPartyRegistrationRepository( + saml2RelyingPartyRegistrations) + .authenticationManager( + new ProviderManager(authenticationProvider)) + .successHandler( + new CustomSaml2AuthenticationSuccessHandler( + loginAttemptService, + applicationProperties, + userService)) + .failureHandler( + new CustomSaml2AuthenticationFailureHandler()) + .authenticationRequestResolver( + saml2AuthenticationRequestResolver); + } catch (Exception e) { + log.error("Error configuring SAML 2 login", e); + throw new RuntimeException(e); + } + }); + } + } else { + log.debug("SAML 2 login is not enabled. Using default."); + http.authorizeHttpRequests(authz -> authz.anyRequest().permitAll()); + } + return http.build(); + } + + public DaoAuthenticationProvider daoAuthenticationProvider() { + DaoAuthenticationProvider provider = new DaoAuthenticationProvider(); + provider.setUserDetailsService(userDetailsService); + provider.setPasswordEncoder(passwordEncoder()); + return provider; + } + + @Bean + public IPRateLimitingFilter rateLimitingFilter() { + // Example limit TODO add config level + int maxRequestsPerIp = 1000000; + return new IPRateLimitingFilter(maxRequestsPerIp, maxRequestsPerIp); + } + + @Bean + public PersistentTokenRepository persistentTokenRepository() { + return new JPATokenRepositoryImpl(persistentLoginRepository); + } + + @Bean + public boolean activeSecurity() { + return true; + } +} diff --git a/src/main/java/stirling/software/SPDF/config/security/UserAuthenticationFilter.java b/enterprise/src/main/java/stirling/software/enterprise/security/UserAuthenticationFilter.java similarity index 96% rename from src/main/java/stirling/software/SPDF/config/security/UserAuthenticationFilter.java rename to enterprise/src/main/java/stirling/software/enterprise/security/UserAuthenticationFilter.java index 70e65e23b..a87bf3069 100644 --- a/src/main/java/stirling/software/SPDF/config/security/UserAuthenticationFilter.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/UserAuthenticationFilter.java @@ -1,9 +1,13 @@ -package stirling.software.SPDF.config.security; +package stirling.software.enterprise.security; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; import java.util.Optional; - +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Lazy; import org.springframework.http.HttpStatus; @@ -16,21 +20,14 @@ import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; - -import jakarta.servlet.FilterChain; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticatedPrincipal; -import stirling.software.SPDF.config.security.session.SessionPersistentRegistry; -import stirling.software.SPDF.model.ApiKeyAuthenticationToken; -import stirling.software.SPDF.model.User; 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.enterprise.security.model.ApiKeyAuthenticationToken; +import stirling.software.enterprise.security.model.User; +import stirling.software.enterprise.security.saml2.CustomSaml2AuthenticatedPrincipal; +import stirling.software.enterprise.security.service.UserService; +import stirling.software.enterprise.security.session.SessionPersistentRegistry; @Slf4j @Component diff --git a/src/main/java/stirling/software/SPDF/config/security/UserBasedRateLimitingFilter.java b/enterprise/src/main/java/stirling/software/enterprise/security/UserBasedRateLimitingFilter.java similarity index 98% rename from src/main/java/stirling/software/SPDF/config/security/UserBasedRateLimitingFilter.java rename to enterprise/src/main/java/stirling/software/enterprise/security/UserBasedRateLimitingFilter.java index 5ca7df214..eec6ee45a 100644 --- a/src/main/java/stirling/software/SPDF/config/security/UserBasedRateLimitingFilter.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/UserBasedRateLimitingFilter.java @@ -1,10 +1,17 @@ -package stirling.software.SPDF.config.security; +package stirling.software.enterprise.security; +import io.github.bucket4j.Bandwidth; +import io.github.bucket4j.Bucket; +import io.github.bucket4j.ConsumptionProbe; +import io.github.pixee.security.Newlines; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.time.Duration; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; - import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.http.HttpStatus; import org.springframework.security.core.Authentication; @@ -13,18 +20,7 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; - -import io.github.bucket4j.Bandwidth; -import io.github.bucket4j.Bucket; -import io.github.bucket4j.ConsumptionProbe; -import io.github.pixee.security.Newlines; - -import jakarta.servlet.FilterChain; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -import stirling.software.SPDF.model.Role; +import stirling.software.enterprise.security.model.Role; @Component public class UserBasedRateLimitingFilter extends OncePerRequestFilter { diff --git a/src/main/java/stirling/software/SPDF/controller/api/DatabaseController.java b/enterprise/src/main/java/stirling/software/enterprise/security/controller/api/DatabaseController.java similarity index 97% rename from src/main/java/stirling/software/SPDF/controller/api/DatabaseController.java rename to enterprise/src/main/java/stirling/software/enterprise/security/controller/api/DatabaseController.java index 8e3484f23..27e4c0bea 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/DatabaseController.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/controller/api/DatabaseController.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.controller.api; +package stirling.software.enterprise.security.controller.api; import java.io.IOException; import java.io.InputStream; @@ -26,8 +26,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.config.security.database.DatabaseService; +import stirling.software.enterprise.security.database.H2SQLCondition; +import stirling.software.enterprise.security.service.DatabaseService; @Slf4j @Controller diff --git a/src/main/java/stirling/software/SPDF/controller/api/UserController.java b/enterprise/src/main/java/stirling/software/enterprise/security/controller/api/UserController.java similarity index 96% rename from src/main/java/stirling/software/SPDF/controller/api/UserController.java rename to enterprise/src/main/java/stirling/software/enterprise/security/controller/api/UserController.java index bdd7adb14..14bc492a2 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/UserController.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/controller/api/UserController.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.controller.api; +package stirling.software.enterprise.security.controller.api; import java.io.IOException; import java.security.Principal; @@ -30,15 +30,15 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.config.security.UserService; -import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticatedPrincipal; -import stirling.software.SPDF.config.security.session.SessionPersistentRegistry; -import stirling.software.SPDF.model.AuthenticationType; -import stirling.software.SPDF.model.Role; -import stirling.software.SPDF.model.User; -import stirling.software.SPDF.model.api.user.UsernameAndPass; +import stirling.software.enterprise.security.model.AuthenticationType; +import stirling.software.enterprise.security.model.Role; +import stirling.software.enterprise.security.model.User; import stirling.software.common.model.ApplicationProperties; import stirling.software.common.model.exception.UnsupportedProviderException; +import stirling.software.enterprise.security.model.api.user.UsernameAndPass; +import stirling.software.enterprise.security.saml2.CustomSaml2AuthenticatedPrincipal; +import stirling.software.enterprise.security.service.UserService; +import stirling.software.enterprise.security.session.SessionPersistentRegistry; @Controller @Tag(name = "User", description = "User APIs") diff --git a/src/main/java/stirling/software/SPDF/controller/web/AccountWebController.java b/enterprise/src/main/java/stirling/software/enterprise/security/controller/web/AccountWebController.java similarity index 96% rename from src/main/java/stirling/software/SPDF/controller/web/AccountWebController.java rename to enterprise/src/main/java/stirling/software/enterprise/security/controller/web/AccountWebController.java index 42a3f2da9..5a9fffcdd 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/AccountWebController.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/controller/web/AccountWebController.java @@ -1,6 +1,6 @@ -package stirling.software.SPDF.controller.web; +package stirling.software.enterprise.security.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; @@ -29,13 +29,11 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticatedPrincipal; -import stirling.software.SPDF.config.security.session.SessionPersistentRegistry; -import stirling.software.SPDF.model.Authority; -import stirling.software.SPDF.model.Role; -import stirling.software.SPDF.model.SessionEntity; -import stirling.software.SPDF.model.User; -import stirling.software.SPDF.repository.UserRepository; +import stirling.software.enterprise.security.model.Authority; +import stirling.software.enterprise.security.model.Role; +import stirling.software.enterprise.security.model.SessionEntity; +import stirling.software.enterprise.security.model.User; +import stirling.software.enterprise.security.database.repository.UserRepository; import stirling.software.common.model.ApplicationProperties; import stirling.software.common.model.ApplicationProperties.Security; import stirling.software.common.model.ApplicationProperties.Security.OAUTH2; @@ -44,6 +42,8 @@ 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.enterprise.security.saml2.CustomSaml2AuthenticatedPrincipal; +import stirling.software.enterprise.security.session.SessionPersistentRegistry; @Controller @Slf4j diff --git a/src/main/java/stirling/software/SPDF/controller/web/DatabaseWebController.java b/enterprise/src/main/java/stirling/software/enterprise/security/controller/web/DatabaseWebController.java similarity index 89% rename from src/main/java/stirling/software/SPDF/controller/web/DatabaseWebController.java rename to enterprise/src/main/java/stirling/software/enterprise/security/controller/web/DatabaseWebController.java index 738db8d89..f6889d2bd 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/DatabaseWebController.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/controller/web/DatabaseWebController.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.controller.web; +package stirling.software.enterprise.security.controller.web; import java.util.List; @@ -14,8 +14,8 @@ 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; +import stirling.software.enterprise.security.service.DatabaseService; @Controller @Tag(name = "Database Management", description = "Database management and security APIs") diff --git a/src/main/java/stirling/software/SPDF/controller/api/H2SQLCondition.java b/enterprise/src/main/java/stirling/software/enterprise/security/database/H2SQLCondition.java similarity index 77% rename from src/main/java/stirling/software/SPDF/controller/api/H2SQLCondition.java rename to enterprise/src/main/java/stirling/software/enterprise/security/database/H2SQLCondition.java index ebdb1f058..60311363c 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/H2SQLCondition.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/database/H2SQLCondition.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.controller.api; +package stirling.software.enterprise.security.database; import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; @@ -12,8 +12,12 @@ public class H2SQLCondition implements Condition { Boolean.parseBoolean( context.getEnvironment() .getProperty("system.datasource.enableCustomDatabase")); + + if (!enableCustomDatabase) { + return false; + } + String dataSourceType = context.getEnvironment().getProperty("system.datasource.type"); - return !enableCustomDatabase - || (enableCustomDatabase && "h2".equalsIgnoreCase(dataSourceType)); + return "h2".equalsIgnoreCase(dataSourceType); } } diff --git a/src/main/java/stirling/software/SPDF/config/security/database/ScheduledTasks.java b/enterprise/src/main/java/stirling/software/enterprise/security/database/ScheduledTasks.java similarity index 71% rename from src/main/java/stirling/software/SPDF/config/security/database/ScheduledTasks.java rename to enterprise/src/main/java/stirling/software/enterprise/security/database/ScheduledTasks.java index 73a33972a..825ac74b3 100644 --- a/src/main/java/stirling/software/SPDF/config/security/database/ScheduledTasks.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/database/ScheduledTasks.java @@ -1,23 +1,19 @@ -package stirling.software.SPDF.config.security.database; +package stirling.software.enterprise.security.database; import java.sql.SQLException; - +import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Conditional; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; - -import lombok.RequiredArgsConstructor; - -import stirling.software.SPDF.config.interfaces.DatabaseInterface; -import stirling.software.SPDF.controller.api.H2SQLCondition; import stirling.software.common.model.exception.UnsupportedProviderException; +import stirling.software.enterprise.security.service.DatabaseServiceInterface; @Component @Conditional(H2SQLCondition.class) @RequiredArgsConstructor public class ScheduledTasks { - private final DatabaseInterface databaseService; + private final DatabaseServiceInterface databaseService; @Scheduled(cron = "0 0 0 * * ?") public void performBackup() throws SQLException, UnsupportedProviderException { diff --git a/src/main/java/stirling/software/SPDF/repository/AuthorityRepository.java b/enterprise/src/main/java/stirling/software/enterprise/security/database/repository/AuthorityRepository.java similarity index 74% rename from src/main/java/stirling/software/SPDF/repository/AuthorityRepository.java rename to enterprise/src/main/java/stirling/software/enterprise/security/database/repository/AuthorityRepository.java index 01f23dd91..f7cdbb829 100644 --- a/src/main/java/stirling/software/SPDF/repository/AuthorityRepository.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/database/repository/AuthorityRepository.java @@ -1,11 +1,11 @@ -package stirling.software.SPDF.repository; +package stirling.software.enterprise.security.database.repository; import java.util.Set; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -import stirling.software.SPDF.model.Authority; +import stirling.software.enterprise.security.model.Authority; @Repository public interface AuthorityRepository extends JpaRepository { diff --git a/src/main/java/stirling/software/SPDF/repository/JPATokenRepositoryImpl.java b/enterprise/src/main/java/stirling/software/enterprise/security/database/repository/JPATokenRepositoryImpl.java similarity index 93% rename from src/main/java/stirling/software/SPDF/repository/JPATokenRepositoryImpl.java rename to enterprise/src/main/java/stirling/software/enterprise/security/database/repository/JPATokenRepositoryImpl.java index 98becfd48..67cd5f46b 100644 --- a/src/main/java/stirling/software/SPDF/repository/JPATokenRepositoryImpl.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/database/repository/JPATokenRepositoryImpl.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.repository; +package stirling.software.enterprise.security.database.repository; import java.util.Date; @@ -6,7 +6,7 @@ import org.springframework.security.web.authentication.rememberme.PersistentReme import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository; import org.springframework.transaction.annotation.Transactional; -import stirling.software.SPDF.model.PersistentLogin; +import stirling.software.enterprise.security.model.PersistentLogin; public class JPATokenRepositoryImpl implements PersistentTokenRepository { diff --git a/src/main/java/stirling/software/SPDF/repository/PersistentLoginRepository.java b/enterprise/src/main/java/stirling/software/enterprise/security/database/repository/PersistentLoginRepository.java similarity index 66% rename from src/main/java/stirling/software/SPDF/repository/PersistentLoginRepository.java rename to enterprise/src/main/java/stirling/software/enterprise/security/database/repository/PersistentLoginRepository.java index e8ef19ce2..ea438f34f 100644 --- a/src/main/java/stirling/software/SPDF/repository/PersistentLoginRepository.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/database/repository/PersistentLoginRepository.java @@ -1,9 +1,9 @@ -package stirling.software.SPDF.repository; +package stirling.software.enterprise.security.database.repository; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -import stirling.software.SPDF.model.PersistentLogin; +import stirling.software.enterprise.security.model.PersistentLogin; @Repository public interface PersistentLoginRepository extends JpaRepository { diff --git a/src/main/java/stirling/software/SPDF/repository/UserRepository.java b/enterprise/src/main/java/stirling/software/enterprise/security/database/repository/UserRepository.java similarity index 86% rename from src/main/java/stirling/software/SPDF/repository/UserRepository.java rename to enterprise/src/main/java/stirling/software/enterprise/security/database/repository/UserRepository.java index e1f53efb8..780f3787c 100644 --- a/src/main/java/stirling/software/SPDF/repository/UserRepository.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/database/repository/UserRepository.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.repository; +package stirling.software.enterprise.security.database.repository; import java.util.List; import java.util.Optional; @@ -8,7 +8,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; -import stirling.software.SPDF.model.User; +import stirling.software.enterprise.security.model.User; @Repository public interface UserRepository extends JpaRepository { diff --git a/src/main/java/stirling/software/SPDF/model/ApiKeyAuthenticationToken.java b/enterprise/src/main/java/stirling/software/enterprise/security/model/ApiKeyAuthenticationToken.java similarity index 96% rename from src/main/java/stirling/software/SPDF/model/ApiKeyAuthenticationToken.java rename to enterprise/src/main/java/stirling/software/enterprise/security/model/ApiKeyAuthenticationToken.java index f19fa1e95..61f5fb70c 100644 --- a/src/main/java/stirling/software/SPDF/model/ApiKeyAuthenticationToken.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/model/ApiKeyAuthenticationToken.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model; +package stirling.software.enterprise.security.model; import java.util.Collection; diff --git a/src/main/java/stirling/software/SPDF/model/AttemptCounter.java b/enterprise/src/main/java/stirling/software/enterprise/security/model/AttemptCounter.java similarity index 93% rename from src/main/java/stirling/software/SPDF/model/AttemptCounter.java rename to enterprise/src/main/java/stirling/software/enterprise/security/model/AttemptCounter.java index 8267bddb7..75f468f29 100644 --- a/src/main/java/stirling/software/SPDF/model/AttemptCounter.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/model/AttemptCounter.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model; +package stirling.software.enterprise.security.model; public class AttemptCounter { private int attemptCount; diff --git a/src/main/java/stirling/software/SPDF/model/AuthenticationType.java b/enterprise/src/main/java/stirling/software/enterprise/security/model/AuthenticationType.java similarity index 50% rename from src/main/java/stirling/software/SPDF/model/AuthenticationType.java rename to enterprise/src/main/java/stirling/software/enterprise/security/model/AuthenticationType.java index 80419cdd2..c755387fb 100644 --- a/src/main/java/stirling/software/SPDF/model/AuthenticationType.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/model/AuthenticationType.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model; +package stirling.software.enterprise.security.model; public enum AuthenticationType { WEB, diff --git a/src/main/java/stirling/software/SPDF/model/Authority.java b/enterprise/src/main/java/stirling/software/enterprise/security/model/Authority.java similarity index 94% rename from src/main/java/stirling/software/SPDF/model/Authority.java rename to enterprise/src/main/java/stirling/software/enterprise/security/model/Authority.java index 4a0ed7255..aed494f6a 100644 --- a/src/main/java/stirling/software/SPDF/model/Authority.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/model/Authority.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model; +package stirling.software.enterprise.security.model; import java.io.Serializable; diff --git a/src/main/java/stirling/software/SPDF/model/PersistentLogin.java b/enterprise/src/main/java/stirling/software/enterprise/security/model/PersistentLogin.java similarity index 91% rename from src/main/java/stirling/software/SPDF/model/PersistentLogin.java rename to enterprise/src/main/java/stirling/software/enterprise/security/model/PersistentLogin.java index c0990199c..cfd20c238 100644 --- a/src/main/java/stirling/software/SPDF/model/PersistentLogin.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/model/PersistentLogin.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model; +package stirling.software.enterprise.security.model; import java.util.Date; diff --git a/src/main/java/stirling/software/SPDF/model/Role.java b/enterprise/src/main/java/stirling/software/enterprise/security/model/Role.java similarity index 97% rename from src/main/java/stirling/software/SPDF/model/Role.java rename to enterprise/src/main/java/stirling/software/enterprise/security/model/Role.java index 7d45e3da3..0d08c6259 100644 --- a/src/main/java/stirling/software/SPDF/model/Role.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/model/Role.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model; +package stirling.software.enterprise.security.model; import java.util.LinkedHashMap; import java.util.Map; diff --git a/src/main/java/stirling/software/SPDF/model/SessionEntity.java b/enterprise/src/main/java/stirling/software/enterprise/security/model/SessionEntity.java similarity index 88% rename from src/main/java/stirling/software/SPDF/model/SessionEntity.java rename to enterprise/src/main/java/stirling/software/enterprise/security/model/SessionEntity.java index bba7b33dc..af815a095 100644 --- a/src/main/java/stirling/software/SPDF/model/SessionEntity.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/model/SessionEntity.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model; +package stirling.software.enterprise.security.model; import java.io.Serializable; import java.util.Date; diff --git a/src/main/java/stirling/software/SPDF/model/User.java b/enterprise/src/main/java/stirling/software/enterprise/security/model/User.java similarity index 98% rename from src/main/java/stirling/software/SPDF/model/User.java rename to enterprise/src/main/java/stirling/software/enterprise/security/model/User.java index 1eb9da991..8be4a4da8 100644 --- a/src/main/java/stirling/software/SPDF/model/User.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/model/User.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model; +package stirling.software.enterprise.security.model; import java.io.Serializable; import java.util.HashMap; diff --git a/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserDetails.java b/enterprise/src/main/java/stirling/software/enterprise/security/model/api/user/UpdateUserDetails.java similarity index 86% rename from src/main/java/stirling/software/SPDF/model/api/user/UpdateUserDetails.java rename to enterprise/src/main/java/stirling/software/enterprise/security/model/api/user/UpdateUserDetails.java index f69e4c658..c81e90dd8 100644 --- a/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserDetails.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/model/api/user/UpdateUserDetails.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model.api.user; +package stirling.software.enterprise.security.model.api.user; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserUsername.java b/enterprise/src/main/java/stirling/software/enterprise/security/model/api/user/UpdateUserUsername.java similarity index 82% rename from src/main/java/stirling/software/SPDF/model/api/user/UpdateUserUsername.java rename to enterprise/src/main/java/stirling/software/enterprise/security/model/api/user/UpdateUserUsername.java index b4b0105f3..664857173 100644 --- a/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserUsername.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/model/api/user/UpdateUserUsername.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model.api.user; +package stirling.software.enterprise.security.model.api.user; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/src/main/java/stirling/software/SPDF/model/api/user/Username.java b/enterprise/src/main/java/stirling/software/enterprise/security/model/api/user/Username.java similarity index 81% rename from src/main/java/stirling/software/SPDF/model/api/user/Username.java rename to enterprise/src/main/java/stirling/software/enterprise/security/model/api/user/Username.java index 5c8d8a482..cb9f3c896 100644 --- a/src/main/java/stirling/software/SPDF/model/api/user/Username.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/model/api/user/Username.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model.api.user; +package stirling.software.enterprise.security.model.api.user; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/src/main/java/stirling/software/SPDF/model/api/user/UsernameAndPass.java b/enterprise/src/main/java/stirling/software/enterprise/security/model/api/user/UsernameAndPass.java similarity index 82% rename from src/main/java/stirling/software/SPDF/model/api/user/UsernameAndPass.java rename to enterprise/src/main/java/stirling/software/enterprise/security/model/api/user/UsernameAndPass.java index e9a205c0d..46c25ae4e 100644 --- a/src/main/java/stirling/software/SPDF/model/api/user/UsernameAndPass.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/model/api/user/UsernameAndPass.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.model.api.user; +package stirling.software.enterprise.security.model.api.user; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2AuthenticationFailureHandler.java b/enterprise/src/main/java/stirling/software/enterprise/security/oauth2/CustomOAuth2AuthenticationFailureHandler.java similarity index 97% rename from src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2AuthenticationFailureHandler.java rename to enterprise/src/main/java/stirling/software/enterprise/security/oauth2/CustomOAuth2AuthenticationFailureHandler.java index 9440a6718..472af7f86 100644 --- a/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2AuthenticationFailureHandler.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/oauth2/CustomOAuth2AuthenticationFailureHandler.java @@ -1,7 +1,10 @@ -package stirling.software.SPDF.config.security.oauth2; +package stirling.software.enterprise.security.oauth2; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; - +import lombok.extern.slf4j.Slf4j; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.DisabledException; import org.springframework.security.authentication.LockedException; @@ -10,12 +13,6 @@ import org.springframework.security.oauth2.core.OAuth2AuthenticationException; import org.springframework.security.oauth2.core.OAuth2Error; import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -import lombok.extern.slf4j.Slf4j; - @Slf4j public class CustomOAuth2AuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler { diff --git a/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java b/enterprise/src/main/java/stirling/software/enterprise/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java similarity index 90% rename from src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java rename to enterprise/src/main/java/stirling/software/enterprise/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java index bfe4d71fe..8b8f2f6c4 100644 --- a/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java @@ -1,29 +1,25 @@ -package stirling.software.SPDF.config.security.oauth2; +package stirling.software.enterprise.security.oauth2; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; import java.io.IOException; import java.sql.SQLException; - +import lombok.RequiredArgsConstructor; import org.springframework.security.authentication.LockedException; import org.springframework.security.core.Authentication; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; import org.springframework.security.web.savedrequest.SavedRequest; - -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.servlet.http.HttpSession; - -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; +import stirling.software.enterprise.security.model.AuthenticationType; +import stirling.software.enterprise.security.service.LoginAttemptService; +import stirling.software.enterprise.security.service.UserService; @RequiredArgsConstructor public class CustomOAuth2AuthenticationSuccessHandler @@ -56,7 +52,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/enterprise/src/main/java/stirling/software/enterprise/security/oauth2/OAuth2Configuration.java similarity index 96% rename from src/main/java/stirling/software/SPDF/config/security/oauth2/OAuth2Configuration.java rename to enterprise/src/main/java/stirling/software/enterprise/security/oauth2/OAuth2Configuration.java index 0cb6bf3c6..f9cf909a9 100644 --- a/src/main/java/stirling/software/SPDF/config/security/oauth2/OAuth2Configuration.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/oauth2/OAuth2Configuration.java @@ -1,15 +1,11 @@ -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; +package stirling.software.enterprise.security.oauth2; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Set; - +import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -22,20 +18,20 @@ import org.springframework.security.oauth2.client.registration.ClientRegistratio import org.springframework.security.oauth2.client.registration.ClientRegistrations; import org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository; import org.springframework.security.oauth2.core.user.OAuth2UserAuthority; - -import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.config.security.UserService; -import stirling.software.SPDF.model.User; -import stirling.software.SPDF.model.exception.NoProviderFoundException; 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.exception.NoProviderFoundException; 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.enterprise.security.model.User; +import stirling.software.enterprise.security.service.UserService; +import static org.springframework.security.oauth2.core.AuthorizationGrantType.AUTHORIZATION_CODE; +import static stirling.software.common.util.ProviderUtil.validateProvider; +import static stirling.software.common.util.ValidationUtil.isStringEmpty; @Slf4j @Configuration diff --git a/src/main/java/stirling/software/SPDF/config/security/saml2/CertificateUtils.java b/enterprise/src/main/java/stirling/software/enterprise/security/saml2/CertificateUtils.java similarity index 97% rename from src/main/java/stirling/software/SPDF/config/security/saml2/CertificateUtils.java rename to enterprise/src/main/java/stirling/software/enterprise/security/saml2/CertificateUtils.java index 354e78750..f37a2de0f 100644 --- a/src/main/java/stirling/software/SPDF/config/security/saml2/CertificateUtils.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/saml2/CertificateUtils.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.config.security.saml2; +package stirling.software.enterprise.security.saml2; import java.io.ByteArrayInputStream; import java.io.InputStreamReader; @@ -6,7 +6,6 @@ import java.nio.charset.StandardCharsets; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.security.interfaces.RSAPrivateKey; - import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; import org.bouncycastle.openssl.PEMKeyPair; import org.bouncycastle.openssl.PEMParser; diff --git a/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2AuthenticatedPrincipal.java b/enterprise/src/main/java/stirling/software/enterprise/security/saml2/CustomSaml2AuthenticatedPrincipal.java similarity index 93% rename from src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2AuthenticatedPrincipal.java rename to enterprise/src/main/java/stirling/software/enterprise/security/saml2/CustomSaml2AuthenticatedPrincipal.java index fbcdb31b4..341b137ed 100644 --- a/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2AuthenticatedPrincipal.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/saml2/CustomSaml2AuthenticatedPrincipal.java @@ -1,9 +1,8 @@ -package stirling.software.SPDF.config.security.saml2; +package stirling.software.enterprise.security.saml2; import java.io.Serializable; import java.util.List; import java.util.Map; - import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.security.saml2.provider.service.authentication.Saml2AuthenticatedPrincipal; diff --git a/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2AuthenticationFailureHandler.java b/enterprise/src/main/java/stirling/software/enterprise/security/saml2/CustomSaml2AuthenticationFailureHandler.java similarity index 96% rename from src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2AuthenticationFailureHandler.java rename to enterprise/src/main/java/stirling/software/enterprise/security/saml2/CustomSaml2AuthenticationFailureHandler.java index 884c3bd2e..a44ab18ce 100644 --- a/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2AuthenticationFailureHandler.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/saml2/CustomSaml2AuthenticationFailureHandler.java @@ -1,7 +1,9 @@ -package stirling.software.SPDF.config.security.saml2; +package stirling.software.enterprise.security.saml2; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; - +import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.security.authentication.ProviderNotFoundException; import org.springframework.security.core.AuthenticationException; @@ -9,11 +11,6 @@ import org.springframework.security.saml2.core.Saml2Error; import org.springframework.security.saml2.provider.service.authentication.Saml2AuthenticationException; import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -import lombok.extern.slf4j.Slf4j; - @Slf4j @ConditionalOnProperty(name = "security.saml2.enabled", havingValue = "true") public class CustomSaml2AuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler { diff --git a/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2AuthenticationSuccessHandler.java b/enterprise/src/main/java/stirling/software/enterprise/security/saml2/CustomSaml2AuthenticationSuccessHandler.java similarity index 93% rename from src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2AuthenticationSuccessHandler.java rename to enterprise/src/main/java/stirling/software/enterprise/security/saml2/CustomSaml2AuthenticationSuccessHandler.java index b1acff1ae..efd85be08 100644 --- a/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2AuthenticationSuccessHandler.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/saml2/CustomSaml2AuthenticationSuccessHandler.java @@ -1,28 +1,24 @@ -package stirling.software.SPDF.config.security.saml2; - -import java.io.IOException; -import java.sql.SQLException; - -import org.springframework.security.authentication.LockedException; -import org.springframework.security.core.Authentication; -import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; -import org.springframework.security.web.savedrequest.SavedRequest; +package stirling.software.enterprise.security.saml2; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; - +import java.io.IOException; +import java.sql.SQLException; import lombok.AllArgsConstructor; 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 org.springframework.security.authentication.LockedException; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; +import org.springframework.security.web.savedrequest.SavedRequest; 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; +import stirling.software.enterprise.security.model.AuthenticationType; +import stirling.software.enterprise.security.service.LoginAttemptService; +import stirling.software.enterprise.security.service.UserService; @AllArgsConstructor @Slf4j @@ -58,7 +54,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/config/security/saml2/CustomSaml2ResponseAuthenticationConverter.java b/enterprise/src/main/java/stirling/software/enterprise/security/saml2/CustomSaml2ResponseAuthenticationConverter.java similarity index 94% rename from src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2ResponseAuthenticationConverter.java rename to enterprise/src/main/java/stirling/software/enterprise/security/saml2/CustomSaml2ResponseAuthenticationConverter.java index 4a9cdd284..e41baff90 100644 --- a/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2ResponseAuthenticationConverter.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/saml2/CustomSaml2ResponseAuthenticationConverter.java @@ -1,7 +1,12 @@ -package stirling.software.SPDF.config.security.saml2; - -import java.util.*; +package stirling.software.enterprise.security.saml2; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.opensaml.core.xml.XMLObject; import org.opensaml.saml.saml2.core.Assertion; import org.opensaml.saml.saml2.core.Attribute; @@ -12,12 +17,8 @@ import org.springframework.core.convert.converter.Converter; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.saml2.provider.service.authentication.OpenSaml4AuthenticationProvider.ResponseToken; import org.springframework.security.saml2.provider.service.authentication.Saml2Authentication; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.config.security.UserService; -import stirling.software.SPDF.model.User; +import stirling.software.enterprise.security.model.User; +import stirling.software.enterprise.security.service.UserService; @Slf4j @ConditionalOnProperty(name = "security.saml2.enabled", havingValue = "true") diff --git a/src/main/java/stirling/software/SPDF/config/security/saml2/SAML2Configuration.java b/enterprise/src/main/java/stirling/software/enterprise/security/saml2/SAML2Configuration.java similarity index 99% rename from src/main/java/stirling/software/SPDF/config/security/saml2/SAML2Configuration.java rename to enterprise/src/main/java/stirling/software/enterprise/security/saml2/SAML2Configuration.java index 8a6ff10cc..af5fa80f0 100644 --- a/src/main/java/stirling/software/SPDF/config/security/saml2/SAML2Configuration.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/saml2/SAML2Configuration.java @@ -1,9 +1,11 @@ -package stirling.software.SPDF.config.security.saml2; +package stirling.software.enterprise.security.saml2; +import jakarta.servlet.http.HttpServletRequest; import java.security.cert.X509Certificate; import java.util.Collections; import java.util.UUID; - +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.opensaml.saml.saml2.core.AuthnRequest; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; @@ -18,12 +20,6 @@ import org.springframework.security.saml2.provider.service.registration.RelyingP import org.springframework.security.saml2.provider.service.registration.Saml2MessageBinding; import org.springframework.security.saml2.provider.service.web.HttpSessionSaml2AuthenticationRequestRepository; import org.springframework.security.saml2.provider.service.web.authentication.OpenSaml4AuthenticationRequestResolver; - -import jakarta.servlet.http.HttpServletRequest; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; - import stirling.software.common.model.ApplicationProperties; import stirling.software.common.model.ApplicationProperties.Security.SAML2; diff --git a/src/main/java/stirling/software/SPDF/config/security/AppUpdateAuthService.java b/enterprise/src/main/java/stirling/software/enterprise/security/service/AppUpdateAuthService.java similarity index 84% rename from src/main/java/stirling/software/SPDF/config/security/AppUpdateAuthService.java rename to enterprise/src/main/java/stirling/software/enterprise/security/service/AppUpdateAuthService.java index 7139fc686..817271228 100644 --- a/src/main/java/stirling/software/SPDF/config/security/AppUpdateAuthService.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/service/AppUpdateAuthService.java @@ -1,17 +1,14 @@ -package stirling.software.SPDF.config.security; +package stirling.software.enterprise.security.service; import java.util.Optional; - +import lombok.RequiredArgsConstructor; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; - -import stirling.software.SPDF.config.interfaces.ShowAdminInterface; -import stirling.software.SPDF.model.User; -import stirling.software.SPDF.repository.UserRepository; +import stirling.software.common.configuration.interfaces.ShowAdminInterface; import stirling.software.common.model.ApplicationProperties; +import stirling.software.enterprise.security.database.repository.UserRepository; +import stirling.software.enterprise.security.model.User; @Service @RequiredArgsConstructor diff --git a/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2UserService.java b/enterprise/src/main/java/stirling/software/enterprise/security/service/CustomOAuth2UserService.java similarity index 94% rename from src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2UserService.java rename to enterprise/src/main/java/stirling/software/enterprise/security/service/CustomOAuth2UserService.java index 458dd3477..954063ebb 100644 --- a/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2UserService.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/service/CustomOAuth2UserService.java @@ -1,7 +1,7 @@ -package stirling.software.SPDF.config.security.oauth2; +package stirling.software.enterprise.security.service; import java.util.Optional; - +import lombok.extern.slf4j.Slf4j; import org.springframework.security.authentication.LockedException; import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserRequest; import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserService; @@ -10,15 +10,10 @@ import org.springframework.security.oauth2.core.OAuth2AuthenticationException; import org.springframework.security.oauth2.core.OAuth2Error; import org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser; import org.springframework.security.oauth2.core.oidc.user.OidcUser; - -import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.config.security.LoginAttemptService; -import stirling.software.SPDF.config.security.UserService; -import stirling.software.SPDF.model.User; import stirling.software.common.model.ApplicationProperties; import stirling.software.common.model.ApplicationProperties.Security.OAUTH2; import stirling.software.common.model.enumeration.UsernameAttribute; +import stirling.software.enterprise.security.model.User; @Slf4j public class CustomOAuth2UserService implements OAuth2UserService { diff --git a/src/main/java/stirling/software/SPDF/config/security/CustomUserDetailsService.java b/enterprise/src/main/java/stirling/software/enterprise/security/service/CustomUserDetailsService.java similarity index 89% rename from src/main/java/stirling/software/SPDF/config/security/CustomUserDetailsService.java rename to enterprise/src/main/java/stirling/software/enterprise/security/service/CustomUserDetailsService.java index 74c3fb9a4..faeb941aa 100644 --- a/src/main/java/stirling/software/SPDF/config/security/CustomUserDetailsService.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/service/CustomUserDetailsService.java @@ -1,8 +1,8 @@ -package stirling.software.SPDF.config.security; +package stirling.software.enterprise.security.service; import java.util.Collection; import java.util.Set; - +import lombok.RequiredArgsConstructor; import org.springframework.security.authentication.LockedException; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; @@ -10,12 +10,9 @@ import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; - -import stirling.software.SPDF.model.Authority; -import stirling.software.SPDF.model.User; -import stirling.software.SPDF.repository.UserRepository; +import stirling.software.enterprise.security.database.repository.UserRepository; +import stirling.software.enterprise.security.model.Authority; +import stirling.software.enterprise.security.model.User; @Service @RequiredArgsConstructor diff --git a/src/main/java/stirling/software/SPDF/config/security/database/DatabaseService.java b/enterprise/src/main/java/stirling/software/enterprise/security/service/DatabaseService.java similarity index 97% rename from src/main/java/stirling/software/SPDF/config/security/database/DatabaseService.java rename to enterprise/src/main/java/stirling/software/enterprise/security/service/DatabaseService.java index 07015c9b6..e878f9e15 100644 --- a/src/main/java/stirling/software/SPDF/config/security/database/DatabaseService.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/service/DatabaseService.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.config.security.database; +package stirling.software.enterprise.security.service; import java.io.IOException; import java.nio.file.DirectoryStream; @@ -23,15 +23,14 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.jdbc.datasource.init.CannotReadScriptException; import org.springframework.jdbc.datasource.init.ScriptException; import org.springframework.stereotype.Service; -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; +import stirling.software.common.model.exception.BackupNotFoundException; @Slf4j @Service -public class DatabaseService implements DatabaseInterface { +public class DatabaseService implements DatabaseServiceInterface { public static final String BACKUP_PREFIX = "backup_"; public static final String SQL_SUFFIX = ".sql"; diff --git a/src/main/java/stirling/software/SPDF/config/interfaces/DatabaseInterface.java b/enterprise/src/main/java/stirling/software/enterprise/security/service/DatabaseServiceInterface.java similarity index 67% rename from src/main/java/stirling/software/SPDF/config/interfaces/DatabaseInterface.java rename to enterprise/src/main/java/stirling/software/enterprise/security/service/DatabaseServiceInterface.java index 1c7511a7c..004b1a6e4 100644 --- a/src/main/java/stirling/software/SPDF/config/interfaces/DatabaseInterface.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/service/DatabaseServiceInterface.java @@ -1,12 +1,12 @@ -package stirling.software.SPDF.config.interfaces; +package stirling.software.enterprise.security.service; 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 { +public interface DatabaseServiceInterface { void exportDatabase() throws SQLException, UnsupportedProviderException; void importDatabase(); diff --git a/src/main/java/stirling/software/SPDF/config/security/LoginAttemptService.java b/enterprise/src/main/java/stirling/software/enterprise/security/service/LoginAttemptService.java similarity index 95% rename from src/main/java/stirling/software/SPDF/config/security/LoginAttemptService.java rename to enterprise/src/main/java/stirling/software/enterprise/security/service/LoginAttemptService.java index 9beba4760..5114fe8ce 100644 --- a/src/main/java/stirling/software/SPDF/config/security/LoginAttemptService.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/service/LoginAttemptService.java @@ -1,17 +1,13 @@ -package stirling.software.SPDF.config.security; - -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.TimeUnit; - -import org.springframework.stereotype.Service; +package stirling.software.enterprise.security.service; import jakarta.annotation.PostConstruct; - +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.model.AttemptCounter; +import org.springframework.stereotype.Service; import stirling.software.common.model.ApplicationProperties; +import stirling.software.enterprise.security.model.AttemptCounter; @Service @Slf4j diff --git a/src/main/java/stirling/software/SPDF/config/security/UserService.java b/enterprise/src/main/java/stirling/software/enterprise/security/service/UserService.java similarity index 95% rename from src/main/java/stirling/software/SPDF/config/security/UserService.java rename to enterprise/src/main/java/stirling/software/enterprise/security/service/UserService.java index f5571198d..684b3a2a9 100644 --- a/src/main/java/stirling/software/SPDF/config/security/UserService.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/service/UserService.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.config.security; +package stirling.software.enterprise.security.service; import java.io.IOException; import java.sql.SQLException; @@ -25,23 +25,21 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import stirling.software.SPDF.config.interfaces.DatabaseInterface; -import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticatedPrincipal; -import stirling.software.SPDF.config.security.session.SessionPersistentRegistry; -import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface; -import stirling.software.SPDF.model.AuthenticationType; -import stirling.software.SPDF.model.Authority; -import stirling.software.SPDF.model.Role; -import stirling.software.SPDF.model.User; -import stirling.software.SPDF.repository.AuthorityRepository; -import stirling.software.SPDF.repository.UserRepository; import stirling.software.common.model.ApplicationProperties; import stirling.software.common.model.exception.UnsupportedProviderException; +import stirling.software.enterprise.security.database.repository.AuthorityRepository; +import stirling.software.enterprise.security.database.repository.UserRepository; +import stirling.software.enterprise.security.model.AuthenticationType; +import stirling.software.enterprise.security.model.Authority; +import stirling.software.enterprise.security.model.Role; +import stirling.software.enterprise.security.model.User; +import stirling.software.enterprise.security.saml2.CustomSaml2AuthenticatedPrincipal; +import stirling.software.enterprise.security.session.SessionPersistentRegistry; @Service @Slf4j @RequiredArgsConstructor -public class UserService implements UserServiceInterface { +public class UserService implements UserServiceEnterpriseInterface { private final UserRepository userRepository; @@ -53,7 +51,7 @@ public class UserService implements UserServiceInterface { private final SessionPersistentRegistry sessionRegistry; - private final DatabaseInterface databaseService; + private final DatabaseServiceInterface databaseService; private final ApplicationProperties.Security.OAUTH2 oAuth2; @@ -415,7 +413,7 @@ public class UserService implements UserServiceInterface { if (principal instanceof UserDetails detailsUser) { return detailsUser.getUsername(); - } else if (principal instanceof stirling.software.SPDF.model.User domainUser) { + } else if (principal instanceof stirling.software.enterprise.security.model.User domainUser) { return domainUser.getUsername(); } else if (principal instanceof OAuth2User oAuth2User) { return oAuth2User.getAttribute(oAuth2.getUseAsUsername()); diff --git a/enterprise/src/main/java/stirling/software/enterprise/security/service/UserServiceEnterpriseInterface.java b/enterprise/src/main/java/stirling/software/enterprise/security/service/UserServiceEnterpriseInterface.java new file mode 100644 index 000000000..2ecbcdf57 --- /dev/null +++ b/enterprise/src/main/java/stirling/software/enterprise/security/service/UserServiceEnterpriseInterface.java @@ -0,0 +1,11 @@ +package stirling.software.enterprise.security.service; + +import stirling.software.common.service.UserServiceInterface; + +public interface UserServiceEnterpriseInterface extends UserServiceInterface { + String getApiKeyForUser(String username); + + String getCurrentUsername(); + + long getTotalUsersCount(); +} diff --git a/src/main/java/stirling/software/SPDF/config/security/session/CustomHttpSessionListener.java b/enterprise/src/main/java/stirling/software/enterprise/security/session/CustomHttpSessionListener.java similarity index 92% rename from src/main/java/stirling/software/SPDF/config/security/session/CustomHttpSessionListener.java rename to enterprise/src/main/java/stirling/software/enterprise/security/session/CustomHttpSessionListener.java index 09868eff9..17d72f6c0 100644 --- a/src/main/java/stirling/software/SPDF/config/security/session/CustomHttpSessionListener.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/session/CustomHttpSessionListener.java @@ -1,11 +1,9 @@ -package stirling.software.SPDF.config.security.session; - -import org.springframework.stereotype.Component; +package stirling.software.enterprise.security.session; import jakarta.servlet.http.HttpSessionEvent; import jakarta.servlet.http.HttpSessionListener; - import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; @Component @Slf4j diff --git a/src/main/java/stirling/software/SPDF/config/security/session/SessionPersistentRegistry.java b/enterprise/src/main/java/stirling/software/enterprise/security/session/SessionPersistentRegistry.java similarity index 95% rename from src/main/java/stirling/software/SPDF/config/security/session/SessionPersistentRegistry.java rename to enterprise/src/main/java/stirling/software/enterprise/security/session/SessionPersistentRegistry.java index 9e249f3a4..af3c737d9 100644 --- a/src/main/java/stirling/software/SPDF/config/security/session/SessionPersistentRegistry.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/session/SessionPersistentRegistry.java @@ -1,21 +1,22 @@ -package stirling.software.SPDF.config.security.session; +package stirling.software.enterprise.security.session; +import jakarta.transaction.Transactional; import java.time.Duration; -import java.util.*; - +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.session.SessionInformation; import org.springframework.security.core.session.SessionRegistry; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.stereotype.Component; - -import jakarta.transaction.Transactional; - -import lombok.RequiredArgsConstructor; - -import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticatedPrincipal; -import stirling.software.SPDF.model.SessionEntity; +import stirling.software.enterprise.security.model.SessionEntity; +import stirling.software.enterprise.security.saml2.CustomSaml2AuthenticatedPrincipal; @Component @RequiredArgsConstructor diff --git a/src/main/java/stirling/software/SPDF/config/security/session/SessionRegistryConfig.java b/enterprise/src/main/java/stirling/software/enterprise/security/session/SessionRegistryConfig.java similarity index 90% rename from src/main/java/stirling/software/SPDF/config/security/session/SessionRegistryConfig.java rename to enterprise/src/main/java/stirling/software/enterprise/security/session/SessionRegistryConfig.java index 8fa24e95a..d862ce194 100644 --- a/src/main/java/stirling/software/SPDF/config/security/session/SessionRegistryConfig.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/session/SessionRegistryConfig.java @@ -1,4 +1,4 @@ -package stirling.software.SPDF.config.security.session; +package stirling.software.enterprise.security.session; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/src/main/java/stirling/software/SPDF/config/security/session/SessionRepository.java b/enterprise/src/main/java/stirling/software/enterprise/security/session/SessionRepository.java similarity index 89% rename from src/main/java/stirling/software/SPDF/config/security/session/SessionRepository.java rename to enterprise/src/main/java/stirling/software/enterprise/security/session/SessionRepository.java index b7f0133f3..17eed20f3 100644 --- a/src/main/java/stirling/software/SPDF/config/security/session/SessionRepository.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/session/SessionRepository.java @@ -1,17 +1,14 @@ -package stirling.software.SPDF.config.security.session; +package stirling.software.enterprise.security.session; +import jakarta.transaction.Transactional; import java.util.Date; import java.util.List; - import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; - -import jakarta.transaction.Transactional; - -import stirling.software.SPDF.model.SessionEntity; +import stirling.software.enterprise.security.model.SessionEntity; @Repository public interface SessionRepository extends JpaRepository { diff --git a/src/main/java/stirling/software/SPDF/config/security/session/SessionScheduled.java b/enterprise/src/main/java/stirling/software/enterprise/security/session/SessionScheduled.java similarity index 95% rename from src/main/java/stirling/software/SPDF/config/security/session/SessionScheduled.java rename to enterprise/src/main/java/stirling/software/enterprise/security/session/SessionScheduled.java index 46c17a77e..7dd54f358 100644 --- a/src/main/java/stirling/software/SPDF/config/security/session/SessionScheduled.java +++ b/enterprise/src/main/java/stirling/software/enterprise/security/session/SessionScheduled.java @@ -1,16 +1,14 @@ -package stirling.software.SPDF.config.security.session; +package stirling.software.enterprise.security.session; import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.Date; import java.util.List; - +import lombok.RequiredArgsConstructor; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.security.core.session.SessionInformation; import org.springframework.stereotype.Component; -import lombok.RequiredArgsConstructor; - @Component @RequiredArgsConstructor public class SessionScheduled { diff --git a/settings.gradle b/settings.gradle index 2f60c7a82..fc9474ff6 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,4 +4,4 @@ plugins { } rootProject.name = 'Stirling-PDF' -include 'common' +include 'common', 'enterprise' 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..79b2c9052 100644 --- a/src/main/java/stirling/software/SPDF/SPDFApplication.java +++ b/src/main/java/stirling/software/SPDF/SPDFApplication.java @@ -11,7 +11,6 @@ import java.util.Map; import java.util.Properties; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; @@ -27,10 +26,11 @@ 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.AppConfig; +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 @@ -46,20 +46,17 @@ public class SPDFApplication { private static String baseUrlStatic; private static String contextPathStatic; + private final AppConfig appConfig; private final Environment env; private final ApplicationProperties applicationProperties; private final WebBrowser webBrowser; - @Value("${baseUrl:http://localhost}") - private String baseUrl; - - @Value("${server.servlet.context-path:/}") - private String contextPath; - public SPDFApplication( + AppConfig appConfig, Environment env, ApplicationProperties applicationProperties, @Autowired(required = false) WebBrowser webBrowser) { + this.appConfig = appConfig; this.env = env; this.applicationProperties = applicationProperties; this.webBrowser = webBrowser; @@ -148,9 +145,12 @@ public class SPDFApplication { @PostConstruct public void init() { - baseUrlStatic = this.baseUrl; - contextPathStatic = this.contextPath; + String baseUrl = appConfig.getBaseUrl(); + String contextPath = appConfig.getContextPath(); + baseUrlStatic = baseUrl; + contextPathStatic = contextPath; String url = baseUrl + ":" + getStaticPort() + contextPath; + if (webBrowser != null && Boolean.parseBoolean(System.getProperty("STIRLING_PDF_DESKTOP_UI", "false"))) { webBrowser.initWebUI(url); @@ -161,6 +161,7 @@ public class SPDFApplication { try { String os = System.getProperty("os.name").toLowerCase(); Runtime rt = Runtime.getRuntime(); + if (os.contains("win")) { // For Windows SystemCommand.runCommand(rt, "rundll32 url.dll,FileProtocolHandler " + url); @@ -177,17 +178,6 @@ public class SPDFApplication { log.info("Running configs {}", applicationProperties.toString()); } - @Value("${server.port:8080}") - public void setServerPort(String port) { - if ("auto".equalsIgnoreCase(port)) { - // Use Spring Boot's automatic port assignment (server.port=0) - SPDFApplication.serverPortStatic = - "0"; // This will let Spring Boot assign an available port - } else { - SPDFApplication.serverPortStatic = port; - } - } - public static void setServerPortStatic(String port) { if ("auto".equalsIgnoreCase(port)) { // Use Spring Boot's automatic port assignment (server.port=0) 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/AppUpdateService.java b/src/main/java/stirling/software/SPDF/config/AppUpdateService.java index f89c9aed3..c4c528f77 100644 --- a/src/main/java/stirling/software/SPDF/config/AppUpdateService.java +++ b/src/main/java/stirling/software/SPDF/config/AppUpdateService.java @@ -5,7 +5,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; -import stirling.software.SPDF.config.interfaces.ShowAdminInterface; +import stirling.software.common.configuration.interfaces.ShowAdminInterface; import stirling.software.common.model.ApplicationProperties; @Configuration 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..d61e2ca6c 100644 --- a/src/main/java/stirling/software/SPDF/config/InitialSetup.java +++ b/src/main/java/stirling/software/SPDF/config/InitialSetup.java @@ -17,8 +17,8 @@ import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.utils.GeneralUtils; import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.util.GeneralUtils; @Component @Slf4j diff --git a/src/main/java/stirling/software/SPDF/config/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/fingerprint/FingerprintBasedSessionFilter.java b/src/main/java/stirling/software/SPDF/config/fingerprint/FingerprintBasedSessionFilter.java index 3815b95bd..f574c6bbc 100644 --- a/src/main/java/stirling/software/SPDF/config/fingerprint/FingerprintBasedSessionFilter.java +++ b/src/main/java/stirling/software/SPDF/config/fingerprint/FingerprintBasedSessionFilter.java @@ -12,7 +12,7 @@ // import jakarta.servlet.http.HttpServletResponse; // import jakarta.servlet.http.HttpSession; // import lombok.extern.slf4j.Slf4j; -// import stirling.software.SPDF.utils.RequestUriUtils; +// import stirling.software.common.util.RequestUriUtils; // //// @Component // @Slf4j diff --git a/src/main/java/stirling/software/SPDF/config/security/SecurityConfiguration.java b/src/main/java/stirling/software/SPDF/config/security/SecurityConfiguration.java deleted file mode 100644 index db2fc6c8d..000000000 --- a/src/main/java/stirling/software/SPDF/config/security/SecurityConfiguration.java +++ /dev/null @@ -1,317 +0,0 @@ -package stirling.software.SPDF.config.security; - -import java.util.Optional; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.DependsOn; -import org.springframework.context.annotation.Lazy; -import org.springframework.security.authentication.ProviderManager; -import org.springframework.security.authentication.dao.DaoAuthenticationProvider; -import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.security.saml2.provider.service.authentication.OpenSaml4AuthenticationProvider; -import org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistrationRepository; -import org.springframework.security.saml2.provider.service.web.authentication.OpenSaml4AuthenticationRequestResolver; -import org.springframework.security.web.SecurityFilterChain; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository; -import org.springframework.security.web.csrf.CookieCsrfTokenRepository; -import org.springframework.security.web.csrf.CsrfTokenRequestAttributeHandler; -import org.springframework.security.web.savedrequest.NullRequestCache; -import org.springframework.security.web.util.matcher.AntPathRequestMatcher; - -import lombok.extern.slf4j.Slf4j; - -import stirling.software.SPDF.config.security.oauth2.CustomOAuth2AuthenticationFailureHandler; -import stirling.software.SPDF.config.security.oauth2.CustomOAuth2AuthenticationSuccessHandler; -import stirling.software.SPDF.config.security.oauth2.CustomOAuth2UserService; -import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticationFailureHandler; -import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticationSuccessHandler; -import stirling.software.SPDF.config.security.saml2.CustomSaml2ResponseAuthenticationConverter; -import stirling.software.SPDF.config.security.session.SessionPersistentRegistry; -import stirling.software.SPDF.model.User; -import stirling.software.SPDF.repository.JPATokenRepositoryImpl; -import stirling.software.SPDF.repository.PersistentLoginRepository; -import stirling.software.common.model.ApplicationProperties; - -@Configuration -@EnableWebSecurity -@EnableMethodSecurity -@Slf4j -@DependsOn("runningProOrHigher") -public class SecurityConfiguration { - - private final CustomUserDetailsService userDetailsService; - private final UserService userService; - private final boolean loginEnabledValue; - private final boolean runningProOrHigher; - - private final ApplicationProperties applicationProperties; - private final UserAuthenticationFilter userAuthenticationFilter; - private final LoginAttemptService loginAttemptService; - private final FirstLoginFilter firstLoginFilter; - private final SessionPersistentRegistry sessionRegistry; - private final PersistentLoginRepository persistentLoginRepository; - private final GrantedAuthoritiesMapper oAuth2userAuthoritiesMapper; - private final RelyingPartyRegistrationRepository saml2RelyingPartyRegistrations; - private final OpenSaml4AuthenticationRequestResolver saml2AuthenticationRequestResolver; - - public SecurityConfiguration( - PersistentLoginRepository persistentLoginRepository, - CustomUserDetailsService userDetailsService, - @Lazy UserService userService, - @Qualifier("loginEnabled") boolean loginEnabledValue, - @Qualifier("runningProOrHigher") boolean runningProOrHigher, - ApplicationProperties applicationProperties, - UserAuthenticationFilter userAuthenticationFilter, - LoginAttemptService loginAttemptService, - FirstLoginFilter firstLoginFilter, - SessionPersistentRegistry sessionRegistry, - @Autowired(required = false) GrantedAuthoritiesMapper oAuth2userAuthoritiesMapper, - @Autowired(required = false) - RelyingPartyRegistrationRepository saml2RelyingPartyRegistrations, - @Autowired(required = false) - OpenSaml4AuthenticationRequestResolver saml2AuthenticationRequestResolver) { - this.userDetailsService = userDetailsService; - this.userService = userService; - this.loginEnabledValue = loginEnabledValue; - this.runningProOrHigher = runningProOrHigher; - this.applicationProperties = applicationProperties; - this.userAuthenticationFilter = userAuthenticationFilter; - this.loginAttemptService = loginAttemptService; - this.firstLoginFilter = firstLoginFilter; - this.sessionRegistry = sessionRegistry; - this.persistentLoginRepository = persistentLoginRepository; - this.oAuth2userAuthoritiesMapper = oAuth2userAuthoritiesMapper; - this.saml2RelyingPartyRegistrations = saml2RelyingPartyRegistrations; - this.saml2AuthenticationRequestResolver = saml2AuthenticationRequestResolver; - } - - @Bean - public PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(); - } - - @Bean - public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - if (applicationProperties.getSecurity().getCsrfDisabled() || !loginEnabledValue) { - http.csrf(csrf -> csrf.disable()); - } - - if (loginEnabledValue) { - http.addFilterBefore( - userAuthenticationFilter, UsernamePasswordAuthenticationFilter.class); - if (!applicationProperties.getSecurity().getCsrfDisabled()) { - CookieCsrfTokenRepository cookieRepo = - CookieCsrfTokenRepository.withHttpOnlyFalse(); - CsrfTokenRequestAttributeHandler requestHandler = - new CsrfTokenRequestAttributeHandler(); - requestHandler.setCsrfRequestAttributeName(null); - http.csrf( - csrf -> - csrf.ignoringRequestMatchers( - request -> { - String apiKey = request.getHeader("X-API-KEY"); - // If there's no API key, don't ignore CSRF - // (return false) - if (apiKey == null || apiKey.trim().isEmpty()) { - return false; - } - // Validate API key using existing UserService - try { - Optional user = - userService.getUserByApiKey(apiKey); - // If API key is valid, ignore CSRF (return - // true) - // If API key is invalid, don't ignore CSRF - // (return false) - return user.isPresent(); - } catch (Exception e) { - // If there's any error validating the API - // key, don't ignore CSRF - return false; - } - }) - .csrfTokenRepository(cookieRepo) - .csrfTokenRequestHandler(requestHandler)); - } - http.addFilterBefore(rateLimitingFilter(), UsernamePasswordAuthenticationFilter.class); - http.addFilterAfter(firstLoginFilter, UsernamePasswordAuthenticationFilter.class); - http.sessionManagement( - sessionManagement -> - sessionManagement - .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) - .maximumSessions(10) - .maxSessionsPreventsLogin(false) - .sessionRegistry(sessionRegistry) - .expiredUrl("/login?logout=true")); - http.authenticationProvider(daoAuthenticationProvider()); - http.requestCache(requestCache -> requestCache.requestCache(new NullRequestCache())); - http.logout( - logout -> - logout.logoutRequestMatcher(new AntPathRequestMatcher("/logout")) - .logoutSuccessHandler( - new CustomLogoutSuccessHandler(applicationProperties)) - .clearAuthentication(true) - .invalidateHttpSession(true) - .deleteCookies("JSESSIONID", "remember-me")); - http.rememberMe( - rememberMeConfigurer -> // Use the configurator directly - rememberMeConfigurer - .tokenRepository(persistentTokenRepository()) - .tokenValiditySeconds( // 14 days - 14 * 24 * 60 * 60) - .userDetailsService( // Your existing UserDetailsService - userDetailsService) - .useSecureCookie( // Enable secure cookie - true) - .rememberMeParameter( // Form parameter name - "remember-me") - .rememberMeCookieName( // Cookie name - "remember-me") - .alwaysRemember(false)); - http.authorizeHttpRequests( - authz -> - authz.requestMatchers( - req -> { - String uri = req.getRequestURI(); - String contextPath = req.getContextPath(); - // Remove the context path from the URI - String trimmedUri = - uri.startsWith(contextPath) - ? uri.substring( - contextPath.length()) - : uri; - return trimmedUri.startsWith("/login") - || trimmedUri.startsWith("/oauth") - || trimmedUri.startsWith("/saml2") - || trimmedUri.endsWith(".svg") - || trimmedUri.startsWith("/register") - || trimmedUri.startsWith("/error") - || trimmedUri.startsWith("/images/") - || trimmedUri.startsWith("/public/") - || trimmedUri.startsWith("/css/") - || trimmedUri.startsWith("/fonts/") - || trimmedUri.startsWith("/js/") - || trimmedUri.startsWith( - "/api/v1/info/status"); - }) - .permitAll() - .anyRequest() - .authenticated()); - // Handle User/Password Logins - if (applicationProperties.getSecurity().isUserPass()) { - http.formLogin( - formLogin -> - formLogin - .loginPage("/login") - .successHandler( - new CustomAuthenticationSuccessHandler( - loginAttemptService, userService)) - .failureHandler( - new CustomAuthenticationFailureHandler( - loginAttemptService, userService)) - .defaultSuccessUrl("/") - .permitAll()); - } - // Handle OAUTH2 Logins - if (applicationProperties.getSecurity().isOauth2Active()) { - http.oauth2Login( - oauth2 -> - oauth2.loginPage("/oauth2") - . - /* - This Custom handler is used to check if the OAUTH2 user trying to log in, already exists in the database. - If user exists, login proceeds as usual. If user does not exist, then it is auto-created but only if 'OAUTH2AutoCreateUser' - is set as true, else login fails with an error message advising the same. - */ - successHandler( - new CustomOAuth2AuthenticationSuccessHandler( - loginAttemptService, - applicationProperties, - userService)) - .failureHandler( - new CustomOAuth2AuthenticationFailureHandler()) - . // Add existing Authorities from the database - userInfoEndpoint( - userInfoEndpoint -> - userInfoEndpoint - .oidcUserService( - new CustomOAuth2UserService( - applicationProperties, - userService, - loginAttemptService)) - .userAuthoritiesMapper( - oAuth2userAuthoritiesMapper)) - .permitAll()); - } - // Handle SAML - if (applicationProperties.getSecurity().isSaml2Active() && runningProOrHigher) { - // Configure the authentication provider - OpenSaml4AuthenticationProvider authenticationProvider = - new OpenSaml4AuthenticationProvider(); - authenticationProvider.setResponseAuthenticationConverter( - new CustomSaml2ResponseAuthenticationConverter(userService)); - http.authenticationProvider(authenticationProvider) - .saml2Login( - saml2 -> { - try { - saml2.loginPage("/saml2") - .relyingPartyRegistrationRepository( - saml2RelyingPartyRegistrations) - .authenticationManager( - new ProviderManager(authenticationProvider)) - .successHandler( - new CustomSaml2AuthenticationSuccessHandler( - loginAttemptService, - applicationProperties, - userService)) - .failureHandler( - new CustomSaml2AuthenticationFailureHandler()) - .authenticationRequestResolver( - saml2AuthenticationRequestResolver); - } catch (Exception e) { - log.error("Error configuring SAML 2 login", e); - throw new RuntimeException(e); - } - }); - } - } else { - log.debug("SAML 2 login is not enabled. Using default."); - http.authorizeHttpRequests(authz -> authz.anyRequest().permitAll()); - } - return http.build(); - } - - public DaoAuthenticationProvider daoAuthenticationProvider() { - DaoAuthenticationProvider provider = new DaoAuthenticationProvider(); - provider.setUserDetailsService(userDetailsService); - provider.setPasswordEncoder(passwordEncoder()); - return provider; - } - - @Bean - public IPRateLimitingFilter rateLimitingFilter() { - // Example limit TODO add config level - int maxRequestsPerIp = 1000000; - return new IPRateLimitingFilter(maxRequestsPerIp, maxRequestsPerIp); - } - - @Bean - public PersistentTokenRepository persistentTokenRepository() { - return new JPATokenRepositoryImpl(persistentLoginRepository); - } - - @Bean - public boolean activeSecurity() { - return true; - } -} diff --git a/src/main/java/stirling/software/SPDF/controller/api/AnalysisController.java b/src/main/java/stirling/software/SPDF/controller/api/AnalysisController.java index 0fb2f2e8d..b6419890a 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/AnalysisController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/AnalysisController.java @@ -18,8 +18,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.service.CustomPDFDocumentFactory; @RestController @RequestMapping("/api/v1/analysis") diff --git a/src/main/java/stirling/software/SPDF/controller/api/CropController.java b/src/main/java/stirling/software/SPDF/controller/api/CropController.java index 0c4afc861..3a2d16757 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/CropController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/CropController.java @@ -22,8 +22,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.general.CropPdfForm; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/MergeController.java b/src/main/java/stirling/software/SPDF/controller/api/MergeController.java index f8ee0d1b5..146db6a3a 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/MergeController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/MergeController.java @@ -32,9 +32,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.general.MergePdfsRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.GeneralUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.GeneralUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @Slf4j diff --git a/src/main/java/stirling/software/SPDF/controller/api/MultiPageLayoutController.java b/src/main/java/stirling/software/SPDF/controller/api/MultiPageLayoutController.java index bb795a08a..c57e3a6c0 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/MultiPageLayoutController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/MultiPageLayoutController.java @@ -25,8 +25,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.general.MergeMultiplePagesRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/PdfImageRemovalController.java b/src/main/java/stirling/software/SPDF/controller/api/PdfImageRemovalController.java index a9d66106d..d6602351e 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/PdfImageRemovalController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/PdfImageRemovalController.java @@ -15,10 +15,10 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; import stirling.software.SPDF.service.PdfImageRemovalService; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; /** * Controller class for handling PDF image removal requests. Provides an endpoint to remove images diff --git a/src/main/java/stirling/software/SPDF/controller/api/PdfOverlayController.java b/src/main/java/stirling/software/SPDF/controller/api/PdfOverlayController.java index 60a398305..e6fc2c561 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/PdfOverlayController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/PdfOverlayController.java @@ -27,9 +27,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.general.OverlayPdfsRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.GeneralUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.GeneralUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/RearrangePagesPDFController.java b/src/main/java/stirling/software/SPDF/controller/api/RearrangePagesPDFController.java index 0ce0c1e24..3bf2ec802 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/RearrangePagesPDFController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/RearrangePagesPDFController.java @@ -24,9 +24,9 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.SortTypes; import stirling.software.SPDF.model.api.PDFWithPageNums; import stirling.software.SPDF.model.api.general.RearrangePagesRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.GeneralUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.GeneralUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/RotationController.java b/src/main/java/stirling/software/SPDF/controller/api/RotationController.java index 4b1a221a9..afdfc54d9 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/RotationController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/RotationController.java @@ -19,8 +19,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.general.RotatePDFRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/ScalePagesController.java b/src/main/java/stirling/software/SPDF/controller/api/ScalePagesController.java index 65a10c77e..b2d689728 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/ScalePagesController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/ScalePagesController.java @@ -26,8 +26,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.general.ScalePagesRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/SettingsController.java b/src/main/java/stirling/software/SPDF/controller/api/SettingsController.java index 11b14e338..0e9cd96dc 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SettingsController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SettingsController.java @@ -17,9 +17,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.config.EndpointConfiguration; -import stirling.software.SPDF.utils.GeneralUtils; import stirling.software.common.configuration.InstallationPathConfig; import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.util.GeneralUtils; @Controller @Tag(name = "Settings", description = "Settings APIs") diff --git a/src/main/java/stirling/software/SPDF/controller/api/SplitPDFController.java b/src/main/java/stirling/software/SPDF/controller/api/SplitPDFController.java index af7fda04a..1b65891ac 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPDFController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPDFController.java @@ -28,8 +28,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.PDFWithPageNums; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfByChaptersController.java b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfByChaptersController.java index b50e4eb96..80ec89738 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfByChaptersController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfByChaptersController.java @@ -31,11 +31,11 @@ import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.PdfMetadata; import stirling.software.SPDF.model.api.SplitPdfByChaptersRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.service.PdfMetadataService; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.PdfMetadata; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.service.PdfMetadataService; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java index fec4e2657..c2bbd31b5 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java @@ -32,8 +32,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.SplitPdfBySectionsRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySizeController.java b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySizeController.java index 1049e02bc..3df62816f 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySizeController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySizeController.java @@ -25,9 +25,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.general.SplitPdfBySizeOrCountRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.GeneralUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.GeneralUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/ToSinglePageController.java b/src/main/java/stirling/software/SPDF/controller/api/ToSinglePageController.java index b3ae43071..9085f41b1 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/ToSinglePageController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/ToSinglePageController.java @@ -21,9 +21,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") diff --git a/src/main/java/stirling/software/SPDF/controller/api/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..f32acd4fd 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertImgPDFController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertImgPDFController.java @@ -32,9 +32,13 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.converters.ConvertToImageRequest; import stirling.software.SPDF.model.api.converters.ConvertToPdfRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.*; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.CheckProgramInstall; +import stirling.software.common.util.GeneralUtils; +import stirling.software.common.util.PdfUtils; +import stirling.software.common.util.ProcessExecutor; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/convert") 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 db4ea63d8..8348e7794 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..b16cc01d9 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java @@ -19,14 +19,14 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.config.RuntimePathConfig; import stirling.software.SPDF.model.api.converters.UrlToPdfRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.GeneralUtils; -import stirling.software.SPDF.utils.ProcessExecutor; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.configuration.RuntimePathConfig; import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.GeneralUtils; +import stirling.software.common.util.ProcessExecutor; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.util.WebResponseUtils; @RestController @Tag(name = "Convert", description = "Convert APIs") diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ExtractCSVController.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ExtractCSVController.java index 4ee3f7606..847904b60 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ExtractCSVController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ExtractCSVController.java @@ -30,7 +30,7 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.PDFWithPageNums; import stirling.software.SPDF.pdf.FlexibleCSVWriter; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; +import stirling.software.common.service.CustomPDFDocumentFactory; import technology.tabula.ObjectExtractor; import technology.tabula.Page; diff --git a/src/main/java/stirling/software/SPDF/controller/api/filters/FilterController.java b/src/main/java/stirling/software/SPDF/controller/api/filters/FilterController.java index 09d93a8b0..96322ad80 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/filters/FilterController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/filters/FilterController.java @@ -24,9 +24,9 @@ import stirling.software.SPDF.model.api.filter.ContainsTextRequest; import stirling.software.SPDF.model.api.filter.FileSizeRequest; import stirling.software.SPDF.model.api.filter.PageRotationRequest; import stirling.software.SPDF.model.api.filter.PageSizeRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.PdfUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.PdfUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/filter") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/AutoRenameController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/AutoRenameController.java index e628a98bb..8d803708c 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/AutoRenameController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/AutoRenameController.java @@ -23,8 +23,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.ExtractHeaderRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java index b7cb7541d..44d575575 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java @@ -35,8 +35,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.AutoSplitPdfRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/BlankPageController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/BlankPageController.java index c341a49fc..a7314fc7e 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/BlankPageController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/BlankPageController.java @@ -30,9 +30,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.RemoveBlankPagesRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.PdfUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.PdfUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java index da4a77962..ead5933f6 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java @@ -51,11 +51,11 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.config.EndpointConfiguration; import stirling.software.SPDF.model.api.misc.OptimizePdfRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.GeneralUtils; -import stirling.software.SPDF.utils.ProcessExecutor; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.GeneralUtils; +import stirling.software.common.util.ProcessExecutor; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/DecompressPdfController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/DecompressPdfController.java index bceb9e58b..cfbc88e8b 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/DecompressPdfController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/DecompressPdfController.java @@ -24,9 +24,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImageScansController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImageScansController.java index 5a01ad103..d5d3a63fb 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImageScansController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImageScansController.java @@ -31,11 +31,11 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.ExtractImageScansRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.CheckProgramInstall; -import stirling.software.SPDF.utils.ProcessExecutor; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.CheckProgramInstall; +import stirling.software.common.util.ProcessExecutor; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java index e03916745..4ec844485 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java @@ -40,9 +40,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.PDFExtractImagesRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.ImageProcessingUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.ImageProcessingUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/FakeScanControllerWIP.java b/src/main/java/stirling/software/SPDF/controller/api/misc/FakeScanControllerWIP.java index ca4cbd8fd..9861c1f19 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/FakeScanControllerWIP.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/FakeScanControllerWIP.java @@ -30,9 +30,9 @@ import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.utils.PdfUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.util.PdfUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/FlattenController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/FlattenController.java index e81fa23f2..d82a1971a 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/FlattenController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/FlattenController.java @@ -26,8 +26,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.FlattenRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/MetadataController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/MetadataController.java index 3e90132b6..1d5196940 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/MetadataController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/MetadataController.java @@ -23,9 +23,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.MetadataRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; -import stirling.software.SPDF.utils.propertyeditor.StringToMapPropertyEditor; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; +import stirling.software.common.util.propertyeditor.StringToMapPropertyEditor; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/OCRController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/OCRController.java index 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..4233d11e4 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/PageNumbersController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/PageNumbersController.java @@ -25,9 +25,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.misc.AddPageNumbersRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.GeneralUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.GeneralUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/RepairController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/RepairController.java index 01d9049df..85340a163 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/RepairController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/RepairController.java @@ -19,11 +19,11 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.ProcessExecutor; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.ProcessExecutor; +import stirling.software.common.util.ProcessExecutor.ProcessExecutorResult; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/ShowJavascript.java b/src/main/java/stirling/software/SPDF/controller/api/misc/ShowJavascript.java index f6aab4527..94e9b57c6 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/ShowJavascript.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/ShowJavascript.java @@ -20,9 +20,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/StampController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/StampController.java index 1ceddba83..9c0ad2909 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/StampController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/StampController.java @@ -39,8 +39,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.misc.AddStampRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/UnlockPDFFormsController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/UnlockPDFFormsController.java index 764c7d6c4..e7dfba041 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/UnlockPDFFormsController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/UnlockPDFFormsController.java @@ -23,9 +23,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") diff --git a/src/main/java/stirling/software/SPDF/controller/api/pipeline/ApiDocService.java b/src/main/java/stirling/software/SPDF/controller/api/pipeline/ApiDocService.java index eb7730e3e..e4b13a3fb 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/pipeline/ApiDocService.java +++ b/src/main/java/stirling/software/SPDF/controller/api/pipeline/ApiDocService.java @@ -24,7 +24,8 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.SPDFApplication; import stirling.software.SPDF.model.ApiEndpoint; -import stirling.software.SPDF.model.Role; +import stirling.software.enterprise.security.model.Role; +import stirling.software.enterprise.security.service.UserServiceEnterpriseInterface; @Service @Slf4j @@ -33,13 +34,13 @@ public class ApiDocService { private final Map apiDocumentation = new HashMap<>(); private final ServletContext servletContext; - private final UserServiceInterface userService; + private final UserServiceEnterpriseInterface userService; Map> outputToFileTypes = new HashMap<>(); JsonNode apiDocsJsonRootNode; public ApiDocService( ServletContext servletContext, - @Autowired(required = false) UserServiceInterface userService) { + @Autowired(required = false) UserServiceEnterpriseInterface userService) { this.servletContext = servletContext; this.userService = userService; } 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..04999a7e3 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 @@ -31,7 +31,7 @@ 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.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..92d4ed65e 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.util.FileMonitor; @Service @Slf4j diff --git a/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java b/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java index 2833ee99e..c8c7ff655 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java +++ b/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java @@ -35,7 +35,8 @@ import stirling.software.SPDF.SPDFApplication; import stirling.software.SPDF.model.PipelineConfig; import stirling.software.SPDF.model.PipelineOperation; import stirling.software.SPDF.model.PipelineResult; -import stirling.software.SPDF.model.Role; +import stirling.software.enterprise.security.model.Role; +import stirling.software.enterprise.security.service.UserServiceEnterpriseInterface; @Service @Slf4j @@ -43,13 +44,13 @@ public class PipelineProcessor { private final ApiDocService apiDocService; - private final UserServiceInterface userService; + private final UserServiceEnterpriseInterface userService; private final ServletContext servletContext; public PipelineProcessor( ApiDocService apiDocService, - @Autowired(required = false) UserServiceInterface userService, + @Autowired(required = false) UserServiceEnterpriseInterface userService, ServletContext servletContext) { this.apiDocService = apiDocService; this.userService = userService; 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 58e5b848c..76047a27b 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 95049b0bd..eda955d83 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..88d271cfb 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 @@ -33,13 +33,13 @@ import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.PDFText; 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.model.api.security.RedactionArea; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.GeneralUtils; +import stirling.software.common.util.PdfUtils; +import stirling.software.common.util.WebResponseUtils; +import stirling.software.common.util.propertyeditor.StringToArrayListPropertyEditor; @RestController @RequestMapping("/api/v1/security") diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/RemoveCertSignController.java b/src/main/java/stirling/software/SPDF/controller/api/security/RemoveCertSignController.java index 5761e854f..79fd18914 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/RemoveCertSignController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/RemoveCertSignController.java @@ -20,9 +20,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/security") diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java b/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java index 9be4cacbc..bc0a4ff9d 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java @@ -26,8 +26,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.security.SanitizePdfRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/security") diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/ValidateSignatureController.java b/src/main/java/stirling/software/SPDF/controller/api/security/ValidateSignatureController.java index 67f776408..b3f01ef47 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/ValidateSignatureController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/ValidateSignatureController.java @@ -40,7 +40,7 @@ import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.security.SignatureValidationRequest; import stirling.software.SPDF.model.api.security.SignatureValidationResult; import stirling.software.SPDF.service.CertificateValidationService; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; +import stirling.software.common.service.CustomPDFDocumentFactory; @RestController @RequestMapping("/api/v1/security") diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java b/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java index 14d23ac09..fd8f1cf8a 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java @@ -40,9 +40,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.model.api.security.AddWatermarkRequest; -import stirling.software.SPDF.service.CustomPDFDocumentFactory; -import stirling.software.SPDF.utils.PdfUtils; -import stirling.software.SPDF.utils.WebResponseUtils; +import stirling.software.common.service.CustomPDFDocumentFactory; +import stirling.software.common.util.PdfUtils; +import stirling.software.common.util.WebResponseUtils; @RestController @RequestMapping("/api/v1/security") diff --git a/src/main/java/stirling/software/SPDF/controller/web/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/GeneralWebController.java b/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java index c4b778f0b..015610845 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.GeneralUtils; +import stirling.software.enterprise.security.service.UserServiceEnterpriseInterface; @Controller @Tag(name = "General", description = "General APIs") @@ -37,13 +37,13 @@ import stirling.software.common.configuration.InstallationPathConfig; public class GeneralWebController { private final SignatureService signatureService; - private final UserServiceInterface userService; + private final UserServiceEnterpriseInterface userService; private final ResourceLoader resourceLoader; private final RuntimePathConfig runtimePathConfig; public GeneralWebController( SignatureService signatureService, - @Autowired(required = false) UserServiceInterface userService, + @Autowired(required = false) UserServiceEnterpriseInterface userService, ResourceLoader resourceLoader, RuntimePathConfig runtimePathConfig) { this.signatureService = signatureService; 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/controller/web/SignatureController.java b/src/main/java/stirling/software/SPDF/controller/web/SignatureController.java index eaf671393..505adad3d 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/SignatureController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/SignatureController.java @@ -11,8 +11,8 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; -import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface; import stirling.software.SPDF.service.SignatureService; +import stirling.software.enterprise.security.service.UserServiceEnterpriseInterface; @Controller @RequestMapping("/api/v1/general") @@ -20,11 +20,11 @@ public class SignatureController { private final SignatureService signatureService; - private final UserServiceInterface userService; + private final UserServiceEnterpriseInterface userService; public SignatureController( SignatureService signatureService, - @Autowired(required = false) UserServiceInterface userService) { + @Autowired(required = false) UserServiceEnterpriseInterface userService) { this.signatureService = signatureService; this.userService = userService; } diff --git a/src/main/java/stirling/software/SPDF/model/api/PDFComparison.java b/src/main/java/stirling/software/SPDF/model/api/PDFComparison.java index 2dcf3731e..9524cd274 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFComparison.java +++ b/src/main/java/stirling/software/SPDF/model/api/PDFComparison.java @@ -5,6 +5,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; +import stirling.software.common.model.api.PDFFile; + @Data @EqualsAndHashCode(callSuper = true) public class PDFComparison extends PDFFile { diff --git a/src/main/java/stirling/software/SPDF/model/api/PDFWithImageFormatRequest.java b/src/main/java/stirling/software/SPDF/model/api/PDFWithImageFormatRequest.java index e269f91ca..c2e8d2658 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFWithImageFormatRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/PDFWithImageFormatRequest.java @@ -5,6 +5,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; +import stirling.software.common.model.api.PDFFile; + @Data @EqualsAndHashCode(callSuper = true) public class PDFWithImageFormatRequest extends PDFFile { diff --git a/src/main/java/stirling/software/SPDF/model/api/PDFWithPageNums.java b/src/main/java/stirling/software/SPDF/model/api/PDFWithPageNums.java index dd73f9763..062c890fc 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFWithPageNums.java +++ b/src/main/java/stirling/software/SPDF/model/api/PDFWithPageNums.java @@ -11,7 +11,8 @@ import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.utils.GeneralUtils; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.util.GeneralUtils; @Data @EqualsAndHashCode(callSuper = true) diff --git a/src/main/java/stirling/software/SPDF/model/api/PDFWithPageSize.java b/src/main/java/stirling/software/SPDF/model/api/PDFWithPageSize.java index 81f1eedb9..83501fb35 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFWithPageSize.java +++ b/src/main/java/stirling/software/SPDF/model/api/PDFWithPageSize.java @@ -5,6 +5,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; +import stirling.software.common.model.api.PDFFile; + @Data @EqualsAndHashCode(callSuper = true) public class PDFWithPageSize extends PDFFile { diff --git a/src/main/java/stirling/software/SPDF/model/api/SplitPdfByChaptersRequest.java b/src/main/java/stirling/software/SPDF/model/api/SplitPdfByChaptersRequest.java index b6a619d53..364faeca4 100644 --- a/src/main/java/stirling/software/SPDF/model/api/SplitPdfByChaptersRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/SplitPdfByChaptersRequest.java @@ -5,6 +5,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; +import stirling.software.common.model.api.PDFFile; + @Data @EqualsAndHashCode(callSuper = false) public class SplitPdfByChaptersRequest extends PDFFile { diff --git a/src/main/java/stirling/software/SPDF/model/api/SplitPdfBySectionsRequest.java b/src/main/java/stirling/software/SPDF/model/api/SplitPdfBySectionsRequest.java index ca8aad091..3a89ab686 100644 --- a/src/main/java/stirling/software/SPDF/model/api/SplitPdfBySectionsRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/SplitPdfBySectionsRequest.java @@ -5,6 +5,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; +import stirling.software.common.model.api.PDFFile; + @Data @EqualsAndHashCode(callSuper = true) public class SplitPdfBySectionsRequest extends PDFFile { diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/ConvertPDFToMarkdown.java b/src/main/java/stirling/software/SPDF/model/api/converters/ConvertPDFToMarkdown.java index 5481423ac..fbbd4723a 100644 --- a/src/main/java/stirling/software/SPDF/model/api/converters/ConvertPDFToMarkdown.java +++ b/src/main/java/stirling/software/SPDF/model/api/converters/ConvertPDFToMarkdown.java @@ -10,8 +10,8 @@ import org.springframework.web.multipart.MultipartFile; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import stirling.software.SPDF.model.api.PDFFile; -import stirling.software.SPDF.utils.PDFToFile; +import stirling.software.common.model.api.PDFFile; +import stirling.software.common.util.PDFToFile; @RestController @Tag(name = "Convert", description = "Convert APIs") diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/ConvertToImageRequest.java b/src/main/java/stirling/software/SPDF/model/api/converters/ConvertToImageRequest.java index 149676946..e32bb736c 100644 --- a/src/main/java/stirling/software/SPDF/model/api/converters/ConvertToImageRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/converters/ConvertToImageRequest.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.PDFWithPageNums; +import stirling.software.common.model.api.PDFWithPageNums; @Data @EqualsAndHashCode(callSuper = true) 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/ManualRedactPdfRequest.java b/src/main/java/stirling/software/SPDF/model/api/security/ManualRedactPdfRequest.java index bcc715d16..48cb5bc67 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/ManualRedactPdfRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/security/ManualRedactPdfRequest.java @@ -8,6 +8,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import stirling.software.SPDF.model.api.PDFWithPageNums; +import stirling.software.common.model.api.security.RedactionArea; @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/PostHogService.java b/src/main/java/stirling/software/SPDF/service/PostHogService.java index 6b9b2eaef..be5d21074 100644 --- a/src/main/java/stirling/software/SPDF/service/PostHogService.java +++ b/src/main/java/stirling/software/SPDF/service/PostHogService.java @@ -16,8 +16,8 @@ import org.springframework.stereotype.Service; import com.posthog.java.PostHog; -import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface; import stirling.software.common.model.ApplicationProperties; +import stirling.software.enterprise.security.service.UserServiceEnterpriseInterface; @Service public class PostHogService { @@ -25,7 +25,7 @@ public class PostHogService { private final String uniqueId; private final String appVersion; private final ApplicationProperties applicationProperties; - private final UserServiceInterface userService; + private final UserServiceEnterpriseInterface userService; private final Environment env; private boolean configDirMounted; @@ -35,7 +35,7 @@ public class PostHogService { @Qualifier("configDirMounted") boolean configDirMounted, @Qualifier("appVersion") String appVersion, ApplicationProperties applicationProperties, - @Autowired(required = false) UserServiceInterface userService, + @Autowired(required = false) UserServiceEnterpriseInterface userService, Environment env) { this.postHog = postHog; this.uniqueId = uuid; diff --git a/src/main/java/stirling/software/SPDF/service/misc/ReplaceAndInvertColorService.java b/src/main/java/stirling/software/SPDF/service/misc/ReplaceAndInvertColorService.java index e2a4e7ea5..dc61a1e1d 100644 --- a/src/main/java/stirling/software/SPDF/service/misc/ReplaceAndInvertColorService.java +++ b/src/main/java/stirling/software/SPDF/service/misc/ReplaceAndInvertColorService.java @@ -9,9 +9,9 @@ import org.springframework.web.multipart.MultipartFile; import lombok.RequiredArgsConstructor; import stirling.software.SPDF.Factories.ReplaceAndInvertColorFactory; -import stirling.software.SPDF.model.api.misc.HighContrastColorCombination; -import stirling.software.SPDF.model.api.misc.ReplaceAndInvert; -import stirling.software.SPDF.utils.misc.ReplaceAndInvertColorStrategy; +import stirling.software.common.model.api.misc.HighContrastColorCombination; +import stirling.software.common.model.api.misc.ReplaceAndInvert; +import stirling.software.common.util.misc.ReplaceAndInvertColorStrategy; @Service @RequiredArgsConstructor diff --git a/src/test/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandlerTest.java b/src/test/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandlerTest.java index 79638cafe..7ff755415 100644 --- a/src/test/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandlerTest.java +++ b/src/test/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandlerTest.java @@ -17,6 +17,7 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import stirling.software.common.model.ApplicationProperties; +import stirling.software.enterprise.security.CustomLogoutSuccessHandler; @ExtendWith(MockitoExtension.class) class CustomLogoutSuccessHandlerTest { 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/RequestUriUtilsTest.java b/src/test/java/stirling/software/SPDF/utils/RequestUriUtilsTest.java deleted file mode 100644 index f18196030..000000000 --- a/src/test/java/stirling/software/SPDF/utils/RequestUriUtilsTest.java +++ /dev/null @@ -1,26 +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; - -public class RequestUriUtilsTest { - - @Test - public void testIsStaticResource() { - assertTrue(RequestUriUtils.isStaticResource("/css/styles.css")); - assertTrue(RequestUriUtils.isStaticResource("/js/script.js")); - assertTrue(RequestUriUtils.isStaticResource("/images/logo.png")); - assertTrue(RequestUriUtils.isStaticResource("/public/index.html")); - assertTrue(RequestUriUtils.isStaticResource("/pdfjs/pdf.worker.js")); - assertTrue(RequestUriUtils.isStaticResource("/api/v1/info/status")); - assertTrue(RequestUriUtils.isStaticResource("/some-path/icon.svg")); - assertFalse(RequestUriUtils.isStaticResource("/api/v1/users")); - assertFalse(RequestUriUtils.isStaticResource("/api/v1/orders")); - assertFalse(RequestUriUtils.isStaticResource("/")); - assertTrue(RequestUriUtils.isStaticResource("/login")); - assertFalse(RequestUriUtils.isStaticResource("/register")); - assertFalse(RequestUriUtils.isStaticResource("/api/v1/products")); - } -}