Вроде всё доделал. Авторификацию. (осталось закрытие сессии и получение списка активных сессии)
This commit is contained in:
AidarKC
2025-12-10 16:18:32 +03:00
parent 00fc9e3926
commit 7072882b0b
3 changed files with 82 additions and 19 deletions
@@ -15,12 +15,11 @@ import shine.db.dao.ActiveSessionsDAO;
import shine.db.entities.ActiveSession;
import shine.db.entities.SolanaUser;
import shine.geo.ClientInfoService;
import shine.geo.GeoLookupService;
import utils.crypto.Ed25519Util;
import org.eclipse.jetty.websocket.api.Session;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.nio.charset.StandardCharsets;
import java.sql.SQLException;
import java.security.SecureRandom;
@@ -178,17 +177,26 @@ public class Net_CreateAuthSession__Handler implements JsonMessageHandler {
String clientInfoFromRequest = ClientInfoService.buildClientInfoString(wsSession);
String userLanguage = ClientInfoService.extractPreferredLanguageTag(wsSession);
String clientIp = "";
String clientIp = null;
if (wsSession != null) {
SocketAddress rawAddr = wsSession.getRemoteAddress();
if (rawAddr instanceof InetSocketAddress inet) {
if (inet.getAddress() != null) {
clientIp = inet.getAddress().getHostAddress();
// стандартный метод получения IP
clientIp = ClientInfoService.extractClientIp(wsSession);
// Дёргаем запрос геолокации (ничего не сохраняем в сессию),
// нужно лишь для того, чтобы данные попали в кэш сервера.
if (clientIp != null && !clientIp.isBlank()) {
try {
GeoLookupService.resolveCountryCityOrIpWithCache(clientIp);
} catch (Exception e) {
// геолокация не критична, можно тихо залогировать на debug
log.debug("Geo lookup failed for ip={}", clientIp, e);
}
}
}
// TODO и сдесь тоже переписываем получение ИП адреса на стандартный метод и тоже дёргаем запрос геолокации который никуда не сохраняем просто что бы он в кэш сервера попал
if (clientIp == null) {
clientIp = "";
}
// --- создаём запись ActiveSession и сохраняем в БД ---
ActiveSessionsDAO dao = ActiveSessionsDAO.getInstance();
@@ -16,6 +16,7 @@ import shine.db.dao.SolanaUsersDAO;
import shine.db.entities.ActiveSession;
import shine.db.entities.SolanaUser;
import shine.geo.ClientInfoService;
import shine.geo.GeoLookupService;
import java.sql.SQLException;
@@ -125,8 +126,20 @@ public class Net_RefreshSession_Handler implements JsonMessageHandler {
String userLanguage = null;
if (ctx != null && ctx.getWsSession() != null) {
clientIp = "8.8.8.8"; //TODO сделать нормальное получение ип адреса
// и сделать запрос геолокации и никуда его не сохранять запрос нужен просто что бы в кэш данные добавилиь если нужно
// Нормальное получение IP-адреса клиента
clientIp = ClientInfoService.extractClientIp(ctx.getWsSession());
// Сделать запрос геолокации и никуда её не сохранять:
// вызов с кэшированием в БД, нужно только для прогрева кэша.
if (clientIp != null && !clientIp.isBlank()) {
try {
GeoLookupService.resolveCountryCityOrIpWithCache(clientIp);
} catch (Exception e) {
// Геолокация не критична, просто логируем на debug/trace при желании
log.debug("Geo lookup failed for ip={}", clientIp, e);
}
}
clientInfoFromRequest = ClientInfoService.buildClientInfoString(ctx.getWsSession());
userLanguage = ClientInfoService.extractPreferredLanguageTag(ctx.getWsSession());
}