From d716b669b978eb02f5a5dced04e861111ab94854 Mon Sep 17 00:00:00 2001 From: diallo Date: Thu, 8 Aug 2024 09:56:36 +0000 Subject: [PATCH] feat: Add URL reachability check in ConvertWebsiteToPDF --- .../api/converters/ConvertWebsiteToPDF.java | 6 +++ .../software/SPDF/utils/GeneralUtils.java | 42 +++++++++++++------ 2 files changed, 35 insertions(+), 13 deletions(-) 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 8bce1b226a5..026690fd654 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 @@ -39,6 +39,12 @@ public ResponseEntity urlToPdf(@ModelAttribute UrlToPdfRequest request) if (!URL.matches("^https?://.*") || !GeneralUtils.isValidURL(URL)) { throw new IllegalArgumentException("Invalid URL format provided."); } + + // validate the URL is reachable + if (!GeneralUtils.isURLReachable(URL)) { + throw new IllegalArgumentException("URL is not reachable, please provide a valid URL."); + } + Path tempOutputFile = null; byte[] pdfBytes; try { diff --git a/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java b/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java index ae86d8c11ac..aa5f3aea9d2 100644 --- a/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java +++ b/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java @@ -13,6 +13,8 @@ import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.List; +import java.net.URL; +import java.net.HttpURLConnection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -71,6 +73,21 @@ public static boolean isValidURL(String urlStr) { } catch (MalformedURLException e) { return false; } + + } + + public static boolean isURLReachable(String urlStr) { + try { + URL url = new URL(urlStr); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("HEAD"); + int responseCode = connection.getResponseCode(); + return (200 <= responseCode && responseCode <= 399); + } catch (MalformedURLException e) { + return false; + } catch (IOException e) { + return false; + } } public static File multipartToFile(MultipartFile multipart) throws IOException { @@ -95,19 +112,16 @@ public static Long convertSizeToBytes(String sizeStr) { sizeStr = sizeStr.replace(",", ".").replace(" ", ""); try { if (sizeStr.endsWith("KB")) { - return (long) - (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) * 1024); + return (long) (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) * 1024); } else if (sizeStr.endsWith("MB")) { - return (long) - (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) - * 1024 - * 1024); + return (long) (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) + * 1024 + * 1024); } else if (sizeStr.endsWith("GB")) { - return (long) - (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) - * 1024 - * 1024 - * 1024); + return (long) (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) + * 1024 + * 1024 + * 1024); } else if (sizeStr.endsWith("B")) { return Long.parseLong(sizeStr.substring(0, sizeStr.length() - 1)); } else { @@ -170,13 +184,15 @@ public static List evaluateNFunc(String expression, int maxValue) { int n = 0; while (true) { - // Replace 'n' with the current value of n, correctly handling numbers before 'n' + // Replace 'n' with the current value of n, correctly handling numbers before + // 'n' String sanitizedExpression = insertMultiplicationBeforeN(expression, n); Double result = evaluator.evaluate(sanitizedExpression); // Check if the result is null or not within bounds if (result == null || result <= 0 || result.intValue() > maxValue) { - if (n != 0) break; + if (n != 0) + break; } else { results.add(result.intValue()); }