diff --git a/Dockerfile b/Dockerfile index 651a16d7..834dce6c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,7 +34,7 @@ RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /et openssl-dev \ bash \ curl \ - openjdk17-jre \ + openjdk21-jre \ su-exec \ shadow \ # Doc conversion diff --git a/Dockerfile-ultra-lite b/Dockerfile-ultra-lite index eed8d783..ea07e62f 100644 --- a/Dockerfile-ultra-lite +++ b/Dockerfile-ultra-lite @@ -31,7 +31,7 @@ RUN mkdir /configs /logs /customFiles && \ curl \ su-exec \ shadow \ - openjdk17-jre && \ + openjdk21-jre && \ echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /etc/apk/repositories && \ echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/community" | tee -a /etc/apk/repositories && \ echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/testing" | tee -a /etc/apk/repositories && \ diff --git a/LocalRunGuide.md b/LocalRunGuide.md index e4f744c3..0c344203 100644 --- a/LocalRunGuide.md +++ b/LocalRunGuide.md @@ -14,7 +14,7 @@ You could theoretically use a Distrobox/Toolbox, if your Distribution has old or Install the following software, if not already installed: -- Java 17 or later +- Java 17 or later (21 recommended) - Gradle 7.0 or later (included within repo so not needed on server) @@ -42,19 +42,19 @@ For Debian-based systems, you can use the following command: ```bash sudo apt-get update -sudo apt-get install -y git automake autoconf libtool libleptonica-dev pkg-config zlib1g-dev make g++ openjdk-17-jdk python3 python3-pip +sudo apt-get install -y git automake autoconf libtool libleptonica-dev pkg-config zlib1g-dev make g++ openjdk-21-jdk python3 python3-pip ``` For Fedora-based systems use this command: ```bash -sudo dnf install -y git automake autoconf libtool leptonica-devel pkg-config zlib-devel make gcc-c++ java-17-openjdk python3 python3-pip +sudo dnf install -y git automake autoconf libtool leptonica-devel pkg-config zlib-devel make gcc-c++ java-21-openjdk python3 python3-pip ``` For non-root users with Nix Package Manager, use the following command: ```bash nix-channel --update -nix-env -iA nixpkgs.jdk17 nixpkgs.git nixpkgs.python38 nixpkgs.gnumake nixpkgs.libgcc nixpkgs.automake nixpkgs.autoconf nixpkgs.libtool nixpkgs.pkg-config nixpkgs.zlib nixpkgs.leptonica +nix-env -iA nixpkgs.jdk21 nixpkgs.git nixpkgs.python38 nixpkgs.gnumake nixpkgs.libgcc nixpkgs.automake nixpkgs.autoconf nixpkgs.libtool nixpkgs.pkg-config nixpkgs.zlib nixpkgs.leptonica ``` ### Step 2: Clone and Build jbig2enc (Only required for certain OCR functionality) diff --git a/src/main/java/stirling/software/SPDF/config/security/UserBasedRateLimitingFilter.java b/src/main/java/stirling/software/SPDF/config/security/UserBasedRateLimitingFilter.java index 89107697..b4b88d25 100644 --- a/src/main/java/stirling/software/SPDF/config/security/UserBasedRateLimitingFilter.java +++ b/src/main/java/stirling/software/SPDF/config/security/UserBasedRateLimitingFilter.java @@ -1,6 +1,5 @@ package stirling.software.SPDF.config.security; -import io.github.pixee.security.Newlines; import java.io.IOException; import java.time.Duration; import java.util.Map; @@ -21,6 +20,7 @@ import io.github.bucket4j.Bandwidth; import io.github.bucket4j.Bucket; import io.github.bucket4j.ConsumptionProbe; import io.github.bucket4j.Refill; +import io.github.pixee.security.Newlines; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; @@ -126,12 +126,16 @@ public class UserBasedRateLimitingFilter extends OncePerRequestFilter { ConsumptionProbe probe = userBucket.tryConsumeAndReturnRemaining(1); if (probe.isConsumed()) { - response.setHeader("X-Rate-Limit-Remaining", Newlines.stripAll(Long.toString(probe.getRemainingTokens()))); + response.setHeader( + "X-Rate-Limit-Remaining", + Newlines.stripAll(Long.toString(probe.getRemainingTokens()))); filterChain.doFilter(request, response); } else { long waitForRefill = probe.getNanosToWaitForRefill() / 1_000_000_000; response.setStatus(HttpStatus.TOO_MANY_REQUESTS.value()); - response.setHeader("X-Rate-Limit-Retry-After-Seconds", Newlines.stripAll(String.valueOf(waitForRefill))); + response.setHeader( + "X-Rate-Limit-Retry-After-Seconds", + Newlines.stripAll(String.valueOf(waitForRefill))); response.getWriter().write("Rate limit exceeded for POST requests."); } } 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 9fa357f7..3f880a80 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 @@ -36,7 +36,7 @@ public class ConvertImgPDFController { description = "This endpoint converts a PDF file to image(s) with the specified image format, color type, and DPI. Users can choose to get a single image or multiple images. Input:PDF Output:Image Type:SI-Conditional") public ResponseEntity convertToImage(@ModelAttribute ConvertToImageRequest request) - throws IOException { + throws NumberFormatException, Exception { MultipartFile file = request.getFileInput(); String imageFormat = request.getImageFormat(); String singleOrMultiple = request.getSingleOrMultiple(); @@ -56,23 +56,20 @@ public class ConvertImgPDFController { String filename = Filenames.toSimpleFileName(file.getOriginalFilename()) .replaceFirst("[.][^.]+$", ""); - try { - result = - PdfUtils.convertFromPdf( - pdfBytes, - imageFormat.toUpperCase(), - colorTypeResult, - singleImage, - Integer.valueOf(dpi), - filename); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + + result = + PdfUtils.convertFromPdf( + pdfBytes, + imageFormat.toUpperCase(), + colorTypeResult, + singleImage, + Integer.valueOf(dpi), + filename); + + if(result == null || result.length == 0) { + logger.error("resultant bytes for {} is null, error converting ", filename); + } if (singleImage) { String docName = filename + "." + imageFormat; MediaType mediaType = MediaType.parseMediaType(getMediaType(imageFormat));