Added validation for required types
This commit is contained in:
parent
2b5bd8c120
commit
18809d24d2
2 changed files with 60 additions and 27 deletions
|
|
@ -14,7 +14,8 @@ public enum SignalError {
|
||||||
ERROR_008("008", "PackageName не соответствует допустимому формату"),
|
ERROR_008("008", "PackageName не соответствует допустимому формату"),
|
||||||
ERROR_009("009", "Превышен допустимый размер пакета"),
|
ERROR_009("009", "Превышен допустимый размер пакета"),
|
||||||
ERROR_010("010", "Идентификатор субъекта (Id) не соответствует допустимому формату"),
|
ERROR_010("010", "Идентификатор субъекта (Id) не соответствует допустимому формату"),
|
||||||
ERROR_011("011", "Получен невалидный XML");
|
ERROR_011("011", "Получен невалидный XML"),
|
||||||
|
ERROR_100("100", "Непредвиденная ошибка");
|
||||||
|
|
||||||
private final String code;
|
private final String code;
|
||||||
private final String message;
|
private final String message;
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ 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.enums.SignalError;
|
import ru.nbch.credit_tracker.enums.SignalError;
|
||||||
import ru.nbch.credit_tracker.exceptions.ValidationException;
|
import ru.nbch.credit_tracker.enums.Status;
|
||||||
import ru.nbch.credit_tracker.service.FailureAnswerGenerator;
|
import ru.nbch.credit_tracker.service.FailureAnswerGenerator;
|
||||||
import ru.nbch.credit_tracker.service.SignalService;
|
import ru.nbch.credit_tracker.service.SignalService;
|
||||||
import ru.nbch.credit_tracker.service.scoring.AuthorizationService;
|
import ru.nbch.credit_tracker.service.scoring.AuthorizationService;
|
||||||
|
|
@ -87,60 +87,92 @@ public class SignalFacade {
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(e.getMessage(), e);
|
log.error(e.getMessage(), e);
|
||||||
String errorPath = failureAnswerGenerator.generateFailureAnswer(SignalError.ERROR_001);
|
String errorPath = failureAnswerGenerator.generateFailureAnswer(SignalError.ERROR_100);
|
||||||
return ResponseEntity.internalServerError().body(new PathResource(errorPath));
|
return ResponseEntity.internalServerError().body(new PathResource(errorPath));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Теперь знаем, что в архиве лежит ровно один файл с раширением xml и он весит меньше 2гб. Можно валидировать сам xml
|
// Теперь знаем, что в архиве лежит ровно один файл с раширением xml и он весит меньше 2гб. Можно валидировать сам xml
|
||||||
try (ZipInputStream zipInputStream = new ZipInputStream(file.getInputStream())) {
|
// Пробуем распарсить xml
|
||||||
zipInputStream.getNextEntry();
|
|
||||||
validateRequestByXsd(zipInputStream);
|
|
||||||
|
|
||||||
} catch (ValidationException e) {
|
|
||||||
// записать REJECTED
|
|
||||||
return getBadResponse(SignalError.ERROR_011); // TODO вычленять конкретный элемент
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error(e.getMessage(), e);
|
|
||||||
String errorPath = failureAnswerGenerator.generateFailureAnswer(SignalError.ERROR_001);
|
|
||||||
return ResponseEntity.internalServerError().body(new PathResource(errorPath));
|
|
||||||
}
|
|
||||||
|
|
||||||
MonitoringRequest monitoringRequest;
|
MonitoringRequest monitoringRequest;
|
||||||
// Xml валиден. Производим анмаршаллинг
|
|
||||||
try (ZipInputStream zipInputStream = new ZipInputStream(file.getInputStream())) {
|
try (ZipInputStream zipInputStream = new ZipInputStream(file.getInputStream())) {
|
||||||
zipInputStream.getNextEntry();
|
zipInputStream.getNextEntry();
|
||||||
|
|
||||||
IXmlProcessor processor = xmlUtilService.createJaxbProcessor();
|
IXmlProcessor processor = xmlUtilService.createJaxbProcessor();
|
||||||
monitoringRequest = processor.read(zipInputStream, MonitoringRequest.class);
|
monitoringRequest = processor.read(zipInputStream, MonitoringRequest.class);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
String errorPath = failureAnswerGenerator.generateFailureAnswer(SignalError.ERROR_100);
|
||||||
|
return ResponseEntity.internalServerError().body(new PathResource(errorPath));
|
||||||
|
}
|
||||||
|
|
||||||
|
// валидация xml
|
||||||
|
ResponseEntity<Resource> errorResponse = validateMonitoringRequest(monitoringRequest);
|
||||||
|
if (errorResponse != null) {
|
||||||
|
return errorResponse;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
if (!authorizationService.hasAuthorization(monitoringRequest.getUserId(), monitoringRequest.getPassword())) {
|
if (!authorizationService.hasAuthorization(monitoringRequest.getUserId(), monitoringRequest.getPassword())) {
|
||||||
// записать REJECTED
|
signalService.insertPackage(monitoringRequest, Status.REJECTED);
|
||||||
return getBadResponse(SignalError.ERROR_005);
|
return getBadResponse(SignalError.ERROR_005);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (signalService.isPackageNotUnique(monitoringRequest)) {
|
if (signalService.isPackageNotUnique(monitoringRequest)) {
|
||||||
// записать REJECTED
|
signalService.insertPackage(monitoringRequest, Status.REJECTED);
|
||||||
// signalService.insertPackage(monitoringRequest, Status.REJECTED);
|
|
||||||
return getBadResponse(SignalError.ERROR_007);
|
return getBadResponse(SignalError.ERROR_007);
|
||||||
}
|
}
|
||||||
|
|
||||||
signalService.registerPackage(monitoringRequest);
|
signalService.registerPackage(monitoringRequest);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(e.getMessage(), e);
|
log.error(e.getMessage(), e);
|
||||||
String errorPath = failureAnswerGenerator.generateFailureAnswer(SignalError.ERROR_001);
|
String errorPath = failureAnswerGenerator.generateFailureAnswer(SignalError.ERROR_100);
|
||||||
return ResponseEntity.internalServerError().body(new PathResource(errorPath));
|
return ResponseEntity.internalServerError().body(new PathResource(errorPath));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResponseEntity.ok().body(new PathResource("D:\\folder_name\\legal.xml")); // TODO generate success response
|
return ResponseEntity.ok().body(new PathResource("D:\\folder_name\\legal.xml")); // TODO generate success response
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validateRequestByXsd(ZipInputStream inputStream) throws ValidationException {
|
private ResponseEntity<Resource> validateMonitoringRequest(MonitoringRequest request) {
|
||||||
try {
|
if (request == null) {
|
||||||
xmlUtilService.validateXMLByXSD(inputStream, config.getXsdValidation().monitoringRequestPath());
|
return getBadResponse(SignalError.ERROR_011);
|
||||||
} catch (Exception e) {
|
|
||||||
throw new ValidationException();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ResponseEntity<Resource> errorResponse = validateReruqredTags(request);
|
||||||
|
if (errorResponse != null) {
|
||||||
|
return errorResponse;
|
||||||
|
}
|
||||||
|
|
||||||
|
return validateTagsTypes(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
ResponseEntity<Resource> validateReruqredTags(MonitoringRequest request) {
|
||||||
|
if (request.getUserId() == null) {
|
||||||
|
return getBadResponse(SignalError.ERROR_002); // + userId
|
||||||
|
}
|
||||||
|
|
||||||
|
if (request.getPackageName() == null) {
|
||||||
|
return getBadResponse(SignalError.ERROR_002); // + packageName
|
||||||
|
}
|
||||||
|
|
||||||
|
if (request.getPassword() == null) {
|
||||||
|
return getBadResponse(SignalError.ERROR_002); // + password
|
||||||
|
}
|
||||||
|
|
||||||
|
if (request.getSubjects() == null) {
|
||||||
|
return getBadResponse(SignalError.ERROR_002); // + subjects
|
||||||
|
}
|
||||||
|
|
||||||
|
if (request.getSubjects().getSubject().isEmpty()) {
|
||||||
|
return getBadResponse(SignalError.ERROR_002); // subject
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ResponseEntity<Resource> validateTagsTypes(MonitoringRequest request) {
|
||||||
|
// TODO проверка на типы тут уже можно регистрировать в бд REGECTED реквесты
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isZipFile(MultipartFile file) {
|
private boolean isZipFile(MultipartFile file) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue