From 5234e66cb8e3482614cc00d22b86568b188d8b95 Mon Sep 17 00:00:00 2001 From: Eduard Tihomirov Date: Tue, 19 Aug 2025 11:13:41 +0300 Subject: [PATCH] SUPPORT-9331: Fix --- .../esia/service/EsiaAuthService.java | 24 +++++++++++++++++-- .../common_errors_messages.properties | 4 ++-- .../common_errors_messages_ru_RU.properties | 4 ++-- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java b/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java index 9c62b0d..a262b98 100644 --- a/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java +++ b/backend/src/main/java/ru/micord/ervu/security/esia/service/EsiaAuthService.java @@ -58,6 +58,7 @@ import ru.micord.ervu.security.webbpm.jwt.helper.SecurityHelper; import ru.micord.ervu.security.webbpm.jwt.service.JwtTokenService; import ru.micord.ervu.security.webbpm.jwt.model.Token; +import ru.cg.webbpm.modules.core.runtime.api.LocalizedException; import ru.cg.webbpm.modules.core.runtime.api.MessageBundleUtils; import static ru.micord.ervu.security.SecurityConstants.PRNS_UUID; @@ -399,7 +400,10 @@ public class EsiaAuthService { } } - private void errorHandler(HttpResponse httpResponse) { + private void errorHandler(HttpResponse httpResponse) throws JsonProcessingException { + if (httpResponse.statusCode() == 500) { + processSignModuleError(httpResponse); + } if (httpResponse.statusCode() != 200) { throw new EsiaException(httpResponse.statusCode() + " " + httpResponse.body()); } @@ -482,7 +486,7 @@ public class EsiaAuthService { SecurityContextHolder.setContext(context); } - private String verifyToken(String accessToken) { + private String verifyToken(String accessToken) throws JsonProcessingException { EsiaAccessToken esiaAccessToken = personalDataService.readToken(accessToken); EsiaHeader esiaHeader = personalDataService.readHeader(accessToken); if (!esiaHeader.getSbt().equals("access")) { @@ -515,6 +519,9 @@ public class EsiaAuthService { } HttpResponse response = signVerify(accessToken); if (response.statusCode() != 200) { + if (response.statusCode() == 500) { + processSignModuleError(response); + } if (response.statusCode() == 401) { return "Token invalid. " + response.body(); } @@ -561,4 +568,17 @@ public class EsiaAuthService { securityHelper.clearAccessCookie(response, PRNS_UUID); } } + + private void processSignModuleError(HttpResponse response) + throws JsonProcessingException { + String errorCode = objectMapper.readTree(response.body()) + .get("error_code") + .asText(); + if (errorCode.equals("CERT_TRUST_REVOCATION_STATUS_UNKNOWN")) { + throw new LocalizedException("crl_certificate_expired", MESSAGE_SOURCE); + } + else { + throw new EsiaException("Unknown error in verify module. Error code " + errorCode); + } + } } diff --git a/backend/src/main/resources/messages/common_errors_messages.properties b/backend/src/main/resources/messages/common_errors_messages.properties index 0dae473..57cf006 100644 --- a/backend/src/main/resources/messages/common_errors_messages.properties +++ b/backend/src/main/resources/messages/common_errors_messages.properties @@ -1,3 +1,3 @@ kafka_reply_timeout=Превышено время ожидания ответа от сервера. -access_denied=Доступ запрещен. Пользователь должен быть включен в группу "Сотрудник, ответственный за военно-учетную работу" в ЕСИА -login_attempts_exceeded=Слишком большое количество попыток авторизоваться в ЕСИА за короткий промежуток времени. Рекомендуем почистить cookie и cash браузера, после повторить авторизацию. \ No newline at end of file +login_attempts_exceeded=Слишком большое количество попыток авторизоваться в ЕСИА за короткий промежуток времени. Рекомендуем почистить cookie и cash браузера, после повторить авторизацию. +crl_certificate_expired=Превышено время ожидания ответа из ЕСИА \ No newline at end of file diff --git a/backend/src/main/resources/messages/common_errors_messages_ru_RU.properties b/backend/src/main/resources/messages/common_errors_messages_ru_RU.properties index 0dae473..57cf006 100644 --- a/backend/src/main/resources/messages/common_errors_messages_ru_RU.properties +++ b/backend/src/main/resources/messages/common_errors_messages_ru_RU.properties @@ -1,3 +1,3 @@ kafka_reply_timeout=Превышено время ожидания ответа от сервера. -access_denied=Доступ запрещен. Пользователь должен быть включен в группу "Сотрудник, ответственный за военно-учетную работу" в ЕСИА -login_attempts_exceeded=Слишком большое количество попыток авторизоваться в ЕСИА за короткий промежуток времени. Рекомендуем почистить cookie и cash браузера, после повторить авторизацию. \ No newline at end of file +login_attempts_exceeded=Слишком большое количество попыток авторизоваться в ЕСИА за короткий промежуток времени. Рекомендуем почистить cookie и cash браузера, после повторить авторизацию. +crl_certificate_expired=Превышено время ожидания ответа из ЕСИА \ No newline at end of file