SHA256
10 12 25
Вроде всё доделал. Авторификацию. (осталось закрытие сессии и получение списка активных сессии)
This commit is contained in:
+16
-8
@@ -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();
|
||||
|
||||
+15
-2
@@ -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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user