From d4722989d90daf06f8eba131b0d3607b249e61b0 Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Tue, 7 Apr 2026 14:22:09 +0200 Subject: [PATCH] Add: Prevent multiple logins by checking for existing user session --- .../server/app/commands/login/LoginHandler.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/login/LoginHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/login/LoginHandler.java index b28ba3a..8051153 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/login/LoginHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/login/LoginHandler.java @@ -4,20 +4,34 @@ import ch.unibas.dmi.dbis.cs108.casono.server.domain.user.User; import ch.unibas.dmi.dbis.cs108.casono.server.domain.user.UserFactory; import ch.unibas.dmi.dbis.cs108.casono.server.domain.user.UserRegistry; import ch.unibas.dmi.dbis.cs108.casono.server.network.command.execution.CommandHandler; +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.ErrorResponse; import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.dispatcher.ResponseDispatcher; +import java.util.Optional; public class LoginHandler implements CommandHandler { private final ResponseDispatcher responseDispatcher; + private final UserRegistry userRegistry; private final UserFactory userFactory; public LoginHandler(ResponseDispatcher responseDispatcher, UserRegistry userRegistry) { this.responseDispatcher = responseDispatcher; + this.userRegistry = userRegistry; this.userFactory = new UserFactory(userRegistry); } @Override public void execute(LoginRequest request) { - User user = userFactory.create(request.getUsername(), request.getContext().sessionId()); + Optional existingUser = userRegistry.getBySessionId(request.getSessionId()); + if (existingUser.isPresent()) { + responseDispatcher.dispatch( + new ErrorResponse( + request.getContext(), + "ALREADY_LOGGED_IN", + "This session is already associated with an active user.")); + return; + } + + User user = userFactory.create(request.getUsername(), request.getSessionId()); responseDispatcher.dispatch( new LoginResponse(request.getContext(), user.getName(), user.getId())); }