Merge branch 'fix/55-user-can-login-multiple-times' into 'main'
Prevent multiple logins by checking for existing user session Closes #55 See merge request cs108-fs26/Gruppe-13!84
This commit was merged in pull request #240.
This commit is contained in:
+15
-1
@@ -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.UserFactory;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.domain.user.UserRegistry;
|
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.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 ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.dispatcher.ResponseDispatcher;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
public class LoginHandler implements CommandHandler<LoginRequest> {
|
public class LoginHandler implements CommandHandler<LoginRequest> {
|
||||||
private final ResponseDispatcher responseDispatcher;
|
private final ResponseDispatcher responseDispatcher;
|
||||||
|
private final UserRegistry userRegistry;
|
||||||
private final UserFactory userFactory;
|
private final UserFactory userFactory;
|
||||||
|
|
||||||
public LoginHandler(ResponseDispatcher responseDispatcher, UserRegistry userRegistry) {
|
public LoginHandler(ResponseDispatcher responseDispatcher, UserRegistry userRegistry) {
|
||||||
this.responseDispatcher = responseDispatcher;
|
this.responseDispatcher = responseDispatcher;
|
||||||
|
this.userRegistry = userRegistry;
|
||||||
this.userFactory = new UserFactory(userRegistry);
|
this.userFactory = new UserFactory(userRegistry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(LoginRequest request) {
|
public void execute(LoginRequest request) {
|
||||||
User user = userFactory.create(request.getUsername(), request.getContext().sessionId());
|
Optional<User> 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(
|
responseDispatcher.dispatch(
|
||||||
new LoginResponse(request.getContext(), user.getName(), user.getId()));
|
new LoginResponse(request.getContext(), user.getName(), user.getId()));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user