- Suppression de l'autorisation de se connecter avec le même compte depuis plusieurs client.

This commit is contained in:
Benjamin 2022-03-20 12:13:19 +01:00
parent 60fb6390b4
commit 92ca17f6df
5 changed files with 47 additions and 4 deletions

View File

@ -1,5 +1,7 @@
package lightcontainer.domains.client;
import lightcontainer.repository.ClientHandlerRepository;
import lightcontainer.repository.ReadOnlyClientRepository;
import lightcontainer.storage.File;
import lightcontainer.storage.ReadOnlyFile;
import lightcontainer.storage.Repository;
@ -18,6 +20,7 @@ public class Context {
// Variables
private final Repository repository;
private RequestBundle requestBundle;
private ReadOnlyClientRepository clientRepository;
/**
* Login de l'utilisateur
@ -30,8 +33,9 @@ public class Context {
private String domain;
// Constructeur
public Context(Repository repository) {
public Context(Repository repository, ReadOnlyClientRepository clientRepository) {
this.repository = repository;
this.clientRepository = clientRepository;
}
@ -43,6 +47,10 @@ public class Context {
* @return TRUE si l'utilisateur a pu être créé
*/
public boolean createUser(String login, String password) {
if (clientRepository.hasClient(login)) { // Empêcher double connection
return false;
}
try {
String key = AES_GCM.generateSecretKey();
String hashedPassword = BCryptHasher.hashPassword(password);
@ -73,7 +81,12 @@ public class Context {
* @return TRUE si l'utilisateur a été authentifié
*/
public boolean signIn(String login, String password) {
if (this.repository.verifyUser(login, password)) {
if (login == null || password == null) {
return false;
}
// Empêcher double connection
if (!clientRepository.hasClient(login) && this.repository.verifyUser(login, password)) {
this.login = login;
return true;
}

View File

@ -55,7 +55,7 @@ public class UnicastServerListener implements Runnable {
SSLSocket client = (SSLSocket) this.server.accept();
// Create a new Handler client by passing these dependencies to it
ClientHandler clientHandler = new ClientHandler(this.repository, client, ffe, protocolRep, new Context(repositoryStorage));
ClientHandler clientHandler = new ClientHandler(this.repository, client, ffe, protocolRep, new Context(repositoryStorage, repository));
// Add the client handler to its repository (clienthandlerrepository)
this.repository.addClient(clientHandler);
// Start the thread

View File

@ -5,11 +5,12 @@ import lightcontainer.domains.server.MulticastServerListener;
import lightcontainer.domains.server.UnicastServerListener;
import lightcontainer.protocol.ProtocolWriter;
import lightcontainer.repository.ClientHandlerRepository;
import lightcontainer.repository.ReadOnlyClientRepository;
/**
* A communication interface between a {@link ClientHandler} and the {@link ClientHandlerRepository}.
*/
public interface UnicastCHR {
public interface UnicastCHR extends ReadOnlyClientRepository {
/**
* Setter, allow to define the ServerListener of a repository.
*
@ -24,6 +25,7 @@ public interface UnicastCHR {
*/
void addClient(ClientHandler client);
/**
* Permet de demander la déconnection d'un client
*

View File

@ -55,6 +55,22 @@ public class ClientHandlerRepository implements AutoCloseable, UnicastCHR {
this.handlers.add(client);
}
/**
* Permet de savoir si un client est déjà connecté avec ce login.
*
* @param login Login du client.
*/
@Override
public boolean hasClient(String login) {
for (ClientHandler client : handlers) {
if (client.getLogin() != null && client.getLogin().equals(login)) {
return true;
}
}
return false;
}
@Override
public void disconnect(ClientHandler client) {
if (handlers.remove(client))

View File

@ -0,0 +1,12 @@
package lightcontainer.repository;
public interface ReadOnlyClientRepository {
/**
* Permet de savoir si un client est déjà connecté avec ce login.
*
* @param login Login du client.
*/
boolean hasClient(String login);
}