From f351dcd4ce468c98a452cd08b69ab75f386452b4 Mon Sep 17 00:00:00 2001 From: "adel.ka" Date: Tue, 11 Feb 2025 13:38:29 +0300 Subject: [PATCH] SUPPORT-8914: add new network-attribute --- .../audit/model/AuditAuthorizationEvent.java | 42 ++++++++++++++- .../audit/service/impl/BaseAuditService.java | 12 ++++- .../ru/micord/ervu/util/NetworkUtils.java | 53 +++++++++++++++++++ .../business-model/LK RP FL/restriction.page | 51 +++++++++++++++++- 4 files changed, 155 insertions(+), 3 deletions(-) create mode 100644 backend/src/main/java/ru/micord/ervu/util/NetworkUtils.java diff --git a/backend/src/main/java/ru/micord/ervu/audit/model/AuditAuthorizationEvent.java b/backend/src/main/java/ru/micord/ervu/audit/model/AuditAuthorizationEvent.java index 3885db5..c6a2a14 100644 --- a/backend/src/main/java/ru/micord/ervu/audit/model/AuditAuthorizationEvent.java +++ b/backend/src/main/java/ru/micord/ervu/audit/model/AuditAuthorizationEvent.java @@ -8,11 +8,16 @@ public class AuditAuthorizationEvent extends AuditEvent { private String lastName; private String middleName; private String snils; + private String serverIp; + private String serverHostName; + private String clientIp; + private String clientHostName; public AuditAuthorizationEvent( String esiaPersonId, String eventTime, String firstName, String lastName, String middleName, String snils, - String status, String eventType) { + String status, String eventType, String serverIp, + String serverHostName, String clientIp, String clientHostName) { super(esiaPersonId, eventTime); this.status = status; this.firstName = firstName; @@ -20,6 +25,10 @@ public class AuditAuthorizationEvent extends AuditEvent { this.middleName = middleName; this.snils = snils; this.eventType = eventType; + this.serverIp = serverIp; + this.serverHostName = serverHostName; + this.clientIp = clientIp; + this.clientHostName = clientHostName; } public String getFirstName() { @@ -70,4 +79,35 @@ public class AuditAuthorizationEvent extends AuditEvent { this.eventType = eventType; } + public String getServerIp() { + return serverIp; + } + + public void setServerIp(String serverIp) { + this.serverIp = serverIp; + } + + public String getServerHostName() { + return serverHostName; + } + + public void setServerHostName(String serverHostName) { + this.serverHostName = serverHostName; + } + + public String getClientIp() { + return clientIp; + } + + public void setClientIp(String clientIp) { + this.clientIp = clientIp; + } + + public String getClientHostName() { + return clientHostName; + } + + public void setClientHostName(String clientHostName) { + this.clientHostName = clientHostName; + } } \ No newline at end of file diff --git a/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java b/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java index 8f794d2..6dd4b91 100644 --- a/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java +++ b/backend/src/main/java/ru/micord/ervu/audit/service/impl/BaseAuditService.java @@ -16,6 +16,7 @@ import ru.micord.ervu.audit.service.AuditService; import ru.micord.ervu.security.esia.model.PersonModel; import ru.micord.ervu.security.webbpm.jwt.service.JwtTokenService; import ru.micord.ervu.util.DateUtils; +import ru.micord.ervu.util.NetworkUtils; /** * @author Adel Kalimullin @@ -60,6 +61,11 @@ public class BaseAuditService implements AuditService { @Override public void processAuthEvent(HttpServletRequest request, PersonModel personModel, String status, String eventType) { + String serverIp = NetworkUtils.getServerIp(); + String clientIp = NetworkUtils.getClientIp(request); + String serverHostName = NetworkUtils.getHostName(serverIp); + String clientHostName = NetworkUtils.getHostName(clientIp); + AuditAuthorizationEvent event = new AuditAuthorizationEvent( personModel.getPrnsId(), DateUtils.getClientTimeFromRequest(request), @@ -68,7 +74,11 @@ public class BaseAuditService implements AuditService { personModel.getMiddleName(), personModel.getSnils(), status, - eventType + eventType, + serverIp, + serverHostName, + clientIp, + clientHostName ); String message = convertToMessage(event); auditPublisher.publishEvent(authorizationTopic, message); diff --git a/backend/src/main/java/ru/micord/ervu/util/NetworkUtils.java b/backend/src/main/java/ru/micord/ervu/util/NetworkUtils.java new file mode 100644 index 0000000..c4965cf --- /dev/null +++ b/backend/src/main/java/ru/micord/ervu/util/NetworkUtils.java @@ -0,0 +1,53 @@ +package ru.micord.ervu.util; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import javax.servlet.http.HttpServletRequest; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.StringUtils; + +/** + * @author Adel Kalimullin + */ +public final class NetworkUtils { + private static final Logger LOGGER = LoggerFactory.getLogger(NetworkUtils.class); + private static final String IP_HEADER = "X-Forwarded-For"; + private static final String UNKNOWN = "unknown"; + + private NetworkUtils() { + } + + public static String getServerIp() { + try { + InetAddress inetAddress = InetAddress.getLocalHost(); + return inetAddress.getHostAddress(); + } + catch (UnknownHostException e) { + LOGGER.error("Failed to get local IP address", e); + return UNKNOWN; + } + } + + public static String getClientIp(HttpServletRequest request) { + String ip = request.getHeader(IP_HEADER); + if (StringUtils.hasText(ip) && !ip.equalsIgnoreCase(UNKNOWN)) { + return ip.split(",")[0].trim(); + } + else { + return request.getRemoteAddr(); + } + } + + public static String getHostName(String ip) { + try { + InetAddress inetAddress = InetAddress.getByName(ip); + return inetAddress.getHostName(); + } + catch (UnknownHostException e) { + LOGGER.error("Unknown host for IP {}", ip, e); + return UNKNOWN; + } + } +} \ No newline at end of file diff --git a/resources/src/main/resources/business-model/LK RP FL/restriction.page b/resources/src/main/resources/business-model/LK RP FL/restriction.page index 7736bf3..b800547 100644 --- a/resources/src/main/resources/business-model/LK RP FL/restriction.page +++ b/resources/src/main/resources/business-model/LK RP FL/restriction.page @@ -865,7 +865,6 @@ 573a720b-91f7-4e25-a441-7fd3133fdf31 HB - запрет на постановку в налоговом органе физического лица в качестве налогоплательщика, применяющего спец true -false false @@ -2039,6 +2038,22 @@ false + + + LinkClickHandler + ervu + + true + true + + +eventType + + "NAVIGATION_TO_SOURCE" + + + + fd7e47b9-dce1-4d14-9f3a-580c79f59579 @@ -2450,6 +2465,22 @@ false + + + LinkClickHandler + ervu + + true + true + + +eventType + + "NAVIGATION_TO_SOURCE" + + + + fd7e47b9-dce1-4d14-9f3a-580c79f59579 @@ -2885,6 +2916,22 @@ false + + + LinkClickHandler + ervu + + true + true + + +eventType + + "NAVIGATION_TO_SOURCE" + + + + fd7e47b9-dce1-4d14-9f3a-580c79f59579 @@ -3167,6 +3214,7 @@ 613a502f-2276-454e-bb91-4596be5e94cf Гиперссылка - Закон о воинской обязанности и военной службе, ст. 7. false + false false @@ -3208,6 +3256,7 @@ 81c3d5d2-0f2e-401d-b107-4ad7467f7b30 Текст(гссылка) - Закон о воинской обязанности и военной службе, ст. 7. false + false false