SUPPORT-9509: Fix
This commit is contained in:
parent
47e44facb8
commit
d756543745
5 changed files with 60 additions and 16 deletions
|
|
@ -3,9 +3,12 @@ package ervu.service.fileupload;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
@ -53,7 +56,11 @@ import ru.micord.ervu.exception.JsonParsingException;
|
||||||
import ru.micord.ervu.journal.SenderInfo;
|
import ru.micord.ervu.journal.SenderInfo;
|
||||||
import ru.micord.ervu.kafka.service.ReplyingKafkaService;
|
import ru.micord.ervu.kafka.service.ReplyingKafkaService;
|
||||||
import ru.micord.ervu.security.esia.config.EsiaConfig;
|
import ru.micord.ervu.security.esia.config.EsiaConfig;
|
||||||
import ru.micord.ervu.security.esia.model.*;
|
import ru.micord.ervu.security.esia.model.EmployeeModel;
|
||||||
|
import ru.micord.ervu.security.esia.model.MchdInfoModel;
|
||||||
|
import ru.micord.ervu.security.esia.model.OrganizationModel;
|
||||||
|
import ru.micord.ervu.security.esia.model.PersonModel;
|
||||||
|
import ru.micord.ervu.security.esia.model.VerifyDocumentSignResponse;
|
||||||
import ru.micord.ervu.security.esia.service.MchdService;
|
import ru.micord.ervu.security.esia.service.MchdService;
|
||||||
import ru.micord.ervu.security.esia.service.UlDataService;
|
import ru.micord.ervu.security.esia.service.UlDataService;
|
||||||
import ru.micord.ervu.security.esia.EsiaAuthInfoStore;
|
import ru.micord.ervu.security.esia.EsiaAuthInfoStore;
|
||||||
|
|
@ -336,13 +343,12 @@ public class EmployeeInfoFileUploadService {
|
||||||
String chiefMiddleName = chiefModel.getPerson().getMiddleName();
|
String chiefMiddleName = chiefModel.getPerson().getMiddleName();
|
||||||
String chiefLastName = chiefModel.getPerson().getLastName();
|
String chiefLastName = chiefModel.getPerson().getLastName();
|
||||||
String chiefFirstName = chiefModel.getPerson().getFirstName();
|
String chiefFirstName = chiefModel.getPerson().getFirstName();
|
||||||
|
boolean isSignerLastName = signerInfoMap.get("SN").equalsIgnoreCase(chiefLastName);
|
||||||
|
boolean isSignerFirstNameAndMiddleName = signerInfoMap.get("G")
|
||||||
|
.equalsIgnoreCase(chiefFirstName + " " + chiefMiddleName);
|
||||||
|
boolean isSignerOgrn = signerInfoMap.get("ОГРН").equalsIgnoreCase(ogrn);
|
||||||
|
|
||||||
boolean isSignerValid = signerInfoMap.get("SN").equalsIgnoreCase(chiefLastName) &&
|
if (isSignerLastName && isSignerFirstNameAndMiddleName && isSignerOgrn) {
|
||||||
signerInfoMap.get("G")
|
|
||||||
.equalsIgnoreCase(chiefFirstName + " " + chiefMiddleName) &&
|
|
||||||
signerInfoMap.get("O").equalsIgnoreCase(uploadOrgInfo.getOrgName());
|
|
||||||
|
|
||||||
if (isSignerValid) {
|
|
||||||
FileStatusResponse fileStatusResponse = new FileStatusResponse(uploadOrgInfo,
|
FileStatusResponse fileStatusResponse = new FileStatusResponse(uploadOrgInfo,
|
||||||
new FileInfo[] {fileInfo, signFileInfo}, fileInfo.getFileStatus()
|
new FileInfo[] {fileInfo, signFileInfo}, fileInfo.getFileStatus()
|
||||||
);
|
);
|
||||||
|
|
@ -366,7 +372,18 @@ public class EmployeeInfoFileUploadService {
|
||||||
if (mchdFile == null) {
|
if (mchdFile == null) {
|
||||||
handleMchdValidationError(uploadOrgInfo, fileInfo, signFileInfo, null, ervuId, response
|
handleMchdValidationError(uploadOrgInfo, fileInfo, signFileInfo, null, ervuId, response
|
||||||
);
|
);
|
||||||
throw new LocalizedException("mchd_null", MESSAGE_SOURCE);
|
List<String> falseResults = new ArrayList<>();
|
||||||
|
if (!isSignerLastName) {
|
||||||
|
falseResults.add("фамилия");
|
||||||
|
}
|
||||||
|
if (!isSignerFirstNameAndMiddleName) {
|
||||||
|
falseResults.add("имя или отчество");
|
||||||
|
}
|
||||||
|
if (!isSignerOgrn) {
|
||||||
|
falseResults.add("организация");
|
||||||
|
}
|
||||||
|
String result = String.join(", ", falseResults);
|
||||||
|
throw new LocalizedException("mchd_null", MESSAGE_SOURCE, result);
|
||||||
}
|
}
|
||||||
FileStatusResponse fileStatusResponse = new FileStatusResponse(uploadOrgInfo,
|
FileStatusResponse fileStatusResponse = new FileStatusResponse(uploadOrgInfo,
|
||||||
new FileInfo[] {fileInfo, signFileInfo, mchdFileInfo}, fileInfo.getFileStatus()
|
new FileInfo[] {fileInfo, signFileInfo, mchdFileInfo}, fileInfo.getFileStatus()
|
||||||
|
|
@ -549,13 +566,15 @@ public class EmployeeInfoFileUploadService {
|
||||||
throw new LocalizedException("mchd_cant_parse", MESSAGE_SOURCE);
|
throw new LocalizedException("mchd_cant_parse", MESSAGE_SOURCE);
|
||||||
}
|
}
|
||||||
MchdInfoModel mchdInfoModel = mchdService.getMchdInfoModel(mchdGuid);
|
MchdInfoModel mchdInfoModel = mchdService.getMchdInfoModel(mchdGuid);
|
||||||
if (!mchdInfoModel.getStatus().equals("A")) {
|
LocalDate now = LocalDate.now();
|
||||||
|
if (!mchdInfoModel.getStatus().equals("A") || now.isAfter(mchdInfoModel.getExpiredOn())
|
||||||
|
|| mchdInfoModel.getIssuedOn().isAfter(now)) {
|
||||||
throw new LocalizedException("mchd_expired", MESSAGE_SOURCE);
|
throw new LocalizedException("mchd_expired", MESSAGE_SOURCE);
|
||||||
}
|
}
|
||||||
boolean validAgent = mchdInfoModel.getAgents()
|
boolean validAgent = mchdInfoModel.getAgents()
|
||||||
.getElements()
|
.getElements()
|
||||||
.stream()
|
.stream()
|
||||||
.anyMatch(agent1 -> agent1.getPerson().getSnils().equals(snils));
|
.anyMatch(agent1 -> agent1.getPerson().getSnils().replaceAll("[\\s-]", "").equals(snils));
|
||||||
if (!validAgent) {
|
if (!validAgent) {
|
||||||
throw new LocalizedException("mchd_validate_agent", MESSAGE_SOURCE);
|
throw new LocalizedException("mchd_validate_agent", MESSAGE_SOURCE);
|
||||||
}
|
}
|
||||||
|
|
@ -669,4 +688,4 @@ public class EmployeeInfoFileUploadService {
|
||||||
auditService.processUploadEvent(uploadOrgInfo, new FileInfo[] {fileInfo, signFileInfo}, packInfo);
|
auditService.processUploadEvent(uploadOrgInfo, new FileInfo[] {fileInfo, signFileInfo}, packInfo);
|
||||||
clearS3(response);
|
clearS3(response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,9 +1,12 @@
|
||||||
package ru.micord.ervu.security.esia.model;
|
package ru.micord.ervu.security.esia.model;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||||
|
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -17,6 +20,10 @@ public class MchdInfoModel implements Serializable {
|
||||||
private String parentGuid;
|
private String parentGuid;
|
||||||
private Member principals;
|
private Member principals;
|
||||||
private Member agents;
|
private Member agents;
|
||||||
|
@JsonDeserialize(using = LocalDateDeserializer.class)
|
||||||
|
private LocalDate issuedOn;
|
||||||
|
@JsonDeserialize(using = LocalDateDeserializer.class)
|
||||||
|
private LocalDate expiredOn;
|
||||||
|
|
||||||
public String getGuid() {
|
public String getGuid() {
|
||||||
return guid;
|
return guid;
|
||||||
|
|
@ -58,6 +65,22 @@ public class MchdInfoModel implements Serializable {
|
||||||
this.agents = agents;
|
this.agents = agents;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LocalDate getIssuedOn() {
|
||||||
|
return issuedOn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIssuedOn(LocalDate issuedOn) {
|
||||||
|
this.issuedOn = issuedOn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getExpiredOn() {
|
||||||
|
return expiredOn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExpiredOn(LocalDate expiredOn) {
|
||||||
|
this.expiredOn = expiredOn;
|
||||||
|
}
|
||||||
|
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
public static class Member implements Serializable {
|
public static class Member implements Serializable {
|
||||||
private List<Element> elements;
|
private List<Element> elements;
|
||||||
|
|
|
||||||
|
|
@ -676,7 +676,7 @@ public class EsiaAuthService {
|
||||||
SignResponse signResponse = signMap(parameters);
|
SignResponse signResponse = signMap(parameters);
|
||||||
String newState = signResponse.getState();
|
String newState = signResponse.getState();
|
||||||
String clientSecret = signResponse.getSignature();
|
String clientSecret = signResponse.getSignature();
|
||||||
String authUrl = esiaConfig.getEsiaBaseUri() + esiaConfig.getEsiaSystemTokenUrl();
|
String authUrl = esiaConfig.getEsiaBaseUri() + esiaConfig.getEsiaTokenUrl();
|
||||||
String postBody = new FormUrlencoded()
|
String postBody = new FormUrlencoded()
|
||||||
.setParameter("client_id", clientId)
|
.setParameter("client_id", clientId)
|
||||||
.setParameter("grant_type", "client_credentials")
|
.setParameter("grant_type", "client_credentials")
|
||||||
|
|
@ -685,6 +685,7 @@ public class EsiaAuthService {
|
||||||
.setParameter("scope", scope)
|
.setParameter("scope", scope)
|
||||||
.setParameter("timestamp", timestamp)
|
.setParameter("timestamp", timestamp)
|
||||||
.setParameter("token_type", "Bearer")
|
.setParameter("token_type", "Bearer")
|
||||||
|
.setParameter("client_certificate_hash", esiaConfig.getClientCertHash())
|
||||||
.setParameter("redirect_uri", esiaConfig.getRedirectUrl())
|
.setParameter("redirect_uri", esiaConfig.getRedirectUrl())
|
||||||
.toFormUrlencodedString();
|
.toFormUrlencodedString();
|
||||||
HttpRequest postReq = HttpRequest.newBuilder(URI.create(authUrl))
|
HttpRequest postReq = HttpRequest.newBuilder(URI.create(authUrl))
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,10 @@ cert_untrusted_root=Сертификат или цепочка сертифик
|
||||||
cert_is_not_time_valid=Этот сертификат или один из сертификатов в цепочке сертификатов является недопустимым по времени
|
cert_is_not_time_valid=Этот сертификат или один из сертификатов в цепочке сертификатов является недопустимым по времени
|
||||||
file_sign_validate=Ошибка проверки файлов. Некорректная электронная подпись
|
file_sign_validate=Ошибка проверки файлов. Некорректная электронная подпись
|
||||||
mchd_validate_agent=Ошибка проверки файлов. Некорректная машиночитаемая доверенность. Представитель не совпадает с подписантом
|
mchd_validate_agent=Ошибка проверки файлов. Некорректная машиночитаемая доверенность. Представитель не совпадает с подписантом
|
||||||
mchd_null=Ошибка проверки файлов. Отсутствует машиночитаемая доверенность. Подписант не является руководителем организации
|
mchd_null=Ошибка проверки файлов. Отсутствует машиночитаемая доверенность. Подписант не является руководителем организации. Не совпадает {0}
|
||||||
|
temp_sign_error=Ошибка проверки файлов. Подписант не является руководителем организации. Приложите подпись руководителя
|
||||||
mchd_expired=Ошибка проверки файлов. Недействующая машиночитаемая доверенность.
|
mchd_expired=Ошибка проверки файлов. Недействующая машиночитаемая доверенность.
|
||||||
mchd_tree_expired=Ошибка проверки файлов. Одна из родительских доверенностей недействующая.
|
mchd_tree_expired=Ошибка проверки файлов. Одна из родительских доверенностей недействующая.
|
||||||
mchd_validate_principal=Ошибка проверки файлов. Некорректная машиночитаемая доверенность. Доверитель не совпадает с руководителем организации
|
mchd_validate_principal=Ошибка проверки файлов. Некорректная машиночитаемая доверенность. Доверенность выдана не той организацией, под которой была осуществлена загрузка файлов.
|
||||||
av_file_infected=Ошибка проверки файлов. Файлы заражены вирусом
|
av_file_infected=Ошибка проверки файлов. Файлы заражены вирусом
|
||||||
mchd_cant_parse=Ошибка проверки файлов. Некорректный формат машиночитаемой доверенности
|
mchd_cant_parse=Ошибка проверки файлов. Некорректный формат машиночитаемой доверенности
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,9 @@ cert_untrusted_root=Сертификат или цепочка сертифик
|
||||||
cert_is_not_time_valid=Этот сертификат или один из сертификатов в цепочке сертификатов является недопустимым по времени
|
cert_is_not_time_valid=Этот сертификат или один из сертификатов в цепочке сертификатов является недопустимым по времени
|
||||||
file_sign_validate=Ошибка проверки файлов. Некорректная электронная подпись
|
file_sign_validate=Ошибка проверки файлов. Некорректная электронная подпись
|
||||||
mchd_validate_agent=Ошибка проверки файлов. Некорректная машиночитаемая доверенность. Представитель не совпадает с подписантом
|
mchd_validate_agent=Ошибка проверки файлов. Некорректная машиночитаемая доверенность. Представитель не совпадает с подписантом
|
||||||
mchd_null=Ошибка проверки файлов. Отсутствует машиночитаемая доверенность. Подписант не является руководителем организации
|
mchd_null=Ошибка проверки файлов. Отсутствует машиночитаемая доверенность. Подписант не является руководителем организации. Не совпадает {0}
|
||||||
mchd_expired=Ошибка проверки файлов. Недействующая машиночитаемая доверенность.
|
mchd_expired=Ошибка проверки файлов. Недействующая машиночитаемая доверенность.
|
||||||
mchd_tree_expired=Ошибка проверки файлов. Одна из родительских доверенностей недействующая.
|
mchd_tree_expired=Ошибка проверки файлов. Одна из родительских доверенностей недействующая.
|
||||||
mchd_validate_principal=Ошибка проверки файлов. Некорректная машиночитаемая доверенность. Доверитель не совпадает с руководителем организации
|
mchd_validate_principal=Ошибка проверки файлов. Некорректная машиночитаемая доверенность. Доверенность выдана не той организацией, под которой была осуществлена загрузка файлов.
|
||||||
av_file_infected=Ошибка проверки файлов. Файлы заражены вирусом
|
av_file_infected=Ошибка проверки файлов. Файлы заражены вирусом
|
||||||
mchd_cant_parse=Ошибка проверки файлов. Некорректный формат машиночитаемой доверенности
|
mchd_cant_parse=Ошибка проверки файлов. Некорректный формат машиночитаемой доверенности
|
||||||
Loading…
Add table
Add a link
Reference in a new issue