From a2a6512d9c32fd58dc91985fa9bf0c5829a6086b Mon Sep 17 00:00:00 2001 From: Mikhail Trofimov Date: Mon, 16 Jun 2025 10:57:50 +0300 Subject: [PATCH] Added validation for tags formats --- .../credit_tracker/facade/SignalFacade.java | 26 +++++++++++++-- .../credit_tracker/utils/ValidationUtil.java | 32 +++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 src/main/java/ru/nbch/credit_tracker/utils/ValidationUtil.java diff --git a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java index d11dd63..403f7e1 100644 --- a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java +++ b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; import ru.nbch.credit_tracker.entities.monitoring_request.MonitoringRequest; +import ru.nbch.credit_tracker.entities.monitoring_request.Subject; import ru.nbch.credit_tracker.entities.signal_package.Signals; import ru.nbch.credit_tracker.enums.SignalError; import ru.nbch.credit_tracker.enums.Status; @@ -19,8 +20,11 @@ import ru.nbch.credit_tracker.service.scoring.AuthorizationService; import ru.nbch.credit_tracker.service.signal.SignalRestService; import ru.nbch.credit_tracker.service.xml.IXmlProcessor; import ru.nbch.credit_tracker.service.xml.XmlUtilService; +import ru.nbch.credit_tracker.utils.ValidationUtil; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -124,6 +128,7 @@ public class SignalFacade { // валидация xml ResponseEntity errorResponse = validateMonitoringRequest(monitoringRequest); if (errorResponse != null) { + signalService.rejectPackage(monitoringRequest); return errorResponse; } @@ -191,7 +196,24 @@ public class SignalFacade { } private ResponseEntity validateTagsTypes(MonitoringRequest request) { - // TODO проверка на типы тут уже можно регистрировать в бд REGECTED реквесты + if (!ValidationUtil.validatePackageName(request.getPackageName())) { + return getBadResponse(SignalError.ERROR_008); + } + + Set uniqueIds = new HashSet<>(); + for (Subject subject : request.getSubjects().getSubject()) { + if (!ValidationUtil.validatePhone(subject.getClientId())) { + return getBadResponse(SignalError.ERROR_003); + } + if (!ValidationUtil.validateNPId(subject.getId())) { + return getBadResponse(SignalError.ERROR_010); + } + // проверка на уникальность Id внутри одного пакета + if (!uniqueIds.add(subject.getId())) { + return getBadResponse(SignalError.ERROR_004, subject.getId()); + } + } + return null; } @@ -199,7 +221,7 @@ public class SignalFacade { executor.execute(() -> { try { List phoneFidsData = signalService.registerSubjectsFidAndDebts(monitoringRequest, packageId); - if(!phoneFidsData.isEmpty()) { + if (!phoneFidsData.isEmpty()) { Signals signals = signalService.buildSignals(monitoringRequest, phoneFidsData); // TODO validate xsd? String response = null; diff --git a/src/main/java/ru/nbch/credit_tracker/utils/ValidationUtil.java b/src/main/java/ru/nbch/credit_tracker/utils/ValidationUtil.java new file mode 100644 index 0000000..e37458a --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/utils/ValidationUtil.java @@ -0,0 +1,32 @@ +package ru.nbch.credit_tracker.utils; + +import java.util.regex.Pattern; + +public class ValidationUtil { + + private static String phoneRegex = "^\\d{9}$"; + private static String packageNameRegex = "^[A-Z0-9_]{1,22}$"; + private static String npIdRegex = "^\\S{1,36}$"; + + + public static boolean validatePhone(String input) { + if(input == null) { + return false; + } + return Pattern.matches(phoneRegex, input); + } + + public static boolean validatePackageName(String input) { + if(input == null) { + return false; + } + return Pattern.matches(packageNameRegex, input); + } + + public static boolean validateNPId(String input) { + if(input == null) { + return false; + } + return Pattern.matches(npIdRegex, input); + } +}