From 8f0c9067fb9aa7c310f83460d898b6bea3c2186c Mon Sep 17 00:00:00 2001 From: WickedJack99 Date: Tue, 5 Dec 2023 15:35:34 +0100 Subject: [PATCH] Created class to validate ipv4/6 address and port. --- .../controller/src/Validate/Validate.java | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/main/java/controller/src/Validate/Validate.java diff --git a/src/main/java/controller/src/Validate/Validate.java b/src/main/java/controller/src/Validate/Validate.java new file mode 100644 index 0000000..54a3fd9 --- /dev/null +++ b/src/main/java/controller/src/Validate/Validate.java @@ -0,0 +1,69 @@ +/** + * @author Aaron Moser + * @date 05.12.2023 + */ +package controller.src.Validate; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class Validate { + + /** + * Checks if overhanded string is valid ip address, by checking if its length is 13 or less, + * it contains exactly 4 numbers and if the numbers are in valid range. + * @param ipv4Address + * @return + */ + public static boolean isValidIPv4Address(String ipv4Address) { + boolean isValidIPv4Address = false; + // Maximum length of ipv4 address is 13 characters, only evaluate if + // length of string is less or equal to 13. + if (ipv4Address.length() <= 13) { + String[] numbersAsString = ipv4Address.split("."); + // If ip address contains exactly 4 parts splitted by dots: + if (numbersAsString.length == 4) { + // Transform each part to integer and check if in valid range. + for (String numberAsString : numbersAsString) { + int number = Integer.valueOf(numberAsString); + if (number < 0 || number > 255) { + isValidIPv4Address = false; + break; + } + } + isValidIPv4Address = true; + } else { + isValidIPv4Address = false; + } + } + return isValidIPv4Address; + } + + /** + * Checks if overhanded ipv6 address is valid by applying a regex to it. + * @param ipv6Address + * @return + */ + public static boolean isValidIPv6Address(String ipv6Address) { + Pattern pattern = Pattern.compile("^([0-9a-f]{4}:){7}[0-9a-f]{4}$", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(ipv6Address); + boolean matchFound = matcher.find(); + if(matchFound) { + return true; + } else { + return false; + } + } + + /** + * Port is validated by checking if in bounds of overhanded values. + * @param port + * @param startOfRange + * @param endOfRange + * @return + */ + public static boolean isValidPort(String port, int startOfRange, int endOfRange) { + int portAsInt = Integer.valueOf(port); + return (portAsInt >= startOfRange && portAsInt <= endOfRange); + } +}