fixed session

This commit is contained in:
Radek Davidek 2026-04-01 10:07:16 +02:00
parent 4221587d5b
commit 6e4886b35e
3 changed files with 44 additions and 21 deletions

1
.gitignore vendored
View File

@ -9,3 +9,4 @@ target
.DS_Store
*.log
plans
.codex

View File

@ -178,8 +178,8 @@ public class HttpServerApplication {
List<SearchResultItem> results = forumRepository.searchMessages(userId, searchText, forumId);
int loggedUsersCount = sessionManager.countSessionsWithAttribute(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.sessionAttributeValues(AUTH_USER_KEY);
int loggedUsersCount = sessionManager.countDistinctAttributeValues(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.distinctSessionAttributeValues(AUTH_USER_KEY);
PrivateMessageStats pmStats = privateMessageRepository.stats(userId);
Responses.html(ctx.exchange(), 200, Pages.searchResultsPage(
@ -336,8 +336,8 @@ public class HttpServerApplication {
forumRepository.putHistoryRecord(userId, 0L);
List<ForumSummary> forums = forumRepository.listActiveForums();
Map<Long, Integer> newCounts = forumRepository.getNewMessagesCountByUserId(userId);
int loggedUsersCount = sessionManager.countSessionsWithAttribute(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.sessionAttributeValues(AUTH_USER_KEY);
int loggedUsersCount = sessionManager.countDistinctAttributeValues(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.distinctSessionAttributeValues(AUTH_USER_KEY);
PrivateMessageStats pmStats = privateMessageRepository.stats(userId);
Responses.html(ctx.exchange(), 200, Pages.forumPage(username, forums, newCounts, loggedUsersCount, loggedUsers, pmStats));
});
@ -356,8 +356,8 @@ public class HttpServerApplication {
String soundSetting = (soundRaw == null) ? "soundon" : String.valueOf(soundRaw);
String error = (String) session.getAttribute(MEMBER_ERROR_KEY);
session.setAttribute(MEMBER_ERROR_KEY, null);
int loggedUsersCount = sessionManager.countSessionsWithAttribute(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.sessionAttributeValues(AUTH_USER_KEY);
int loggedUsersCount = sessionManager.countDistinctAttributeValues(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.distinctSessionAttributeValues(AUTH_USER_KEY);
PrivateMessageStats pmStats = privateMessageRepository.stats(userId);
Responses.html(
ctx.exchange(),
@ -383,8 +383,8 @@ public class HttpServerApplication {
session.setAttribute(CURRENT_PAGE_KEY, "chat");
String username = String.valueOf(session.getAttribute(AUTH_USER_KEY));
long userId = parseLong(session.getAttribute(AUTH_USER_ID_KEY), -1L);
int loggedUsersCount = sessionManager.countSessionsWithAttribute(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.sessionAttributeValues(AUTH_USER_KEY);
int loggedUsersCount = sessionManager.countDistinctAttributeValues(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.distinctSessionAttributeValues(AUTH_USER_KEY);
PrivateMessageStats pmStats = privateMessageRepository.stats(userId);
Responses.html(ctx.exchange(), 200, Pages.chatPage(username, loggedUsersCount, loggedUsers, pmStats));
});
@ -423,8 +423,8 @@ public class HttpServerApplication {
List<PrivateThreadSummary> threads = totalRows == 0 ? List.of() : allThreads.subList(fromIdx, toIdx);
int rowsFrom = totalRows == 0 ? 0 : fromIdx + 1;
int rowsTo = toIdx;
int loggedUsersCount = sessionManager.countSessionsWithAttribute(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.sessionAttributeValues(AUTH_USER_KEY);
int loggedUsersCount = sessionManager.countDistinctAttributeValues(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.distinctSessionAttributeValues(AUTH_USER_KEY);
PrivateMessageStats pmStats = privateMessageRepository.stats(userId);
Responses.html(
ctx.exchange(),
@ -494,8 +494,8 @@ public class HttpServerApplication {
String toUsername = privateMessageRepository.usernameById(toUser);
String error = valueOrDefault((String) session.getAttribute(PM_ERROR_KEY), "");
session.setAttribute(PM_ERROR_KEY, null);
int loggedUsersCount = sessionManager.countSessionsWithAttribute(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.sessionAttributeValues(AUTH_USER_KEY);
int loggedUsersCount = sessionManager.countDistinctAttributeValues(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.distinctSessionAttributeValues(AUTH_USER_KEY);
PrivateMessageStats pmStats = privateMessageRepository.stats(userId);
Responses.html(ctx.exchange(), 200, Pages.newPmPage(username, toUser, toUsername, error, loggedUsersCount, loggedUsers, pmStats));
});
@ -511,8 +511,8 @@ public class HttpServerApplication {
String username = String.valueOf(session.getAttribute(AUTH_USER_KEY));
String error = valueOrDefault((String) session.getAttribute(NEW_THREAD_ERROR_KEY), "");
session.setAttribute(NEW_THREAD_ERROR_KEY, null);
int loggedUsersCount = sessionManager.countSessionsWithAttribute(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.sessionAttributeValues(AUTH_USER_KEY);
int loggedUsersCount = sessionManager.countDistinctAttributeValues(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.distinctSessionAttributeValues(AUTH_USER_KEY);
PrivateMessageStats pmStats = privateMessageRepository.stats(userId);
Responses.html(ctx.exchange(), 200, Pages.newThreadPage(username, error, loggedUsersCount, loggedUsers, pmStats));
});
@ -607,8 +607,8 @@ public class HttpServerApplication {
int rowsTo = toIdx;
String error = valueOrDefault((String) session.getAttribute(PM_ERROR_KEY), "");
session.setAttribute(PM_ERROR_KEY, null);
int loggedUsersCount = sessionManager.countSessionsWithAttribute(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.sessionAttributeValues(AUTH_USER_KEY);
int loggedUsersCount = sessionManager.countDistinctAttributeValues(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.distinctSessionAttributeValues(AUTH_USER_KEY);
PrivateMessageStats pmStats = privateMessageRepository.stats(userId);
Responses.html(
ctx.exchange(),
@ -791,8 +791,8 @@ public class HttpServerApplication {
}
ForumDisplayView view = paginate(filtered, pageNo, perPage, searchText, showType, showImg, sortBy, sortType);
int loggedUsersCount = sessionManager.countSessionsWithAttribute(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.sessionAttributeValues(AUTH_USER_KEY);
int loggedUsersCount = sessionManager.countDistinctAttributeValues(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.distinctSessionAttributeValues(AUTH_USER_KEY);
MessageRenderSettings renderSettings = settingsRepository.loadMessageRenderSettings();
PrivateMessageStats pmStats = privateMessageRepository.stats(userId);
Responses.html(
@ -1315,8 +1315,8 @@ public class HttpServerApplication {
tableName = "";
}
int loggedUsersCount = sessionManager.countSessionsWithAttribute(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.sessionAttributeValues(AUTH_USER_KEY);
int loggedUsersCount = sessionManager.countDistinctAttributeValues(AUTH_USER_KEY);
List<String> loggedUsers = sessionManager.distinctSessionAttributeValues(AUTH_USER_KEY);
PrivateMessageStats pmStats = privateMessageRepository.stats(userId);
Responses.html(
ctx.exchange(),

View File

@ -2,8 +2,10 @@ package cz.kamma.fabka.session;
import java.time.Duration;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
@ -75,6 +77,26 @@ public class SessionManager {
return values;
}
public int countDistinctAttributeValues(String attributeKey) {
return distinctSessionAttributeValues(attributeKey).size();
}
public List<String> distinctSessionAttributeValues(String attributeKey) {
cleanupExpired();
Set<String> values = new LinkedHashSet<>();
for (SessionData session : sessions.values()) {
Object value = session.getAttribute(attributeKey);
if (value == null) {
continue;
}
String asString = String.valueOf(value).trim();
if (!asString.isBlank()) {
values.add(asString);
}
}
return new ArrayList<>(values);
}
public List<SessionData> activeSessions() {
cleanupExpired();
return new ArrayList<>(sessions.values());