From 5f8b208db407fa1abcde0a0d7b0fa5b08d9390d1 Mon Sep 17 00:00:00 2001 From: Ludy Date: Fri, 25 Apr 2025 15:35:12 +0200 Subject: [PATCH] Refactor codebase to replace explicit constructors with Lombok annotations and remove boilerplat (#3415) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Description of Changes - **What was changed:** - Removed explicit constructor definitions annotated with `@Autowired` across services, controllers, filters, and schedulers. - Added Lombok’s `@RequiredArgsConstructor` to automatically generate required-args constructors and eliminate boilerplate. - Introduced other Lombok annotations (`@Data`, `@Getter`, `@Setter`, `@EqualsAndHashCode`, `@NoArgsConstructor`) on model and API classes to replace manual getters/setters and constructors. - Standardized string comparisons to use the constant-first form (e.g., `"value".equals(variable)`). - Cleaned up unused imports and organized OpenAPI configuration by extracting default title/description constants. - **Why the change was made:** - To reduce repetitive boilerplate code and improve maintainability. - To leverage Lombok for cleaner, more consistent dependency injection and data modeling. - To ensure a uniform coding style across the entire codebase. #3406 --- ## Checklist ### General - [x] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [ ] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md) (if applicable) - [x] I have performed a self-review of my own code - [x] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### UI Changes (if applicable) - [ ] Screenshots or videos demonstrating the UI changes are attached ### Testing (if applicable) - [ ] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#6-testing) for more details. --- .../SPDF/EE/KeygenLicenseVerifier.java | 85 +++++++++---------- .../software/SPDF/EE/LicenseKeyChecker.java | 2 - .../software/SPDF/config/AppConfig.java | 8 +- .../SPDF/config/EndpointConfiguration.java | 2 - .../SPDF/config/EndpointInspector.java | 9 +- .../SPDF/config/EndpointInterceptor.java | 6 +- .../software/SPDF/config/InitialSetup.java | 6 +- .../SPDF/config/LocaleConfiguration.java | 9 +- .../software/SPDF/config/MetricsFilter.java | 9 +- .../software/SPDF/config/OpenApiConfig.java | 30 ++++--- .../software/SPDF/config/WebMvcConfig.java | 7 +- .../config/security/AppUpdateAuthService.java | 11 +-- .../security/CustomLogoutSuccessHandler.java | 4 +- .../security/CustomUserDetailsService.java | 9 +- .../config/security/IPRateLimitingFilter.java | 8 +- .../config/security/InitialSecuritySetup.java | 11 +-- .../config/security/LoginAttemptService.java | 6 +- .../security/RateLimitResetScheduler.java | 7 +- .../SPDF/config/security/UserService.java | 19 +---- .../security/database/ScheduledTasks.java | 7 +- ...tomOAuth2AuthenticationSuccessHandler.java | 12 +-- ...mSaml2ResponseAuthenticationConverter.java | 6 +- .../security/saml2/SAML2Configuration.java | 6 +- .../session/CustomHttpSessionListener.java | 2 - .../session/SessionPersistentRegistry.java | 7 +- .../security/session/SessionScheduled.java | 7 +- .../api/AdditionalLanguageJsController.java | 7 +- .../controller/api/AnalysisController.java | 9 +- .../SPDF/controller/api/CropController.java | 9 +- .../controller/api/DatabaseController.java | 6 +- .../SPDF/controller/api/MergeController.java | 8 +- .../api/MultiPageLayoutController.java | 9 +- .../api/PdfImageRemovalController.java | 17 +--- .../controller/api/PdfOverlayController.java | 9 +- .../api/RearrangePagesPDFController.java | 8 +- .../controller/api/RotationController.java | 9 +- .../controller/api/ScalePagesController.java | 9 +- .../controller/api/SettingsController.java | 10 +-- .../controller/api/SplitPDFController.java | 8 +- .../api/SplitPdfByChaptersController.java | 10 +-- .../api/SplitPdfBySectionsController.java | 9 +- .../api/SplitPdfBySizeController.java | 8 +- .../api/ToSinglePageController.java | 9 +- .../SPDF/controller/api/UserController.java | 11 +-- .../api/converters/ConvertHtmlToPDF.java | 15 +--- .../converters/ConvertImgPDFController.java | 8 +- .../api/converters/ConvertMarkdownToPdf.java | 15 +--- .../converters/ConvertOfficeController.java | 11 +-- .../api/converters/ConvertPDFToOffice.java | 9 +- .../api/converters/ConvertWebsiteToPDF.java | 13 +-- .../api/converters/ExtractCSVController.java | 8 +- .../api/filters/FilterController.java | 9 +- .../api/misc/AutoRenameController.java | 10 +-- .../api/misc/AutoSplitPdfController.java | 8 +- .../api/misc/BlankPageController.java | 8 +- .../api/misc/DecompressPdfController.java | 8 +- .../api/misc/ExtractImageScansController.java | 8 +- .../api/misc/ExtractImagesController.java | 8 +- .../api/misc/FlattenController.java | 8 +- .../api/misc/MetadataController.java | 8 +- .../controller/api/misc/OCRController.java | 11 +-- .../api/misc/OverlayImageController.java | 8 +- .../api/misc/PageNumbersController.java | 9 +- .../controller/api/misc/RepairController.java | 9 +- .../misc/ReplaceAndInvertColorController.java | 10 +-- .../controller/api/misc/ShowJavascript.java | 9 +- .../controller/api/misc/StampController.java | 9 +- .../api/pipeline/PipelineController.java | 9 +- .../api/security/CertSignController.java | 8 +- .../controller/api/security/GetInfoOnPDF.java | 8 +- .../api/security/PasswordController.java | 9 +- .../api/security/RedactController.java | 8 +- .../security/RemoveCertSignController.java | 9 +- .../api/security/SanitizeController.java | 9 +- .../security/ValidateSignatureController.java | 12 +-- .../api/security/WatermarkController.java | 9 +- .../controller/web/DatabaseWebController.java | 7 +- .../controller/web/HomeWebController.java | 6 +- .../controller/web/MetricsController.java | 11 +-- .../controller/web/OtherWebController.java | 9 +- .../software/SPDF/model/ApiEndpoint.java | 4 +- .../software/SPDF/model/Authority.java | 38 +++------ .../software/SPDF/model/PersistentLogin.java | 37 +------- .../software/SPDF/model/PipelineConfig.java | 35 +------- .../SPDF/model/PipelineOperation.java | 24 +----- .../stirling/software/SPDF/model/Role.java | 28 ++---- .../stirling/software/SPDF/model/User.java | 75 +++------------- .../software/SPDF/model/api/GeneralFile.java | 2 - .../SPDF/model/api/HandleDataRequest.java | 2 - .../software/SPDF/model/api/ImageFile.java | 2 - .../SPDF/model/api/MultiplePDFFiles.java | 2 - .../SPDF/model/api/PDFComparison.java | 2 - .../SPDF/model/api/PDFComparisonAndCount.java | 2 - .../SPDF/model/api/PDFWithPageNums.java | 7 +- .../model/api/SplitPdfByChaptersRequest.java | 2 - .../model/api/SplitPdfBySectionsRequest.java | 2 - .../model/api/user/UpdateUserDetails.java | 2 - .../model/api/user/UpdateUserUsername.java | 2 - .../SPDF/model/api/user/Username.java | 2 - .../SPDF/model/api/user/UsernameAndPass.java | 2 - .../service/CustomPDFDocumentFactory.java | 6 +- .../service/MetricsAggregatorService.java | 14 +-- .../SPDF/service/PdfMetadataService.java | 1 - .../software/SPDF/service/PostHogService.java | 1 - .../misc/ReplaceAndInvertColorService.java | 9 +- .../software/SPDF/utils/FileMonitor.java | 2 - 106 files changed, 302 insertions(+), 796 deletions(-) diff --git a/src/main/java/stirling/software/SPDF/EE/KeygenLicenseVerifier.java b/src/main/java/stirling/software/SPDF/EE/KeygenLicenseVerifier.java index e4bd06312..473f5f385 100644 --- a/src/main/java/stirling/software/SPDF/EE/KeygenLicenseVerifier.java +++ b/src/main/java/stirling/software/SPDF/EE/KeygenLicenseVerifier.java @@ -9,7 +9,6 @@ import java.util.Base64; import org.bouncycastle.crypto.params.Ed25519PublicKeyParameters; import org.bouncycastle.crypto.signers.Ed25519Signer; import org.bouncycastle.util.encoders.Hex; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.fasterxml.jackson.databind.JsonNode; @@ -17,6 +16,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.posthog.java.shaded.org.json.JSONException; import com.posthog.java.shaded.org.json.JSONObject; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.ApplicationProperties; @@ -24,6 +24,7 @@ import stirling.software.SPDF.utils.GeneralUtils; @Service @Slf4j +@RequiredArgsConstructor public class KeygenLicenseVerifier { enum License { @@ -47,40 +48,35 @@ public class KeygenLicenseVerifier { private static final ObjectMapper objectMapper = new ObjectMapper(); private final ApplicationProperties applicationProperties; - @Autowired - public KeygenLicenseVerifier(ApplicationProperties applicationProperties) { - this.applicationProperties = applicationProperties; - } - public License verifyLicense(String licenseKeyOrCert) { - License license; + License license; - if (isCertificateLicense(licenseKeyOrCert)) { - log.info("Detected certificate-based license. Processing..."); - boolean isValid = verifyCertificateLicense(licenseKeyOrCert); - if (isValid) { - license = isEnterpriseLicense ? License.ENTERPRISE : License.PRO; - } else { - license = License.NORMAL; - } - } else if (isJWTLicense(licenseKeyOrCert)) { - log.info("Detected JWT-style license key. Processing..."); - boolean isValid = verifyJWTLicense(licenseKeyOrCert); - if (isValid) { - license = isEnterpriseLicense ? License.ENTERPRISE : License.PRO; - } else { - license = License.NORMAL; - } - } else { - log.info("Detected standard license key. Processing..."); - boolean isValid = verifyStandardLicense(licenseKeyOrCert); - if (isValid) { - license = isEnterpriseLicense ? License.ENTERPRISE : License.PRO; - } else { - license = License.NORMAL; - } - } - return license; + if (isCertificateLicense(licenseKeyOrCert)) { + log.info("Detected certificate-based license. Processing..."); + boolean isValid = verifyCertificateLicense(licenseKeyOrCert); + if (isValid) { + license = isEnterpriseLicense ? License.ENTERPRISE : License.PRO; + } else { + license = License.NORMAL; + } + } else if (isJWTLicense(licenseKeyOrCert)) { + log.info("Detected JWT-style license key. Processing..."); + boolean isValid = verifyJWTLicense(licenseKeyOrCert); + if (isValid) { + license = isEnterpriseLicense ? License.ENTERPRISE : License.PRO; + } else { + license = License.NORMAL; + } + } else { + log.info("Detected standard license key. Processing..."); + boolean isValid = verifyStandardLicense(licenseKeyOrCert); + if (isValid) { + license = isEnterpriseLicense ? License.ENTERPRISE : License.PRO; + } else { + license = License.NORMAL; + } + } + return license; } private boolean isEnterpriseLicense = false; @@ -123,7 +119,7 @@ public class KeygenLicenseVerifier { } // Verify license file algorithm - if (!algorithm.equals("base64+ed25519")) { + if (!"base64+ed25519".equals(algorithm)) { log.error( "Unsupported algorithm: {}. Only base64+ed25519 is supported.", algorithm); return false; @@ -193,8 +189,6 @@ public class KeygenLicenseVerifier { private boolean processCertificateData(String certData) { try { - - JSONObject licenseData = new JSONObject(certData); JSONObject metaObj = licenseData.optJSONObject("meta"); if (metaObj != null) { @@ -208,7 +202,8 @@ public class KeygenLicenseVerifier { if (issued.isAfter(now)) { log.error( - "License file issued date is in the future. Please adjust system time or request a new license"); + "License file issued date is in the future. Please adjust system" + + " time or request a new license"); return false; } @@ -248,8 +243,8 @@ public class KeygenLicenseVerifier { // Check license status if available String status = attributesObj.optString("status", null); if (status != null - && !status.equals("ACTIVE") - && !status.equals("EXPIRING")) { // Accept "EXPIRING" status as valid + && !"ACTIVE".equals(status) + && !"EXPIRING".equals(status)) { // Accept "EXPIRING" status as valid log.error("License status is not active: {}", status); return false; } @@ -273,7 +268,8 @@ public class KeygenLicenseVerifier { String[] parts = licenseData.split("\\.", 2); if (parts.length != 2) { log.error( - "Invalid ED25519_SIGN license format. Expected format: key/payload.signature"); + "Invalid ED25519_SIGN license format. Expected format:" + + " key/payload.signature"); return false; } @@ -354,7 +350,7 @@ public class KeygenLicenseVerifier { // Check expiry date String expiryStr = licenseObj.optString("expiry", null); - if (expiryStr != null && !expiryStr.equals("null")) { + if (expiryStr != null && !"null".equals(expiryStr)) { java.time.Instant expiry = java.time.Instant.parse(expiryStr); java.time.Instant now = java.time.Instant.now(); @@ -397,8 +393,7 @@ public class KeygenLicenseVerifier { } else { // Try to get users from metadata if present Object metadataObj = policyObj.opt("metadata"); - if (metadataObj instanceof JSONObject) { - JSONObject metadata = (JSONObject) metadataObj; + if (metadataObj instanceof JSONObject metadata) { users = metadata.optInt("users", 1); applicationProperties.getPremium().setMaxUsers(users); log.info("License allows for {} users (from metadata)", users); @@ -411,7 +406,6 @@ public class KeygenLicenseVerifier { log.info("Using default of 1 user for license"); } } - } return true; @@ -438,7 +432,8 @@ public class KeygenLicenseVerifier { || "NO_MACHINES".equals(code) || "FINGERPRINT_SCOPE_MISMATCH".equals(code)) { log.info( - "License not activated for this machine. Attempting to activate..."); + "License not activated for this machine. Attempting to" + + " activate..."); boolean activated = activateMachine(licenseKey, licenseId, machineFingerprint); if (activated) { diff --git a/src/main/java/stirling/software/SPDF/EE/LicenseKeyChecker.java b/src/main/java/stirling/software/SPDF/EE/LicenseKeyChecker.java index d788504c5..8e5633f41 100644 --- a/src/main/java/stirling/software/SPDF/EE/LicenseKeyChecker.java +++ b/src/main/java/stirling/software/SPDF/EE/LicenseKeyChecker.java @@ -5,7 +5,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -27,7 +26,6 @@ public class LicenseKeyChecker { private License premiumEnabledResult = License.NORMAL; - @Autowired public LicenseKeyChecker( KeygenLicenseVerifier licenseService, ApplicationProperties applicationProperties) { this.licenseService = licenseService; diff --git a/src/main/java/stirling/software/SPDF/config/AppConfig.java b/src/main/java/stirling/software/SPDF/config/AppConfig.java index 1c850b2de..f07368527 100644 --- a/src/main/java/stirling/software/SPDF/config/AppConfig.java +++ b/src/main/java/stirling/software/SPDF/config/AppConfig.java @@ -20,8 +20,7 @@ import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.thymeleaf.spring6.SpringTemplateEngine; -import com.posthog.java.shaded.kotlin.text.Regex; - +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.ApplicationProperties; @@ -29,14 +28,11 @@ import stirling.software.SPDF.model.ApplicationProperties; @Configuration @Lazy @Slf4j +@RequiredArgsConstructor public class AppConfig { private final ApplicationProperties applicationProperties; - public AppConfig(ApplicationProperties applicationProperties) { - this.applicationProperties = applicationProperties; - } - @Bean @ConditionalOnProperty(name = "system.customHTMLFiles", havingValue = "true") public SpringTemplateEngine templateEngine(ResourceLoader resourceLoader) { diff --git a/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java b/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java index 08da2fa3c..2a89cc99f 100644 --- a/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java +++ b/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java @@ -6,7 +6,6 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @@ -24,7 +23,6 @@ public class EndpointConfiguration { private Map> endpointGroups = new ConcurrentHashMap<>(); private final boolean runningProOrHigher; - @Autowired public EndpointConfiguration( ApplicationProperties applicationProperties, @Qualifier("runningProOrHigher") boolean runningProOrHigher) { diff --git a/src/main/java/stirling/software/SPDF/config/EndpointInspector.java b/src/main/java/stirling/software/SPDF/config/EndpointInspector.java index 6019ca665..d9ceb0f9d 100644 --- a/src/main/java/stirling/software/SPDF/config/EndpointInspector.java +++ b/src/main/java/stirling/software/SPDF/config/EndpointInspector.java @@ -8,7 +8,6 @@ import java.util.TreeSet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; @@ -18,7 +17,10 @@ import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; +import lombok.RequiredArgsConstructor; + @Component +@RequiredArgsConstructor public class EndpointInspector implements ApplicationListener { private static final Logger logger = LoggerFactory.getLogger(EndpointInspector.class); @@ -26,11 +28,6 @@ public class EndpointInspector implements ApplicationListener validGetEndpoints = new HashSet<>(); private boolean endpointsDiscovered = false; - @Autowired - public EndpointInspector(ApplicationContext applicationContext) { - this.applicationContext = applicationContext; - } - @Override public void onApplicationEvent(ContextRefreshedEvent event) { if (!endpointsDiscovered) { diff --git a/src/main/java/stirling/software/SPDF/config/EndpointInterceptor.java b/src/main/java/stirling/software/SPDF/config/EndpointInterceptor.java index aa3fce4c7..52fb42e07 100644 --- a/src/main/java/stirling/software/SPDF/config/EndpointInterceptor.java +++ b/src/main/java/stirling/software/SPDF/config/EndpointInterceptor.java @@ -6,18 +6,16 @@ import org.springframework.web.servlet.HandlerInterceptor; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @Component @Slf4j +@RequiredArgsConstructor public class EndpointInterceptor implements HandlerInterceptor { private final EndpointConfiguration endpointConfiguration; - public EndpointInterceptor(EndpointConfiguration endpointConfiguration) { - this.endpointConfiguration = endpointConfiguration; - } - @Override public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler) diff --git a/src/main/java/stirling/software/SPDF/config/InitialSetup.java b/src/main/java/stirling/software/SPDF/config/InitialSetup.java index 4c3131a1c..44de07d38 100644 --- a/src/main/java/stirling/software/SPDF/config/InitialSetup.java +++ b/src/main/java/stirling/software/SPDF/config/InitialSetup.java @@ -14,6 +14,7 @@ import io.micrometer.common.util.StringUtils; import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.ApplicationProperties; @@ -22,14 +23,11 @@ import stirling.software.SPDF.utils.GeneralUtils; @Component @Slf4j @Order(Ordered.HIGHEST_PRECEDENCE + 1) +@RequiredArgsConstructor public class InitialSetup { private final ApplicationProperties applicationProperties; - public InitialSetup(ApplicationProperties applicationProperties) { - this.applicationProperties = applicationProperties; - } - @PostConstruct public void init() throws IOException { initUUIDKey(); diff --git a/src/main/java/stirling/software/SPDF/config/LocaleConfiguration.java b/src/main/java/stirling/software/SPDF/config/LocaleConfiguration.java index 94c3392f9..ab37c3c5e 100644 --- a/src/main/java/stirling/software/SPDF/config/LocaleConfiguration.java +++ b/src/main/java/stirling/software/SPDF/config/LocaleConfiguration.java @@ -10,17 +10,16 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; import org.springframework.web.servlet.i18n.SessionLocaleResolver; +import lombok.RequiredArgsConstructor; + import stirling.software.SPDF.model.ApplicationProperties; @Configuration +@RequiredArgsConstructor public class LocaleConfiguration implements WebMvcConfigurer { private final ApplicationProperties applicationProperties; - public LocaleConfiguration(ApplicationProperties applicationProperties) { - this.applicationProperties = applicationProperties; - } - @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(localeChangeInterceptor()); @@ -52,7 +51,7 @@ public class LocaleConfiguration implements WebMvcConfigurer { defaultLocale = tempLocale; } else { System.err.println( - "Invalid APP_LOCALE environment variable value. Falling back to default Locale.UK."); + "Invalid SYSTEM_DEFAULTLOCALE environment variable value. Falling back to default en-GB."); } } } diff --git a/src/main/java/stirling/software/SPDF/config/MetricsFilter.java b/src/main/java/stirling/software/SPDF/config/MetricsFilter.java index d187502c8..586374cbe 100644 --- a/src/main/java/stirling/software/SPDF/config/MetricsFilter.java +++ b/src/main/java/stirling/software/SPDF/config/MetricsFilter.java @@ -2,7 +2,6 @@ package stirling.software.SPDF.config; import java.io.IOException; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; @@ -15,18 +14,16 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; +import lombok.RequiredArgsConstructor; + import stirling.software.SPDF.utils.RequestUriUtils; @Component +@RequiredArgsConstructor public class MetricsFilter extends OncePerRequestFilter { private final MeterRegistry meterRegistry; - @Autowired - public MetricsFilter(MeterRegistry meterRegistry) { - this.meterRegistry = meterRegistry; - } - @Override protected void doFilterInternal( HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) diff --git a/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java b/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java index 0734b2317..d98c33257 100644 --- a/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java +++ b/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java @@ -9,16 +9,20 @@ import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.security.SecurityRequirement; import io.swagger.v3.oas.models.security.SecurityScheme; +import lombok.RequiredArgsConstructor; + import stirling.software.SPDF.model.ApplicationProperties; @Configuration +@RequiredArgsConstructor public class OpenApiConfig { private final ApplicationProperties applicationProperties; - public OpenApiConfig(ApplicationProperties applicationProperties) { - this.applicationProperties = applicationProperties; - } + private static final String DEFAULT_TITLE = "Stirling PDF API"; + private static final String DEFAULT_DESCRIPTION = + "API documentation for all Server-Side processing.\n" + + "Please note some functionality might be UI only and missing from here."; @Bean public OpenAPI customOpenAPI() { @@ -27,29 +31,27 @@ public class OpenApiConfig { // default version if all else fails version = "1.0.0"; } - SecurityScheme apiKeyScheme = - new SecurityScheme() - .type(SecurityScheme.Type.APIKEY) - .in(SecurityScheme.In.HEADER) - .name("X-API-KEY"); if (!applicationProperties.getSecurity().getEnableLogin()) { return new OpenAPI() .components(new Components()) .info( new Info() - .title("Stirling PDF API") + .title(DEFAULT_TITLE) .version(version) - .description( - "API documentation for all Server-Side processing.\nPlease note some functionality might be UI only and missing from here.")); + .description(DEFAULT_DESCRIPTION)); } else { + SecurityScheme apiKeyScheme = + new SecurityScheme() + .type(SecurityScheme.Type.APIKEY) + .in(SecurityScheme.In.HEADER) + .name("X-API-KEY"); return new OpenAPI() .components(new Components().addSecuritySchemes("apiKey", apiKeyScheme)) .info( new Info() - .title("Stirling PDF API") + .title(DEFAULT_TITLE) .version(version) - .description( - "API documentation for all Server-Side processing.\nPlease note some functionality might be UI only and missing from here.")) + .description(DEFAULT_DESCRIPTION)) .addSecurityItem(new SecurityRequirement().addList("apiKey")); } } diff --git a/src/main/java/stirling/software/SPDF/config/WebMvcConfig.java b/src/main/java/stirling/software/SPDF/config/WebMvcConfig.java index 68d3fbbe4..63957fd0f 100644 --- a/src/main/java/stirling/software/SPDF/config/WebMvcConfig.java +++ b/src/main/java/stirling/software/SPDF/config/WebMvcConfig.java @@ -5,15 +5,14 @@ import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import lombok.RequiredArgsConstructor; + @Configuration +@RequiredArgsConstructor public class WebMvcConfig implements WebMvcConfigurer { private final EndpointInterceptor endpointInterceptor; - public WebMvcConfig(EndpointInterceptor endpointInterceptor) { - this.endpointInterceptor = endpointInterceptor; - } - @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(endpointInterceptor); diff --git a/src/main/java/stirling/software/SPDF/config/security/AppUpdateAuthService.java b/src/main/java/stirling/software/SPDF/config/security/AppUpdateAuthService.java index c8a133223..23ac9d761 100644 --- a/src/main/java/stirling/software/SPDF/config/security/AppUpdateAuthService.java +++ b/src/main/java/stirling/software/SPDF/config/security/AppUpdateAuthService.java @@ -6,24 +6,21 @@ 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.ApplicationProperties; import stirling.software.SPDF.model.User; import stirling.software.SPDF.repository.UserRepository; @Service +@RequiredArgsConstructor class AppUpdateAuthService implements ShowAdminInterface { private final UserRepository userRepository; private final ApplicationProperties applicationProperties; - public AppUpdateAuthService( - UserRepository userRepository, ApplicationProperties applicationProperties) { - this.userRepository = userRepository; - this.applicationProperties = applicationProperties; - } - @Override public boolean getShowUpdateOnlyAdmins() { boolean showUpdate = applicationProperties.getSystem().isShowUpdate(); @@ -35,7 +32,7 @@ class AppUpdateAuthService implements ShowAdminInterface { if (authentication == null || !authentication.isAuthenticated()) { return !showUpdateOnlyAdmin; } - if (authentication.getName().equalsIgnoreCase("anonymousUser")) { + if ("anonymousUser".equalsIgnoreCase(authentication.getName())) { return !showUpdateOnlyAdmin; } Optional user = userRepository.findByUsername(authentication.getName()); diff --git a/src/main/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandler.java b/src/main/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandler.java index b570d625d..d59ba5d16 100644 --- a/src/main/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandler.java +++ b/src/main/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandler.java @@ -19,7 +19,7 @@ import com.coveo.saml.SamlException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.SPDFApplication; @@ -32,7 +32,7 @@ import stirling.software.SPDF.model.provider.KeycloakProvider; import stirling.software.SPDF.utils.UrlUtils; @Slf4j -@AllArgsConstructor +@RequiredArgsConstructor public class CustomLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler { public static final String LOGOUT_PATH = "/login?logout=true"; diff --git a/src/main/java/stirling/software/SPDF/config/security/CustomUserDetailsService.java b/src/main/java/stirling/software/SPDF/config/security/CustomUserDetailsService.java index d0ee65f30..74c3fb9a4 100644 --- a/src/main/java/stirling/software/SPDF/config/security/CustomUserDetailsService.java +++ b/src/main/java/stirling/software/SPDF/config/security/CustomUserDetailsService.java @@ -11,23 +11,20 @@ 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; @Service +@RequiredArgsConstructor public class CustomUserDetailsService implements UserDetailsService { private final UserRepository userRepository; private final LoginAttemptService loginAttemptService; - public CustomUserDetailsService( - UserRepository userRepository, LoginAttemptService loginAttemptService) { - this.userRepository = userRepository; - this.loginAttemptService = loginAttemptService; - } - @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = diff --git a/src/main/java/stirling/software/SPDF/config/security/IPRateLimitingFilter.java b/src/main/java/stirling/software/SPDF/config/security/IPRateLimitingFilter.java index ed269c4d1..25f27d658 100644 --- a/src/main/java/stirling/software/SPDF/config/security/IPRateLimitingFilter.java +++ b/src/main/java/stirling/software/SPDF/config/security/IPRateLimitingFilter.java @@ -7,8 +7,11 @@ import java.util.concurrent.atomic.AtomicInteger; import jakarta.servlet.*; import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; + import stirling.software.SPDF.utils.RequestUriUtils; +@RequiredArgsConstructor public class IPRateLimitingFilter implements Filter { private final ConcurrentHashMap requestCounts = @@ -17,11 +20,6 @@ public class IPRateLimitingFilter implements Filter { private final int maxRequests; private final int maxGetRequests; - public IPRateLimitingFilter(int maxRequests, int maxGetRequests) { - this.maxRequests = maxRequests; - this.maxGetRequests = maxGetRequests; - } - @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { diff --git a/src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java b/src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java index 9299d4773..9339405da 100644 --- a/src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java +++ b/src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java @@ -7,6 +7,7 @@ import org.springframework.stereotype.Component; import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.config.interfaces.DatabaseInterface; @@ -16,6 +17,7 @@ import stirling.software.SPDF.model.exception.UnsupportedProviderException; @Slf4j @Component +@RequiredArgsConstructor public class InitialSecuritySetup { private final UserService userService; @@ -24,15 +26,6 @@ public class InitialSecuritySetup { private final DatabaseInterface databaseService; - public InitialSecuritySetup( - UserService userService, - ApplicationProperties applicationProperties, - DatabaseInterface databaseService) { - this.userService = userService; - this.applicationProperties = applicationProperties; - this.databaseService = databaseService; - } - @PostConstruct public void init() { try { diff --git a/src/main/java/stirling/software/SPDF/config/security/LoginAttemptService.java b/src/main/java/stirling/software/SPDF/config/security/LoginAttemptService.java index f036acfd4..d65557822 100644 --- a/src/main/java/stirling/software/SPDF/config/security/LoginAttemptService.java +++ b/src/main/java/stirling/software/SPDF/config/security/LoginAttemptService.java @@ -7,6 +7,7 @@ import org.springframework.stereotype.Service; import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.ApplicationProperties; @@ -14,6 +15,7 @@ import stirling.software.SPDF.model.AttemptCounter; @Service @Slf4j +@RequiredArgsConstructor public class LoginAttemptService { private final ApplicationProperties applicationProperties; @@ -26,10 +28,6 @@ public class LoginAttemptService { private boolean isBlockedEnabled = true; - public LoginAttemptService(ApplicationProperties applicationProperties) { - this.applicationProperties = applicationProperties; - } - @PostConstruct public void init() { MAX_ATTEMPT = applicationProperties.getSecurity().getLoginAttemptCount(); diff --git a/src/main/java/stirling/software/SPDF/config/security/RateLimitResetScheduler.java b/src/main/java/stirling/software/SPDF/config/security/RateLimitResetScheduler.java index a3641a701..5751ec871 100644 --- a/src/main/java/stirling/software/SPDF/config/security/RateLimitResetScheduler.java +++ b/src/main/java/stirling/software/SPDF/config/security/RateLimitResetScheduler.java @@ -3,15 +3,14 @@ package stirling.software.SPDF.config.security; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import lombok.RequiredArgsConstructor; + @Component +@RequiredArgsConstructor public class RateLimitResetScheduler { private final IPRateLimitingFilter rateLimitingFilter; - public RateLimitResetScheduler(IPRateLimitingFilter rateLimitingFilter) { - this.rateLimitingFilter = rateLimitingFilter; - } - @Scheduled(cron = "0 0 0 * * MON") // At 00:00 every Monday TODO: configurable public void resetRateLimit() { rateLimitingFilter.resetRequestCounts(); diff --git a/src/main/java/stirling/software/SPDF/config/security/UserService.java b/src/main/java/stirling/software/SPDF/config/security/UserService.java index cc12332a6..d90539171 100644 --- a/src/main/java/stirling/software/SPDF/config/security/UserService.java +++ b/src/main/java/stirling/software/SPDF/config/security/UserService.java @@ -19,6 +19,7 @@ import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.config.interfaces.DatabaseInterface; @@ -32,6 +33,7 @@ import stirling.software.SPDF.repository.UserRepository; @Service @Slf4j +@RequiredArgsConstructor public class UserService implements UserServiceInterface { private final UserRepository userRepository; @@ -48,23 +50,6 @@ public class UserService implements UserServiceInterface { private final ApplicationProperties applicationProperties; - public UserService( - UserRepository userRepository, - AuthorityRepository authorityRepository, - PasswordEncoder passwordEncoder, - MessageSource messageSource, - SessionPersistentRegistry sessionRegistry, - DatabaseInterface databaseService, - ApplicationProperties applicationProperties) { - this.userRepository = userRepository; - this.authorityRepository = authorityRepository; - this.passwordEncoder = passwordEncoder; - this.messageSource = messageSource; - this.sessionRegistry = sessionRegistry; - this.databaseService = databaseService; - this.applicationProperties = applicationProperties; - } - @Transactional public void migrateOauth2ToSSO() { userRepository diff --git a/src/main/java/stirling/software/SPDF/config/security/database/ScheduledTasks.java b/src/main/java/stirling/software/SPDF/config/security/database/ScheduledTasks.java index c318f1d97..a0c4af046 100644 --- a/src/main/java/stirling/software/SPDF/config/security/database/ScheduledTasks.java +++ b/src/main/java/stirling/software/SPDF/config/security/database/ScheduledTasks.java @@ -6,20 +6,19 @@ 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.SPDF.model.exception.UnsupportedProviderException; @Component @Conditional(H2SQLCondition.class) +@RequiredArgsConstructor public class ScheduledTasks { private final DatabaseInterface databaseService; - public ScheduledTasks(DatabaseInterface databaseService) { - this.databaseService = databaseService; - } - @Scheduled(cron = "0 0 0 * * ?") public void performBackup() throws SQLException, UnsupportedProviderException { databaseService.exportDatabase(); diff --git a/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java b/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java index 4ee49aed4..1b320c2c7 100644 --- a/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java @@ -15,6 +15,8 @@ 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.ApplicationProperties; @@ -23,6 +25,7 @@ import stirling.software.SPDF.model.AuthenticationType; import stirling.software.SPDF.model.exception.UnsupportedProviderException; import stirling.software.SPDF.utils.RequestUriUtils; +@RequiredArgsConstructor public class CustomOAuth2AuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler { @@ -30,15 +33,6 @@ public class CustomOAuth2AuthenticationSuccessHandler private final ApplicationProperties applicationProperties; private final UserService userService; - public CustomOAuth2AuthenticationSuccessHandler( - LoginAttemptService loginAttemptService, - ApplicationProperties applicationProperties, - UserService userService) { - this.applicationProperties = applicationProperties; - this.userService = userService; - this.loginAttemptService = loginAttemptService; - } - @Override public void onAuthenticationSuccess( HttpServletRequest request, HttpServletResponse response, Authentication authentication) diff --git a/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2ResponseAuthenticationConverter.java b/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2ResponseAuthenticationConverter.java index 3a576aea5..4a9cdd284 100644 --- a/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2ResponseAuthenticationConverter.java +++ b/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2ResponseAuthenticationConverter.java @@ -13,6 +13,7 @@ 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; @@ -20,15 +21,12 @@ import stirling.software.SPDF.model.User; @Slf4j @ConditionalOnProperty(name = "security.saml2.enabled", havingValue = "true") +@RequiredArgsConstructor public class CustomSaml2ResponseAuthenticationConverter implements Converter { private final UserService userService; - public CustomSaml2ResponseAuthenticationConverter(UserService userService) { - this.userService = userService; - } - private Map> extractAttributes(Assertion assertion) { Map> attributes = new HashMap<>(); diff --git a/src/main/java/stirling/software/SPDF/config/security/saml2/SAML2Configuration.java b/src/main/java/stirling/software/SPDF/config/security/saml2/SAML2Configuration.java index a6b487ec6..58c0a1637 100644 --- a/src/main/java/stirling/software/SPDF/config/security/saml2/SAML2Configuration.java +++ b/src/main/java/stirling/software/SPDF/config/security/saml2/SAML2Configuration.java @@ -21,6 +21,7 @@ import org.springframework.security.saml2.provider.service.web.authentication.Op import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.ApplicationProperties; @@ -29,14 +30,11 @@ import stirling.software.SPDF.model.ApplicationProperties.Security.SAML2; @Configuration @Slf4j @ConditionalOnProperty(value = "security.saml2.enabled", havingValue = "true") +@RequiredArgsConstructor public class SAML2Configuration { private final ApplicationProperties applicationProperties; - public SAML2Configuration(ApplicationProperties applicationProperties) { - this.applicationProperties = applicationProperties; - } - @Bean @ConditionalOnProperty(name = "security.saml2.enabled", havingValue = "true") public RelyingPartyRegistrationRepository relyingPartyRegistrations() throws Exception { diff --git a/src/main/java/stirling/software/SPDF/config/security/session/CustomHttpSessionListener.java b/src/main/java/stirling/software/SPDF/config/security/session/CustomHttpSessionListener.java index 3d97181ab..09868eff9 100644 --- a/src/main/java/stirling/software/SPDF/config/security/session/CustomHttpSessionListener.java +++ b/src/main/java/stirling/software/SPDF/config/security/session/CustomHttpSessionListener.java @@ -1,6 +1,5 @@ package stirling.software.SPDF.config.security.session; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import jakarta.servlet.http.HttpSessionEvent; @@ -14,7 +13,6 @@ public class CustomHttpSessionListener implements HttpSessionListener { private SessionPersistentRegistry sessionPersistentRegistry; - @Autowired public CustomHttpSessionListener(SessionPersistentRegistry sessionPersistentRegistry) { super(); this.sessionPersistentRegistry = sessionPersistentRegistry; diff --git a/src/main/java/stirling/software/SPDF/config/security/session/SessionPersistentRegistry.java b/src/main/java/stirling/software/SPDF/config/security/session/SessionPersistentRegistry.java index 18b037164..9e249f3a4 100644 --- a/src/main/java/stirling/software/SPDF/config/security/session/SessionPersistentRegistry.java +++ b/src/main/java/stirling/software/SPDF/config/security/session/SessionPersistentRegistry.java @@ -12,10 +12,13 @@ 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; @Component +@RequiredArgsConstructor public class SessionPersistentRegistry implements SessionRegistry { private final SessionRepository sessionRepository; @@ -23,10 +26,6 @@ public class SessionPersistentRegistry implements SessionRegistry { @Value("${server.servlet.session.timeout:30m}") private Duration defaultMaxInactiveInterval; - public SessionPersistentRegistry(SessionRepository sessionRepository) { - this.sessionRepository = sessionRepository; - } - @Override public List getAllPrincipals() { List sessions = sessionRepository.findAll(); diff --git a/src/main/java/stirling/software/SPDF/config/security/session/SessionScheduled.java b/src/main/java/stirling/software/SPDF/config/security/session/SessionScheduled.java index 9710316e3..46c17a77e 100644 --- a/src/main/java/stirling/software/SPDF/config/security/session/SessionScheduled.java +++ b/src/main/java/stirling/software/SPDF/config/security/session/SessionScheduled.java @@ -9,15 +9,14 @@ 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 { private final SessionPersistentRegistry sessionPersistentRegistry; - public SessionScheduled(SessionPersistentRegistry sessionPersistentRegistry) { - this.sessionPersistentRegistry = sessionPersistentRegistry; - } - @Scheduled(cron = "0 0/5 * * * ?") public void expireSessions() { Instant now = Instant.now(); diff --git a/src/main/java/stirling/software/SPDF/controller/api/AdditionalLanguageJsController.java b/src/main/java/stirling/software/SPDF/controller/api/AdditionalLanguageJsController.java index 8475d1f20..e5d3ba884 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/AdditionalLanguageJsController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/AdditionalLanguageJsController.java @@ -14,18 +14,17 @@ import io.swagger.v3.oas.annotations.Hidden; import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; + import stirling.software.SPDF.service.LanguageService; @RestController @RequestMapping("/js") +@RequiredArgsConstructor public class AdditionalLanguageJsController { private final LanguageService languageService; - public AdditionalLanguageJsController(LanguageService languageService) { - this.languageService = languageService; - } - @Hidden @GetMapping(value = "/additionalLanguageCode.js", produces = "application/javascript") public void generateAdditionalLanguageJs(HttpServletResponse response) throws IOException { 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 2406e1168..75f61e64e 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/AnalysisController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/AnalysisController.java @@ -11,27 +11,24 @@ import org.apache.pdfbox.pdmodel.PDPageTree; import org.apache.pdfbox.pdmodel.encryption.PDEncryption; import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation; import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; + import stirling.software.SPDF.model.api.PDFFile; import stirling.software.SPDF.service.CustomPDFDocumentFactory; @RestController @RequestMapping("/api/v1/analysis") @Tag(name = "Analysis", description = "Analysis APIs") +@RequiredArgsConstructor public class AnalysisController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public AnalysisController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(value = "/page-count", consumes = "multipart/form-data") @Operation( summary = "Get PDF page count", 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 68c3a44f3..ad16c460e 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/CropController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/CropController.java @@ -10,7 +10,6 @@ import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -20,6 +19,8 @@ import org.springframework.web.bind.annotation.RestController; import io.swagger.v3.oas.annotations.Operation; 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; @@ -27,15 +28,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") @Tag(name = "General", description = "General APIs") +@RequiredArgsConstructor public class CropController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public CropController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(value = "/crop", consumes = "multipart/form-data") @Operation( summary = "Crops a PDF document", diff --git a/src/main/java/stirling/software/SPDF/controller/api/DatabaseController.java b/src/main/java/stirling/software/SPDF/controller/api/DatabaseController.java index 79138721c..8e3484f23 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/DatabaseController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/DatabaseController.java @@ -24,6 +24,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.config.security.database.DatabaseService; @@ -34,14 +35,11 @@ import stirling.software.SPDF.config.security.database.DatabaseService; @PreAuthorize("hasRole('ROLE_ADMIN')") @Conditional(H2SQLCondition.class) @Tag(name = "Database", description = "Database APIs for backup, import, and management") +@RequiredArgsConstructor public class DatabaseController { private final DatabaseService databaseService; - public DatabaseController(DatabaseService databaseService) { - this.databaseService = databaseService; - } - @Operation( summary = "Import a database backup file", description = "Uploads and imports a database backup SQL file.") 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 279dd2489..a226bd02d 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/MergeController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/MergeController.java @@ -18,7 +18,6 @@ import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; import org.apache.pdfbox.pdmodel.interactive.form.PDField; import org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -29,6 +28,7 @@ import org.springframework.web.multipart.MultipartFile; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.general.MergePdfsRequest; @@ -40,15 +40,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @Slf4j @RequestMapping("/api/v1/general") @Tag(name = "General", description = "General APIs") +@RequiredArgsConstructor public class MergeController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public MergeController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - // Merges a list of PDDocument objects into a single PDDocument public PDDocument mergeDocuments(List documents) throws IOException { PDDocument mergedDoc = pdfDocumentFactory.createNewDocument(); 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 73bbe98a9..f8f4bd73c 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/MultiPageLayoutController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/MultiPageLayoutController.java @@ -11,7 +11,6 @@ import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; import org.apache.pdfbox.util.Matrix; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -23,6 +22,8 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; 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; @@ -30,15 +31,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") @Tag(name = "General", description = "General APIs") +@RequiredArgsConstructor public class MultiPageLayoutController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public MultiPageLayoutController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(value = "/multi-page-layout", consumes = "multipart/form-data") @Operation( summary = "Merge multiple pages of a PDF document into a single page", 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 fce61d3e5..a9d66106d 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/PdfImageRemovalController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/PdfImageRemovalController.java @@ -4,7 +4,6 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import org.apache.pdfbox.pdmodel.PDDocument; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -14,6 +13,8 @@ import org.springframework.web.bind.annotation.RestController; import io.swagger.v3.oas.annotations.Operation; 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; @@ -26,6 +27,7 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") @Tag(name = "General", description = "General APIs") +@RequiredArgsConstructor public class PdfImageRemovalController { // Service for removing images from PDFs @@ -33,19 +35,6 @@ public class PdfImageRemovalController { private final CustomPDFDocumentFactory pdfDocumentFactory; - /** - * Constructor for dependency injection of PdfImageRemovalService. - * - * @param pdfImageRemovalService The service used for removing images from PDFs. - */ - @Autowired - public PdfImageRemovalController( - PdfImageRemovalService pdfImageRemovalService, - CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfImageRemovalService = pdfImageRemovalService; - this.pdfDocumentFactory = pdfDocumentFactory; - } - /** * Endpoint to remove images from a PDF file. * 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 996ed45bb..60a398305 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/PdfOverlayController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/PdfOverlayController.java @@ -12,7 +12,6 @@ import java.util.Map; import org.apache.pdfbox.Loader; import org.apache.pdfbox.multipdf.Overlay; import org.apache.pdfbox.pdmodel.PDDocument; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; @@ -25,6 +24,8 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; 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; @@ -33,15 +34,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") @Tag(name = "General", description = "General APIs") +@RequiredArgsConstructor public class PdfOverlayController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public PdfOverlayController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(value = "/overlay-pdfs", consumes = "multipart/form-data") @Operation( summary = "Overlay PDF files in various modes", 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 342d3cb8b..0ce0c1e24 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/RearrangePagesPDFController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/RearrangePagesPDFController.java @@ -7,7 +7,6 @@ import java.util.List; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -19,6 +18,7 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.SortTypes; @@ -32,15 +32,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RequestMapping("/api/v1/general") @Slf4j @Tag(name = "General", description = "General APIs") +@RequiredArgsConstructor public class RearrangePagesPDFController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public RearrangePagesPDFController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/remove-pages") @Operation( summary = "Remove pages from a PDF file", 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 b029450ef..4b1a221a9 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/RotationController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/RotationController.java @@ -5,7 +5,6 @@ import java.io.IOException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageTree; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -17,6 +16,8 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; 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; @@ -24,15 +25,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") @Tag(name = "General", description = "General APIs") +@RequiredArgsConstructor public class RotationController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public RotationController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/rotate-pdf") @Operation( summary = "Rotate a PDF file", 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 48e3c0f44..65a10c77e 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/ScalePagesController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/ScalePagesController.java @@ -12,7 +12,6 @@ import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; import org.apache.pdfbox.util.Matrix; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -24,6 +23,8 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; 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; @@ -31,15 +32,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") @Tag(name = "General", description = "General APIs") +@RequiredArgsConstructor public class ScalePagesController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public ScalePagesController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(value = "/scale-pages", consumes = "multipart/form-data") @Operation( summary = "Change the size of a PDF page/document", 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 25c198a8a..a64379a64 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SettingsController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SettingsController.java @@ -14,6 +14,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; + import stirling.software.SPDF.config.EndpointConfiguration; import stirling.software.SPDF.config.InstallationPathConfig; import stirling.software.SPDF.model.ApplicationProperties; @@ -22,19 +24,13 @@ import stirling.software.SPDF.utils.GeneralUtils; @Controller @Tag(name = "Settings", description = "Settings APIs") @RequestMapping("/api/v1/settings") +@RequiredArgsConstructor @Hidden public class SettingsController { private final ApplicationProperties applicationProperties; private final EndpointConfiguration endpointConfiguration; - public SettingsController( - ApplicationProperties applicationProperties, - EndpointConfiguration endpointConfiguration) { - this.applicationProperties = applicationProperties; - this.endpointConfiguration = endpointConfiguration; - } - @PostMapping("/update-enable-analytics") @Hidden public ResponseEntity updateApiKey(@RequestBody Boolean enabled) throws IOException { 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 696482b63..af7fda04a 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPDFController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPDFController.java @@ -12,7 +12,6 @@ import java.util.zip.ZipOutputStream; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; @@ -25,6 +24,7 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.PDFWithPageNums; @@ -35,15 +35,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RequestMapping("/api/v1/general") @Slf4j @Tag(name = "General", description = "General APIs") +@RequiredArgsConstructor public class SplitPDFController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public SplitPDFController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/split-pages") @Operation( summary = "Split a PDF file into separate documents", 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 698e2b50e..5e0f1d012 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfByChaptersController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfByChaptersController.java @@ -12,7 +12,6 @@ import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline; import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; @@ -29,6 +28,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.PdfMetadata; @@ -41,19 +41,13 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RequestMapping("/api/v1/general") @Slf4j @Tag(name = "General", description = "General APIs") +@RequiredArgsConstructor public class SplitPdfByChaptersController { private final PdfMetadataService pdfMetadataService; private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public SplitPdfByChaptersController( - PdfMetadataService pdfMetadataService, CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfMetadataService = pdfMetadataService; - this.pdfDocumentFactory = pdfDocumentFactory; - } - private static List extractOutlineItems( PDDocument sourceDocument, PDOutlineItem current, 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 83f0cb0e9..a2b0e2add 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java @@ -17,7 +17,6 @@ import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; import org.apache.pdfbox.util.Matrix; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; @@ -30,6 +29,8 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; 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; @@ -37,15 +38,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") @Tag(name = "General", description = "General APIs") +@RequiredArgsConstructor public class SplitPdfBySectionsController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public SplitPdfBySectionsController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(value = "/split-pdf-by-sections", consumes = "multipart/form-data") @Operation( summary = "Split PDF pages into smaller sections", 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 fb5375ef3..1049e02bc 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySizeController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySizeController.java @@ -9,7 +9,6 @@ import java.util.zip.ZipOutputStream; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; @@ -22,6 +21,7 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.general.SplitPdfBySizeOrCountRequest; @@ -33,15 +33,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RequestMapping("/api/v1/general") @Slf4j @Tag(name = "General", description = "General APIs") +@RequiredArgsConstructor public class SplitPdfBySizeController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public SplitPdfBySizeController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(value = "/split-by-size-or-count", consumes = "multipart/form-data") @Operation( summary = "Auto split PDF pages into separate documents based on size or count", 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 f6b0ed947..b3ae43071 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/ToSinglePageController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/ToSinglePageController.java @@ -10,7 +10,6 @@ import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -20,6 +19,8 @@ import org.springframework.web.bind.annotation.RestController; import io.swagger.v3.oas.annotations.Operation; 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; @@ -27,15 +28,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @RequestMapping("/api/v1/general") @Tag(name = "General", description = "General APIs") +@RequiredArgsConstructor public class ToSinglePageController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public ToSinglePageController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/pdf-to-single-page") @Operation( summary = "Convert a multi-page PDF into a single long page PDF", diff --git a/src/main/java/stirling/software/SPDF/controller/api/UserController.java b/src/main/java/stirling/software/SPDF/controller/api/UserController.java index 06dc76658..ce4770499 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/UserController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/UserController.java @@ -27,6 +27,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.config.security.UserService; @@ -43,6 +44,7 @@ import stirling.software.SPDF.model.exception.UnsupportedProviderException; @Tag(name = "User", description = "User APIs") @RequestMapping("/api/v1/user") @Slf4j +@RequiredArgsConstructor public class UserController { private static final String LOGIN_MESSAGETYPE_CREDSUPDATED = "/login?messageType=credsUpdated"; @@ -50,15 +52,6 @@ public class UserController { private final SessionPersistentRegistry sessionRegistry; private final ApplicationProperties applicationProperties; - public UserController( - UserService userService, - SessionPersistentRegistry sessionRegistry, - ApplicationProperties applicationProperties) { - this.userService = userService; - this.sessionRegistry = sessionRegistry; - this.applicationProperties = applicationProperties; - } - @PreAuthorize("!hasAuthority('ROLE_DEMO_USER')") @PostMapping("/register") public String register(@ModelAttribute UsernameAndPass requestModel, Model model) 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 52b124e53..bfd67ef76 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 @@ -1,6 +1,5 @@ package stirling.software.SPDF.controller.api.converters; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -12,6 +11,8 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; + import stirling.software.SPDF.config.RuntimePathConfig; import stirling.software.SPDF.model.ApplicationProperties; import stirling.software.SPDF.model.api.converters.HTMLToPdfRequest; @@ -22,6 +23,7 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @Tag(name = "Convert", description = "Convert APIs") @RequestMapping("/api/v1/convert") +@RequiredArgsConstructor public class ConvertHtmlToPDF { private final CustomPDFDocumentFactory pdfDocumentFactory; @@ -30,17 +32,6 @@ public class ConvertHtmlToPDF { private final RuntimePathConfig runtimePathConfig; - @Autowired - public ConvertHtmlToPDF( - CustomPDFDocumentFactory pdfDocumentFactory, - ApplicationProperties applicationProperties, - RuntimePathConfig runtimePathConfig) { - this.pdfDocumentFactory = pdfDocumentFactory; - - this.applicationProperties = applicationProperties; - this.runtimePathConfig = runtimePathConfig; - } - @PostMapping(consumes = "multipart/form-data", value = "/html/pdf") @Operation( summary = "Convert an HTML or ZIP (containing HTML and CSS) to PDF", 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 c64084bf4..2fad77e37 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 @@ -15,7 +15,6 @@ import org.apache.commons.io.FileUtils; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.rendering.ImageType; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; @@ -28,6 +27,7 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.converters.ConvertToImageRequest; @@ -40,15 +40,11 @@ import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; @RequestMapping("/api/v1/convert") @Slf4j @Tag(name = "Convert", description = "Convert APIs") +@RequiredArgsConstructor public class ConvertImgPDFController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public ConvertImgPDFController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/pdf/img") @Operation( summary = "Convert PDF to image(s)", 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 547d9c646..b8a190f90 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 @@ -10,7 +10,6 @@ import org.commonmark.node.Node; import org.commonmark.parser.Parser; import org.commonmark.renderer.html.AttributeProvider; import org.commonmark.renderer.html.HtmlRenderer; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -22,6 +21,8 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; + import stirling.software.SPDF.config.RuntimePathConfig; import stirling.software.SPDF.model.ApplicationProperties; import stirling.software.SPDF.model.api.GeneralFile; @@ -32,6 +33,7 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @Tag(name = "Convert", description = "Convert APIs") @RequestMapping("/api/v1/convert") +@RequiredArgsConstructor public class ConvertMarkdownToPdf { private final CustomPDFDocumentFactory pdfDocumentFactory; @@ -39,17 +41,6 @@ public class ConvertMarkdownToPdf { private final ApplicationProperties applicationProperties; private final RuntimePathConfig runtimePathConfig; - @Autowired - public ConvertMarkdownToPdf( - CustomPDFDocumentFactory pdfDocumentFactory, - ApplicationProperties applicationProperties, - RuntimePathConfig runtimePathConfig) { - this.pdfDocumentFactory = pdfDocumentFactory; - - this.applicationProperties = applicationProperties; - this.runtimePathConfig = runtimePathConfig; - } - @PostMapping(consumes = "multipart/form-data", value = "/markdown/pdf") @Operation( summary = "Convert a Markdown file to PDF", 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 46bf4c033..38a0ac16e 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 @@ -10,7 +10,6 @@ import java.util.List; import org.apache.commons.io.FilenameUtils; import org.apache.pdfbox.pdmodel.PDDocument; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -22,6 +21,8 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; 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; @@ -32,18 +33,12 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @Tag(name = "Convert", description = "Convert APIs") @RequestMapping("/api/v1/convert") +@RequiredArgsConstructor public class ConvertOfficeController { private final CustomPDFDocumentFactory pdfDocumentFactory; private final RuntimePathConfig runtimePathConfig; - @Autowired - public ConvertOfficeController( - CustomPDFDocumentFactory pdfDocumentFactory, RuntimePathConfig runtimePathConfig) { - this.pdfDocumentFactory = pdfDocumentFactory; - this.runtimePathConfig = runtimePathConfig; - } - public File convertToPdf(MultipartFile inputFile) throws IOException, InterruptedException { // Check for valid file extension String originalFilename = Filenames.toSimpleFileName(inputFile.getOriginalFilename()); 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 f603aa277..76f0b9286 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 @@ -4,7 +4,6 @@ import java.io.IOException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.text.PDFTextStripper; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; @@ -17,6 +16,8 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; 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; @@ -28,15 +29,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @RequestMapping("/api/v1/convert") @Tag(name = "Convert", description = "Convert APIs") +@RequiredArgsConstructor public class ConvertPDFToOffice { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public ConvertPDFToOffice(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/pdf/presentation") @Operation( summary = "Convert PDF to Presentation format", 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 941d55795..9ef490e9a 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 @@ -7,7 +7,6 @@ import java.util.ArrayList; import java.util.List; import org.apache.pdfbox.pdmodel.PDDocument; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -17,6 +16,7 @@ import org.springframework.web.bind.annotation.RestController; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.config.RuntimePathConfig; @@ -32,22 +32,13 @@ import stirling.software.SPDF.utils.WebResponseUtils; @Tag(name = "Convert", description = "Convert APIs") @Slf4j @RequestMapping("/api/v1/convert") +@RequiredArgsConstructor public class ConvertWebsiteToPDF { private final CustomPDFDocumentFactory pdfDocumentFactory; private final RuntimePathConfig runtimePathConfig; private final ApplicationProperties applicationProperties; - @Autowired - public ConvertWebsiteToPDF( - CustomPDFDocumentFactory pdfDocumentFactory, - RuntimePathConfig runtimePathConfig, - ApplicationProperties applicationProperties) { - this.pdfDocumentFactory = pdfDocumentFactory; - this.runtimePathConfig = runtimePathConfig; - this.applicationProperties = applicationProperties; - } - @PostMapping(consumes = "multipart/form-data", value = "/url/pdf") @Operation( summary = "Convert a URL to a PDF", 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 06cc45094..878936534 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 @@ -13,7 +13,6 @@ import java.util.zip.ZipOutputStream; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.QuoteMode; import org.apache.pdfbox.pdmodel.PDDocument; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ContentDisposition; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -26,6 +25,7 @@ import org.springframework.web.bind.annotation.RestController; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.PDFWithPageNums; @@ -41,15 +41,11 @@ import technology.tabula.extractors.SpreadsheetExtractionAlgorithm; @RequestMapping("/api/v1/convert") @Tag(name = "Convert", description = "Convert APIs") @Slf4j +@RequiredArgsConstructor public class ExtractCSVController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public ExtractCSVController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(value = "/pdf/csv", consumes = "multipart/form-data") @Operation( summary = "Extracts a CSV document from a PDF", 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 006598bd1..935118a7d 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 @@ -5,7 +5,6 @@ import java.io.IOException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.common.PDRectangle; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -17,6 +16,8 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; + import stirling.software.SPDF.model.api.PDFComparisonAndCount; import stirling.software.SPDF.model.api.PDFWithPageNums; import stirling.software.SPDF.model.api.filter.ContainsTextRequest; @@ -30,15 +31,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @RequestMapping("/api/v1/filter") @Tag(name = "Filter", description = "Filter APIs") +@RequiredArgsConstructor public class FilterController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public FilterController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/filter-contains-text") @Operation( summary = "Checks if a PDF contains set text, returns true if does", 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 1d71d94b7..5d6ce4516 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 @@ -8,7 +8,6 @@ import java.util.List; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.text.PDFTextStripper; import org.apache.pdfbox.text.TextPosition; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -20,6 +19,7 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.ExtractHeaderRequest; @@ -30,18 +30,14 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RequestMapping("/api/v1/misc") @Slf4j @Tag(name = "Misc", description = "Miscellaneous APIs") +@RequiredArgsConstructor public class AutoRenameController { - private static final float TITLE_FONT_SIZE_THRESHOLD = 20.0f; + // private static final float TITLE_FONT_SIZE_THRESHOLD = 20.0f; private static final int LINE_LIMIT = 200; private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public AutoRenameController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/auto-rename") @Operation( summary = "Extract header from PDF file", 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 7a5c730fe..4e976d12d 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 @@ -16,7 +16,6 @@ import java.util.zip.ZipOutputStream; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; @@ -32,6 +31,7 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.AutoSplitPdfRequest; @@ -42,6 +42,7 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RequestMapping("/api/v1/misc") @Slf4j @Tag(name = "Misc", description = "Miscellaneous APIs") +@RequiredArgsConstructor public class AutoSplitPdfController { private static final Set VALID_QR_CONTENTS = @@ -53,11 +54,6 @@ public class AutoSplitPdfController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public AutoSplitPdfController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - private static String decodeQRCode(BufferedImage bufferedImage) { LuminanceSource source; 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 c50c0a685..c341a49fc 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 @@ -13,7 +13,6 @@ import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageTree; import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.pdfbox.text.PDFTextStripper; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -27,6 +26,7 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.RemoveBlankPagesRequest; @@ -38,15 +38,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RequestMapping("/api/v1/misc") @Slf4j @Tag(name = "Misc", description = "Miscellaneous APIs") +@RequiredArgsConstructor public class BlankPageController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public BlankPageController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - public static boolean isBlankImage( BufferedImage image, int threshold, double whitePercent, int blurSize) { if (image == null) { 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 090b2b2e1..bceb9e58b 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 @@ -10,7 +10,6 @@ import org.apache.pdfbox.cos.*; import org.apache.pdfbox.io.IOUtils; import org.apache.pdfbox.pdfwriter.compress.CompressParameters; import org.apache.pdfbox.pdmodel.PDDocument; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; @@ -22,6 +21,7 @@ import org.springframework.web.multipart.MultipartFile; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.PDFFile; @@ -32,15 +32,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RequestMapping("/api/v1/misc") @Slf4j @Tag(name = "Misc", description = "Miscellaneous APIs") +@RequiredArgsConstructor public class DecompressPdfController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public DecompressPdfController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(value = "/decompress-pdf", consumes = "multipart/form-data") @Operation( summary = "Decompress PDF streams", 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 fb27bf75a..67019559e 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 @@ -16,7 +16,6 @@ import javax.imageio.ImageIO; import org.apache.commons.io.FileUtils; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; @@ -29,6 +28,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.ExtractImageScansRequest; @@ -42,17 +42,13 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RequestMapping("/api/v1/misc") @Slf4j @Tag(name = "Misc", description = "Miscellaneous APIs") +@RequiredArgsConstructor public class ExtractImageScansController { private static final String REPLACEFIRST = "[.][^.]+$"; private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public ExtractImageScansController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/extract-image-scans") @Operation( summary = "Extract image scans from an input file", 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 af865f8f4..187eda305 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 @@ -24,7 +24,6 @@ import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; @@ -37,6 +36,7 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.PDFExtractImagesRequest; @@ -48,15 +48,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RequestMapping("/api/v1/misc") @Slf4j @Tag(name = "Misc", description = "Miscellaneous APIs") +@RequiredArgsConstructor public class ExtractImagesController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public ExtractImagesController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/extract-images") @Operation( summary = "Extract images from a PDF file", 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 8ddfa1657..e81fa23f2 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 @@ -11,7 +11,6 @@ import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; import org.apache.pdfbox.rendering.ImageType; import org.apache.pdfbox.rendering.PDFRenderer; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -23,6 +22,7 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.FlattenRequest; @@ -33,15 +33,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RequestMapping("/api/v1/misc") @Slf4j @Tag(name = "Misc", description = "Miscellaneous APIs") +@RequiredArgsConstructor public class FlattenController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public FlattenController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/flatten") @Operation( summary = "Flatten PDF form fields or full page", 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 66ac528eb..10e4f6fdd 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 @@ -10,7 +10,6 @@ import java.util.Map.Entry; import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocumentInformation; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.*; @@ -20,6 +19,7 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.MetadataRequest; @@ -31,15 +31,11 @@ import stirling.software.SPDF.utils.propertyeditor.StringToMapPropertyEditor; @RequestMapping("/api/v1/misc") @Slf4j @Tag(name = "Misc", description = "Miscellaneous APIs") +@RequiredArgsConstructor public class MetadataController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public MetadataController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - private String checkUndefined(String entry) { // Check if the string is "undefined" if ("undefined".equals(entry)) { 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 e96a29c4b..558ac1fbb 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 @@ -28,6 +28,7 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.ApplicationProperties; @@ -38,19 +39,13 @@ import stirling.software.SPDF.service.CustomPDFDocumentFactory; @RequestMapping("/api/v1/misc") @Tag(name = "Misc", description = "Miscellaneous APIs") @Slf4j +@RequiredArgsConstructor public class OCRController { private final ApplicationProperties applicationProperties; private final CustomPDFDocumentFactory pdfDocumentFactory; - public OCRController( - ApplicationProperties applicationProperties, - CustomPDFDocumentFactory pdfDocumentFactory) { - this.applicationProperties = applicationProperties; - this.pdfDocumentFactory = pdfDocumentFactory; - } - /** Gets the list of available Tesseract languages from the tessdata directory */ public List getAvailableTesseractLanguages() { String tessdataDir = applicationProperties.getSystem().getTessdataDir(); @@ -61,7 +56,7 @@ public class OCRController { return Arrays.stream(files) .filter(file -> file.getName().endsWith(".traineddata")) .map(file -> file.getName().replace(".traineddata", "")) - .filter(lang -> !lang.equalsIgnoreCase("osd")) + .filter(lang -> !"osd".equalsIgnoreCase(lang)) .toList(); } 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 a953586fb..51ca9f9ff 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 @@ -2,7 +2,6 @@ package stirling.software.SPDF.controller.api.misc; import java.io.IOException; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; @@ -15,6 +14,7 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.misc.OverlayImageRequest; @@ -26,15 +26,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RequestMapping("/api/v1/misc") @Slf4j @Tag(name = "Misc", description = "Miscellaneous APIs") +@RequiredArgsConstructor public class OverlayImageController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public OverlayImageController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/add-image") @Operation( summary = "Overlay image onto a PDF file", 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 c66b55d73..cdae7dfad 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 @@ -10,7 +10,6 @@ import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.font.PDType1Font; import org.apache.pdfbox.pdmodel.font.Standard14Fonts; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; @@ -23,6 +22,8 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; 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; @@ -31,15 +32,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") @Tag(name = "Misc", description = "Miscellaneous APIs") +@RequiredArgsConstructor public class PageNumbersController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public PageNumbersController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(value = "/add-page-numbers", consumes = "multipart/form-data") @Operation( summary = "Add page numbers to a PDF document", 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 e75a2e20d..1a358b08e 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 @@ -6,7 +6,6 @@ import java.nio.file.Path; import java.util.ArrayList; import java.util.List; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -18,6 +17,8 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; 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; @@ -27,15 +28,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") @Tag(name = "Misc", description = "Miscellaneous APIs") +@RequiredArgsConstructor public class RepairController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public RepairController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/repair") @Operation( summary = "Repair a PDF file", diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/ReplaceAndInvertColorController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/ReplaceAndInvertColorController.java index 65085b1d6..927b3a51f 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/ReplaceAndInvertColorController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/ReplaceAndInvertColorController.java @@ -2,7 +2,6 @@ package stirling.software.SPDF.controller.api.misc; import java.io.IOException; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -15,22 +14,19 @@ import org.springframework.web.bind.annotation.RestController; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; + import stirling.software.SPDF.model.api.misc.ReplaceAndInvertColorRequest; import stirling.software.SPDF.service.misc.ReplaceAndInvertColorService; @RestController @RequestMapping("/api/v1/misc") @Tag(name = "Misc", description = "Miscellaneous APIs") +@RequiredArgsConstructor public class ReplaceAndInvertColorController { private ReplaceAndInvertColorService replaceAndInvertColorService; - @Autowired - public ReplaceAndInvertColorController( - ReplaceAndInvertColorService replaceAndInvertColorService) { - this.replaceAndInvertColorService = replaceAndInvertColorService; - } - @PostMapping(consumes = "multipart/form-data", value = "/replace-invert-pdf") @Operation( summary = "Replace-Invert Color PDF", 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 ca5370b32..400650be3 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 @@ -6,7 +6,6 @@ import java.util.Map; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.common.PDNameTreeNode; import org.apache.pdfbox.pdmodel.interactive.action.PDActionJavaScript; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; @@ -19,6 +18,8 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; 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; @@ -26,15 +27,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") @Tag(name = "Misc", description = "Miscellaneous APIs") +@RequiredArgsConstructor public class ShowJavascript { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public ShowJavascript(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/show-javascript") @Operation( summary = "Grabs all JS from a PDF and returns a single JS file with all code", 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 e23635b82..1ceddba83 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 @@ -24,7 +24,6 @@ import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; import org.apache.pdfbox.util.Matrix; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; @@ -37,6 +36,8 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; 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; @@ -44,15 +45,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @RequestMapping("/api/v1/misc") @Tag(name = "Misc", description = "Miscellaneous APIs") +@RequiredArgsConstructor public class StampController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public StampController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/add-stamp") @Operation( summary = "Add stamp to a PDF file", 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 6df02f24d..f8b05f576 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 @@ -23,6 +23,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.PipelineConfig; @@ -36,6 +37,7 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RequestMapping("/api/v1/pipeline") @Slf4j @Tag(name = "Pipeline", description = "Pipeline APIs") +@RequiredArgsConstructor public class PipelineController { private final PipelineProcessor processor; @@ -44,13 +46,6 @@ public class PipelineController { private final PostHogService postHogService; - public PipelineController( - PipelineProcessor processor, ObjectMapper objectMapper, PostHogService postHogService) { - this.processor = processor; - this.objectMapper = objectMapper; - this.postHogService = postHogService; - } - @PostMapping(value = "/handleData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public ResponseEntity handleData(@ModelAttribute HandleDataRequest request) throws JsonMappingException, JsonProcessingException { 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 4a8981142..7e1f2601f 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 @@ -52,7 +52,6 @@ import org.bouncycastle.operator.InputDecryptorProvider; import org.bouncycastle.operator.OperatorCreationException; import org.bouncycastle.pkcs.PKCS8EncryptedPrivateKeyInfo; import org.bouncycastle.pkcs.PKCSException; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; @@ -65,6 +64,7 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.security.SignPDFWithCertRequest; @@ -75,6 +75,7 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RequestMapping("/api/v1/security") @Slf4j @Tag(name = "Security", description = "Security APIs") +@RequiredArgsConstructor public class CertSignController { static { @@ -83,11 +84,6 @@ public class CertSignController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public CertSignController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - private static void sign( CustomPDFDocumentFactory pdfDocumentFactory, MultipartFile input, 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 3ce586491..ef82a2942 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 @@ -43,7 +43,6 @@ import org.apache.xmpbox.XMPMetadata; import org.apache.xmpbox.xml.DomXmpParser; import org.apache.xmpbox.xml.XmpParsingException; import org.apache.xmpbox.xml.XmpSerializer; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; @@ -59,6 +58,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.PDFFile; @@ -69,17 +69,13 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RequestMapping("/api/v1/security") @Slf4j @Tag(name = "Security", description = "Security APIs") +@RequiredArgsConstructor public class GetInfoOnPDF { static ObjectMapper objectMapper = new ObjectMapper(); private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public GetInfoOnPDF(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - private static void addOutlinesToArray(PDOutlineItem outline, ArrayNode arrayNode) { if (outline == null) return; 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 386e938b9..830810628 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 @@ -5,7 +5,6 @@ import java.io.IOException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.encryption.AccessPermission; import org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -17,6 +16,8 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +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; @@ -25,15 +26,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @RequestMapping("/api/v1/security") @Tag(name = "Security", description = "Security APIs") +@RequiredArgsConstructor public class PasswordController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public PasswordController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/remove-password") @Operation( summary = "Remove password from a PDF file", 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 deec98e4e..0c8a7f7e6 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 @@ -14,7 +14,6 @@ import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.PDPageTree; import org.apache.pdfbox.pdmodel.common.PDRectangle; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; @@ -28,6 +27,7 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.PDFText; @@ -45,15 +45,11 @@ import stirling.software.SPDF.utils.propertyeditor.StringToArrayListPropertyEdit @RequestMapping("/api/v1/security") @Slf4j @Tag(name = "Security", description = "Security APIs") +@RequiredArgsConstructor public class RedactController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public RedactController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @InitBinder public void initBinder(WebDataBinder binder) { binder.registerCustomEditor( 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 ddead4338..5761e854f 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 @@ -7,7 +7,6 @@ import org.apache.pdfbox.pdmodel.PDDocumentCatalog; import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; import org.apache.pdfbox.pdmodel.interactive.form.PDField; import org.apache.pdfbox.pdmodel.interactive.form.PDSignatureField; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -19,6 +18,8 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; 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; @@ -26,15 +27,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @RequestMapping("/api/v1/security") @Tag(name = "Security", description = "Security APIs") +@RequiredArgsConstructor public class RemoveCertSignController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public RemoveCertSignController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/remove-cert-sign") @Operation( summary = "Remove digital signature from PDF", 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 9615c82af..42dbfef64 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 @@ -12,7 +12,6 @@ import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLink; import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; import org.apache.pdfbox.pdmodel.interactive.form.PDField; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @@ -24,6 +23,8 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; 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; @@ -31,15 +32,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @RequestMapping("/api/v1/security") @Tag(name = "Security", description = "Security APIs") +@RequiredArgsConstructor public class SanitizeController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public SanitizeController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/sanitize-pdf") @Operation( summary = "Sanitize a PDF file", 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 400bdf44a..361bc1e3f 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 @@ -21,7 +21,6 @@ import org.bouncycastle.cms.SignerInformation; import org.bouncycastle.cms.SignerInformationStore; import org.bouncycastle.cms.jcajce.JcaSimpleSignerInfoVerifierBuilder; import org.bouncycastle.util.Store; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; @@ -33,6 +32,8 @@ import org.springframework.web.multipart.MultipartFile; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +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; @@ -41,19 +42,12 @@ import stirling.software.SPDF.service.CustomPDFDocumentFactory; @RestController @RequestMapping("/api/v1/security") @Tag(name = "Security", description = "Security APIs") +@RequiredArgsConstructor public class ValidateSignatureController { private final CustomPDFDocumentFactory pdfDocumentFactory; private final CertificateValidationService certValidationService; - @Autowired - public ValidateSignatureController( - CustomPDFDocumentFactory pdfDocumentFactory, - CertificateValidationService certValidationService) { - this.pdfDocumentFactory = pdfDocumentFactory; - this.certValidationService = certValidationService; - } - @Operation( summary = "Validate PDF Digital Signature", description = 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 7ed8a5a04..c477a88f8 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 @@ -22,7 +22,6 @@ import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; import org.apache.pdfbox.util.Matrix; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; @@ -35,6 +34,8 @@ import io.github.pixee.security.Filenames; import io.swagger.v3.oas.annotations.Operation; 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; @@ -43,15 +44,11 @@ import stirling.software.SPDF.utils.WebResponseUtils; @RestController @RequestMapping("/api/v1/security") @Tag(name = "Security", description = "Security APIs") +@RequiredArgsConstructor public class WatermarkController { private final CustomPDFDocumentFactory pdfDocumentFactory; - @Autowired - public WatermarkController(CustomPDFDocumentFactory pdfDocumentFactory) { - this.pdfDocumentFactory = pdfDocumentFactory; - } - @PostMapping(consumes = "multipart/form-data", value = "/add-watermark") @Operation( summary = "Add watermark to a PDF file", diff --git a/src/main/java/stirling/software/SPDF/controller/web/DatabaseWebController.java b/src/main/java/stirling/software/SPDF/controller/web/DatabaseWebController.java index c3bd4f2a3..738db8d89 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/DatabaseWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/DatabaseWebController.java @@ -12,19 +12,18 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; + import stirling.software.SPDF.config.security.database.DatabaseService; import stirling.software.SPDF.utils.FileInfo; @Controller @Tag(name = "Database Management", description = "Database management and security APIs") +@RequiredArgsConstructor public class DatabaseWebController { private final DatabaseService databaseService; - public DatabaseWebController(DatabaseService databaseService) { - this.databaseService = databaseService; - } - @PreAuthorize("hasRole('ROLE_ADMIN')") @GetMapping("/database") public String database(HttpServletRequest request, Model model, Authentication authentication) { diff --git a/src/main/java/stirling/software/SPDF/controller/web/HomeWebController.java b/src/main/java/stirling/software/SPDF/controller/web/HomeWebController.java index 0fdd8e9ce..9a3b2b3e2 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/HomeWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/HomeWebController.java @@ -19,6 +19,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.v3.oas.annotations.Hidden; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.ApplicationProperties; @@ -26,14 +27,11 @@ import stirling.software.SPDF.model.Dependency; @Controller @Slf4j +@RequiredArgsConstructor public class HomeWebController { private final ApplicationProperties applicationProperties; - public HomeWebController(ApplicationProperties applicationProperties) { - this.applicationProperties = applicationProperties; - } - @GetMapping("/about") @Hidden public String gameForm(Model model) { diff --git a/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java b/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java index 0fabeeae4..52c79073f 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java @@ -19,6 +19,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.config.EndpointInspector; @@ -29,6 +30,7 @@ import stirling.software.SPDF.model.ApplicationProperties; @RequestMapping("/api/v1/info") @Tag(name = "Info", description = "Info APIs") @Slf4j +@RequiredArgsConstructor public class MetricsController { private final ApplicationProperties applicationProperties; @@ -36,15 +38,6 @@ public class MetricsController { private final EndpointInspector endpointInspector; private boolean metricsEnabled; - public MetricsController( - ApplicationProperties applicationProperties, - MeterRegistry meterRegistry, - EndpointInspector endpointInspector) { - this.applicationProperties = applicationProperties; - this.meterRegistry = meterRegistry; - this.endpointInspector = endpointInspector; - } - @PostConstruct public void init() { Boolean metricsEnabled = applicationProperties.getMetrics().getEnabled(); 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 a4b2cc962..94fc85f82 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java @@ -13,19 +13,18 @@ import org.springframework.web.servlet.ModelAndView; import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; + import stirling.software.SPDF.model.ApplicationProperties; import stirling.software.SPDF.utils.CheckProgramInstall; @Controller @Tag(name = "Misc", description = "Miscellaneous APIs") +@RequiredArgsConstructor public class OtherWebController { private final ApplicationProperties applicationProperties; - public OtherWebController(ApplicationProperties applicationProperties) { - this.applicationProperties = applicationProperties; - } - @GetMapping("/compress-pdf") @Hidden public String compressPdfForm(Model model) { @@ -122,7 +121,7 @@ public class OtherWebController { return Arrays.stream(files) .filter(file -> file.getName().endsWith(".traineddata")) .map(file -> file.getName().replace(".traineddata", "")) - .filter(lang -> !lang.equalsIgnoreCase("osd")) + .filter(lang -> !"osd".equalsIgnoreCase(lang)) .sorted() .toList(); } diff --git a/src/main/java/stirling/software/SPDF/model/ApiEndpoint.java b/src/main/java/stirling/software/SPDF/model/ApiEndpoint.java index 0d707e3b1..dfb06f0d8 100644 --- a/src/main/java/stirling/software/SPDF/model/ApiEndpoint.java +++ b/src/main/java/stirling/software/SPDF/model/ApiEndpoint.java @@ -6,9 +6,9 @@ import java.util.Map; import com.fasterxml.jackson.databind.JsonNode; public class ApiEndpoint { - private String name; + private final String name; private Map parameters; - private String description; + private final String description; public ApiEndpoint(String name, JsonNode postNode) { this.name = name; diff --git a/src/main/java/stirling/software/SPDF/model/Authority.java b/src/main/java/stirling/software/SPDF/model/Authority.java index be250e8b8..4a0ed7255 100644 --- a/src/main/java/stirling/software/SPDF/model/Authority.java +++ b/src/main/java/stirling/software/SPDF/model/Authority.java @@ -2,10 +2,22 @@ package stirling.software.SPDF.model; import java.io.Serializable; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +import lombok.Getter; +import lombok.Setter; @Entity @Table(name = "authorities") +@Getter +@Setter public class Authority implements Serializable { private static final long serialVersionUID = 1L; @@ -28,28 +40,4 @@ public class Authority implements Serializable { this.user = user; user.getAuthorities().add(this); } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getAuthority() { - return authority; - } - - public void setAuthority(String authority) { - this.authority = authority; - } - - public User getUser() { - return user; - } - - public void setUser(User user) { - this.user = user; - } } diff --git a/src/main/java/stirling/software/SPDF/model/PersistentLogin.java b/src/main/java/stirling/software/SPDF/model/PersistentLogin.java index cc94eea28..c0990199c 100644 --- a/src/main/java/stirling/software/SPDF/model/PersistentLogin.java +++ b/src/main/java/stirling/software/SPDF/model/PersistentLogin.java @@ -7,8 +7,11 @@ import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.Table; +import lombok.Data; + @Entity @Table(name = "persistent_logins") +@Data public class PersistentLogin { @Id @@ -23,38 +26,4 @@ public class PersistentLogin { @Column(name = "last_used", nullable = false) private Date lastUsed; - - public String getSeries() { - return series; - } - - public void setSeries(String series) { - this.series = series; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getToken() { - return token; - } - - public void setToken(String token) { - this.token = token; - } - - public Date getLastUsed() { - return lastUsed; - } - - public void setLastUsed(Date lastUsed) { - this.lastUsed = lastUsed; - } - - // Getters, setters, etc. } diff --git a/src/main/java/stirling/software/SPDF/model/PipelineConfig.java b/src/main/java/stirling/software/SPDF/model/PipelineConfig.java index efb9b232c..b0d3a3e7d 100644 --- a/src/main/java/stirling/software/SPDF/model/PipelineConfig.java +++ b/src/main/java/stirling/software/SPDF/model/PipelineConfig.java @@ -4,6 +4,9 @@ import java.util.List; import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data public class PipelineConfig { private String name; @@ -14,36 +17,4 @@ public class PipelineConfig { @JsonProperty("outputFileName") private String outputPattern; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public List getOperations() { - return operations; - } - - public void setOperations(List operations) { - this.operations = operations; - } - - public String getOutputDir() { - return outputDir; - } - - public void setOutputDir(String outputDir) { - this.outputDir = outputDir; - } - - public String getOutputPattern() { - return outputPattern; - } - - public void setOutputPattern(String outputPattern) { - this.outputPattern = outputPattern; - } } diff --git a/src/main/java/stirling/software/SPDF/model/PipelineOperation.java b/src/main/java/stirling/software/SPDF/model/PipelineOperation.java index f61835056..30a5ad52b 100644 --- a/src/main/java/stirling/software/SPDF/model/PipelineOperation.java +++ b/src/main/java/stirling/software/SPDF/model/PipelineOperation.java @@ -2,28 +2,10 @@ package stirling.software.SPDF.model; import java.util.Map; +import lombok.Data; + +@Data public class PipelineOperation { private String operation; private Map parameters; - - public String getOperation() { - return operation; - } - - public void setOperation(String operation) { - this.operation = operation; - } - - public Map getParameters() { - return parameters; - } - - public void setParameters(Map parameters) { - this.parameters = parameters; - } - - @Override - public String toString() { - return "PipelineOperation [operation=" + operation + ", parameters=" + parameters + "]"; - } } diff --git a/src/main/java/stirling/software/SPDF/model/Role.java b/src/main/java/stirling/software/SPDF/model/Role.java index 78f93d867..7d45e3da3 100644 --- a/src/main/java/stirling/software/SPDF/model/Role.java +++ b/src/main/java/stirling/software/SPDF/model/Role.java @@ -3,6 +3,11 @@ package stirling.software.SPDF.model; import java.util.LinkedHashMap; import java.util.Map; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor public enum Role { // Unlimited access @@ -33,13 +38,6 @@ public enum Role { private final int webCallsPerDay; private final String roleName; - Role(String roleId, int apiCallsPerDay, int webCallsPerDay, String roleName) { - this.roleId = roleId; - this.apiCallsPerDay = apiCallsPerDay; - this.webCallsPerDay = webCallsPerDay; - this.roleName = roleName; - } - public static String getRoleNameByRoleId(String roleId) { // Using the fromString method to get the Role enum based on the roleId Role role = fromString(roleId); @@ -65,20 +63,4 @@ public enum Role { } throw new IllegalArgumentException("No Role defined for id: " + roleId); } - - public String getRoleId() { - return roleId; - } - - public int getApiCallsPerDay() { - return apiCallsPerDay; - } - - public int getWebCallsPerDay() { - return webCallsPerDay; - } - - public String getRoleName() { - return roleName; - } } diff --git a/src/main/java/stirling/software/SPDF/model/User.java b/src/main/java/stirling/software/SPDF/model/User.java index 233347243..1eb9da991 100644 --- a/src/main/java/stirling/software/SPDF/model/User.java +++ b/src/main/java/stirling/software/SPDF/model/User.java @@ -9,8 +9,19 @@ import java.util.stream.Collectors; import jakarta.persistence.*; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + @Entity @Table(name = "users") +@NoArgsConstructor +@Getter +@Setter +@EqualsAndHashCode(onlyExplicitlyIncluded = true) +@ToString(onlyExplicitlyIncluded = true) public class User implements Serializable { private static final long serialVersionUID = 1L; @@ -63,76 +74,16 @@ public class User implements Serializable { this.isFirstLogin = isFirstLogin; } - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getApiKey() { - return apiKey; - } - - public void setApiKey(String apiKey) { - this.apiKey = apiKey; - } - - public Map getSettings() { - return settings; - } - - public void setSettings(Map settings) { - this.settings = settings; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public boolean isEnabled() { - return enabled; - } - - public void setEnabled(boolean enabled) { - this.enabled = enabled; - } - - public String getAuthenticationType() { - return authenticationType; - } - public void setAuthenticationType(AuthenticationType authenticationType) { this.authenticationType = authenticationType.toString().toLowerCase(); } - public Set getAuthorities() { - return authorities; - } - - public void setAuthorities(Set authorities) { - this.authorities = authorities; - } - public void addAuthorities(Set authorities) { this.authorities.addAll(authorities); } - public void addAuthority(Authority authorities) { - this.authorities.add(authorities); + public void addAuthority(Authority authority) { + this.authorities.add(authority); } public String getRolesAsString() { diff --git a/src/main/java/stirling/software/SPDF/model/api/GeneralFile.java b/src/main/java/stirling/software/SPDF/model/api/GeneralFile.java index 1c0581cd1..068978fac 100644 --- a/src/main/java/stirling/software/SPDF/model/api/GeneralFile.java +++ b/src/main/java/stirling/software/SPDF/model/api/GeneralFile.java @@ -6,11 +6,9 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; @Data @EqualsAndHashCode -@NoArgsConstructor public class GeneralFile { @Schema(description = "The input file") diff --git a/src/main/java/stirling/software/SPDF/model/api/HandleDataRequest.java b/src/main/java/stirling/software/SPDF/model/api/HandleDataRequest.java index d4a4a6bd6..27a0dc3bb 100644 --- a/src/main/java/stirling/software/SPDF/model/api/HandleDataRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/HandleDataRequest.java @@ -6,10 +6,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; @Data -@NoArgsConstructor @EqualsAndHashCode public class HandleDataRequest { diff --git a/src/main/java/stirling/software/SPDF/model/api/ImageFile.java b/src/main/java/stirling/software/SPDF/model/api/ImageFile.java index fdc0e6dcf..9719e2372 100644 --- a/src/main/java/stirling/software/SPDF/model/api/ImageFile.java +++ b/src/main/java/stirling/software/SPDF/model/api/ImageFile.java @@ -6,10 +6,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; @Data -@NoArgsConstructor @EqualsAndHashCode public class ImageFile { @Schema(description = "The input image file") diff --git a/src/main/java/stirling/software/SPDF/model/api/MultiplePDFFiles.java b/src/main/java/stirling/software/SPDF/model/api/MultiplePDFFiles.java index 00a34b748..fbca980e2 100644 --- a/src/main/java/stirling/software/SPDF/model/api/MultiplePDFFiles.java +++ b/src/main/java/stirling/software/SPDF/model/api/MultiplePDFFiles.java @@ -6,10 +6,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; @Data -@NoArgsConstructor @EqualsAndHashCode public class MultiplePDFFiles { @Schema(description = "The input PDF files", type = "array", format = "binary") 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 47377188c..a2702c3f8 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFComparison.java +++ b/src/main/java/stirling/software/SPDF/model/api/PDFComparison.java @@ -4,10 +4,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; @Data -@NoArgsConstructor @EqualsAndHashCode(callSuper = true) public class PDFComparison extends PDFFile { diff --git a/src/main/java/stirling/software/SPDF/model/api/PDFComparisonAndCount.java b/src/main/java/stirling/software/SPDF/model/api/PDFComparisonAndCount.java index 04042bd81..d850b94ae 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFComparisonAndCount.java +++ b/src/main/java/stirling/software/SPDF/model/api/PDFComparisonAndCount.java @@ -4,10 +4,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; @Data -@NoArgsConstructor @EqualsAndHashCode(callSuper = true) public class PDFComparisonAndCount extends PDFComparison { @Schema(description = "Count") 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 0148b7a72..39ace7f1e 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFWithPageNums.java +++ b/src/main/java/stirling/software/SPDF/model/api/PDFWithPageNums.java @@ -10,14 +10,10 @@ import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; -import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.utils.GeneralUtils; @Data -@NoArgsConstructor -@Slf4j @EqualsAndHashCode(callSuper = true) public class PDFWithPageNums extends PDFFile { @@ -32,8 +28,7 @@ public class PDFWithPageNums extends PDFFile { @Hidden public List getPageNumbersList(PDDocument doc, boolean oneBased) { - int pageCount = 0; - pageCount = doc.getNumberOfPages(); + int pageCount = doc.getNumberOfPages(); return GeneralUtils.parsePageList(pageNumbers, pageCount, oneBased); } } 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 17ed03e89..03930009e 100644 --- a/src/main/java/stirling/software/SPDF/model/api/SplitPdfByChaptersRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/SplitPdfByChaptersRequest.java @@ -4,10 +4,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; @Data -@NoArgsConstructor @EqualsAndHashCode(callSuper = false) public class SplitPdfByChaptersRequest extends PDFFile { @Schema(description = "Whether to include Metadata or not", example = "true") 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 1ff834b4c..e8557c692 100644 --- a/src/main/java/stirling/software/SPDF/model/api/SplitPdfBySectionsRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/SplitPdfBySectionsRequest.java @@ -4,10 +4,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; @Data -@NoArgsConstructor @EqualsAndHashCode(callSuper = true) public class SplitPdfBySectionsRequest extends PDFFile { @Schema(description = "Number of horizontal divisions for each PDF page", example = "2") diff --git a/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserDetails.java b/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserDetails.java index d8cbf7903..80dd2d14e 100644 --- a/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserDetails.java +++ b/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserDetails.java @@ -4,10 +4,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; @Data -@NoArgsConstructor @EqualsAndHashCode(callSuper = true) public class UpdateUserDetails extends UpdateUserUsername { diff --git a/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserUsername.java b/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserUsername.java index 8b457605b..c0c14fc08 100644 --- a/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserUsername.java +++ b/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserUsername.java @@ -4,10 +4,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; @Data -@NoArgsConstructor @EqualsAndHashCode(callSuper = true) public class UpdateUserUsername extends UsernameAndPass { diff --git a/src/main/java/stirling/software/SPDF/model/api/user/Username.java b/src/main/java/stirling/software/SPDF/model/api/user/Username.java index 167df1b1b..d29a544b7 100644 --- a/src/main/java/stirling/software/SPDF/model/api/user/Username.java +++ b/src/main/java/stirling/software/SPDF/model/api/user/Username.java @@ -4,11 +4,9 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; @Data @EqualsAndHashCode -@NoArgsConstructor public class Username { @Schema(description = "username of user") diff --git a/src/main/java/stirling/software/SPDF/model/api/user/UsernameAndPass.java b/src/main/java/stirling/software/SPDF/model/api/user/UsernameAndPass.java index d925eef1f..ec8f5c08a 100644 --- a/src/main/java/stirling/software/SPDF/model/api/user/UsernameAndPass.java +++ b/src/main/java/stirling/software/SPDF/model/api/user/UsernameAndPass.java @@ -4,10 +4,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; @Data -@NoArgsConstructor @EqualsAndHashCode(callSuper = true) public class UsernameAndPass extends Username { diff --git a/src/main/java/stirling/software/SPDF/service/CustomPDFDocumentFactory.java b/src/main/java/stirling/software/SPDF/service/CustomPDFDocumentFactory.java index 3a3198fbf..e5bb50d73 100644 --- a/src/main/java/stirling/software/SPDF/service/CustomPDFDocumentFactory.java +++ b/src/main/java/stirling/software/SPDF/service/CustomPDFDocumentFactory.java @@ -19,6 +19,7 @@ import org.apache.pdfbox.pdmodel.PDDocument; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.model.api.PDFFile; @@ -29,6 +30,7 @@ import stirling.software.SPDF.model.api.PDFFile; */ @Component @Slf4j +@RequiredArgsConstructor public class CustomPDFDocumentFactory { private final PdfMetadataService pdfMetadataService; @@ -63,10 +65,6 @@ public class CustomPDFDocumentFactory { // Counter for tracking temporary resources private static final AtomicLong tempCounter = new AtomicLong(0); - public CustomPDFDocumentFactory(PdfMetadataService pdfMetadataService) { - this.pdfMetadataService = pdfMetadataService; - } - /** * Main entry point for loading a PDF document from a file. Automatically selects the most * appropriate loading strategy. diff --git a/src/main/java/stirling/software/SPDF/service/MetricsAggregatorService.java b/src/main/java/stirling/software/SPDF/service/MetricsAggregatorService.java index 1a61d03bd..8cc0a243f 100644 --- a/src/main/java/stirling/software/SPDF/service/MetricsAggregatorService.java +++ b/src/main/java/stirling/software/SPDF/service/MetricsAggregatorService.java @@ -6,16 +6,18 @@ import java.util.concurrent.ConcurrentHashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.search.Search; +import lombok.RequiredArgsConstructor; + import stirling.software.SPDF.config.EndpointInspector; @Service +@RequiredArgsConstructor public class MetricsAggregatorService { private static final Logger logger = LoggerFactory.getLogger(MetricsAggregatorService.class); @@ -24,16 +26,6 @@ public class MetricsAggregatorService { private final EndpointInspector endpointInspector; private final Map lastSentMetrics = new ConcurrentHashMap<>(); - @Autowired - public MetricsAggregatorService( - MeterRegistry meterRegistry, - PostHogService postHogService, - EndpointInspector endpointInspector) { - this.meterRegistry = meterRegistry; - this.postHogService = postHogService; - this.endpointInspector = endpointInspector; - } - @Scheduled(fixedRate = 7200000) // Run every 2 hours public void aggregateAndSendMetrics() { Map metrics = new HashMap<>(); diff --git a/src/main/java/stirling/software/SPDF/service/PdfMetadataService.java b/src/main/java/stirling/software/SPDF/service/PdfMetadataService.java index 173de33f4..b44ba59be 100644 --- a/src/main/java/stirling/software/SPDF/service/PdfMetadataService.java +++ b/src/main/java/stirling/software/SPDF/service/PdfMetadataService.java @@ -19,7 +19,6 @@ public class PdfMetadataService { private final UserServiceInterface userService; private final boolean runningProOrHigher; - @Autowired public PdfMetadataService( ApplicationProperties applicationProperties, @Qualifier("StirlingPDFLabel") String stirlingPDFLabel, diff --git a/src/main/java/stirling/software/SPDF/service/PostHogService.java b/src/main/java/stirling/software/SPDF/service/PostHogService.java index 51faba5be..69cb52061 100644 --- a/src/main/java/stirling/software/SPDF/service/PostHogService.java +++ b/src/main/java/stirling/software/SPDF/service/PostHogService.java @@ -29,7 +29,6 @@ public class PostHogService { private final Environment env; private boolean configDirMounted; - @Autowired public PostHogService( PostHog postHog, @Qualifier("UUID") String 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 29df742a3..20c20eb7b 100644 --- a/src/main/java/stirling/software/SPDF/service/misc/ReplaceAndInvertColorService.java +++ b/src/main/java/stirling/software/SPDF/service/misc/ReplaceAndInvertColorService.java @@ -2,25 +2,22 @@ package stirling.software.SPDF.service.misc; import java.io.IOException; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; import org.springframework.stereotype.Service; 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; @Service +@RequiredArgsConstructor public class ReplaceAndInvertColorService { private ReplaceAndInvertColorFactory replaceAndInvertColorFactory; - @Autowired - public ReplaceAndInvertColorService(ReplaceAndInvertColorFactory replaceAndInvertColorFactory) { - this.replaceAndInvertColorFactory = replaceAndInvertColorFactory; - } - public InputStreamResource replaceAndInvertColor( MultipartFile file, ReplaceAndInvert replaceAndInvertOption, diff --git a/src/main/java/stirling/software/SPDF/utils/FileMonitor.java b/src/main/java/stirling/software/SPDF/utils/FileMonitor.java index 214f430e4..e0b3fc2cf 100644 --- a/src/main/java/stirling/software/SPDF/utils/FileMonitor.java +++ b/src/main/java/stirling/software/SPDF/utils/FileMonitor.java @@ -12,7 +12,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Predicate; import java.util.stream.Stream; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -38,7 +37,6 @@ public class FileMonitor { * @param pathFilter the filter to apply to the paths, return true if the path should be * monitored, false otherwise */ - @Autowired public FileMonitor( @Qualifier("directoryFilter") Predicate pathFilter, RuntimePathConfig runtimePathConfig)