Added validation for tags formats

This commit is contained in:
Mikhail Trofimov 2025-06-16 10:57:50 +03:00
parent cab48f940f
commit a2a6512d9c
2 changed files with 56 additions and 2 deletions

View file

@ -9,6 +9,7 @@ import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; 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.MonitoringRequest;
import ru.nbch.credit_tracker.entities.monitoring_request.Subject;
import ru.nbch.credit_tracker.entities.signal_package.Signals; import ru.nbch.credit_tracker.entities.signal_package.Signals;
import ru.nbch.credit_tracker.enums.SignalError; import ru.nbch.credit_tracker.enums.SignalError;
import ru.nbch.credit_tracker.enums.Status; 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.signal.SignalRestService;
import ru.nbch.credit_tracker.service.xml.IXmlProcessor; import ru.nbch.credit_tracker.service.xml.IXmlProcessor;
import ru.nbch.credit_tracker.service.xml.XmlUtilService; 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.List;
import java.util.Set;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream; import java.util.zip.ZipInputStream;
@ -124,6 +128,7 @@ public class SignalFacade {
// валидация xml // валидация xml
ResponseEntity<Resource> errorResponse = validateMonitoringRequest(monitoringRequest); ResponseEntity<Resource> errorResponse = validateMonitoringRequest(monitoringRequest);
if (errorResponse != null) { if (errorResponse != null) {
signalService.rejectPackage(monitoringRequest);
return errorResponse; return errorResponse;
} }
@ -191,7 +196,24 @@ public class SignalFacade {
} }
private ResponseEntity<Resource> validateTagsTypes(MonitoringRequest request) { private ResponseEntity<Resource> validateTagsTypes(MonitoringRequest request) {
// TODO проверка на типы тут уже можно регистрировать в бд REGECTED реквесты if (!ValidationUtil.validatePackageName(request.getPackageName())) {
return getBadResponse(SignalError.ERROR_008);
}
Set<String> 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; return null;
} }
@ -199,7 +221,7 @@ public class SignalFacade {
executor.execute(() -> { executor.execute(() -> {
try { try {
List<PhoneService.FidsPhoneData> phoneFidsData = signalService.registerSubjectsFidAndDebts(monitoringRequest, packageId); List<PhoneService.FidsPhoneData> phoneFidsData = signalService.registerSubjectsFidAndDebts(monitoringRequest, packageId);
if(!phoneFidsData.isEmpty()) { if (!phoneFidsData.isEmpty()) {
Signals signals = signalService.buildSignals(monitoringRequest, phoneFidsData); Signals signals = signalService.buildSignals(monitoringRequest, phoneFidsData);
// TODO validate xsd? // TODO validate xsd?
String response = null; String response = null;

View file

@ -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);
}
}