mirror of
https://github.com/klmp200/PQT_Gestionnaire_vente_stock.git
synced 2024-12-22 15:31:08 +00:00
[SERVEUR] #17 : Ajout du support des modifications sur les comptes utilisateurs
This commit is contained in:
parent
957bdcf5d3
commit
3b27d5852b
@ -12,6 +12,7 @@ import com.pqt.core.entities.sale.LightweightSale;
|
||||
import com.pqt.core.entities.server_config.ServerConfig;
|
||||
import com.pqt.core.entities.user_account.Account;
|
||||
import com.pqt.core.entities.user_account.AccountLevel;
|
||||
import com.pqt.core.entities.user_account.AccountUpdate;
|
||||
import com.pqt.server.exception.ServerQueryException;
|
||||
import com.pqt.server.module.account.AccountService;
|
||||
import com.pqt.server.module.sale.SaleService;
|
||||
@ -124,13 +125,24 @@ public class SimpleMessageHandler implements IMessageHandler {
|
||||
List<ProductUpdate> updates = messageToolFactory.getListParser(ProductUpdate.class).parse(message.getField("updates"));
|
||||
stockService.applyUpdateList(updates);
|
||||
return new Message(MessageType.ACK_STOCK_UPDATE, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, null);
|
||||
}catch (ServerQueryException | NullPointerException e){
|
||||
}catch (Exception e){
|
||||
Map<String, String> fields = new HashMap<>();
|
||||
fields.put(header_err_query, e.toString());
|
||||
return new Message(MessageType.ERROR_QUERY, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields);
|
||||
}
|
||||
}, AccountLevel.MASTER);
|
||||
|
||||
manager.supportForConnectedAccounts(MessageType.QUERY_ACCOUNT_UPDATE, (message)->{
|
||||
try{
|
||||
List<AccountUpdate> updates = messageToolFactory.getListParser(AccountUpdate.class).parse(message.getField("updates"));
|
||||
accountService.applyUpdateList(updates);
|
||||
return new Message(MessageType.ACK_ACCOUNT_UPDATE, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, null);
|
||||
}catch (Exception e){
|
||||
Map<String, String> fields = new HashMap<>();
|
||||
fields.put(header_err_query, e.toString());
|
||||
return new Message(MessageType.ERROR_QUERY, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields);
|
||||
}
|
||||
}, AccountLevel.MASTER);
|
||||
/*
|
||||
Queries without account connection requirements
|
||||
*/
|
||||
|
@ -2,6 +2,7 @@ package com.pqt.server.module.account;
|
||||
|
||||
import com.pqt.core.entities.user_account.Account;
|
||||
import com.pqt.core.entities.user_account.AccountLevel;
|
||||
import com.pqt.core.entities.user_account.AccountUpdate;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -117,4 +118,21 @@ public class AccountService {
|
||||
public List<Account> getAccountList(){
|
||||
return dao.getAccountList();
|
||||
}
|
||||
|
||||
public void applyUpdateList(List<AccountUpdate> updates) {
|
||||
updates.stream()
|
||||
.filter(update->
|
||||
(update.getOldVersion()!=null && dao.isAccountRegistered(update.getOldVersion()))
|
||||
|| update.getNewVersion()!=null)
|
||||
.forEach(update->{
|
||||
if(update.getNewVersion()==null){
|
||||
if(!dao.isAccountConnected(update.getOldVersion()))
|
||||
dao.removeAccount(update.getOldVersion());
|
||||
}else if(update.getOldVersion()==null){
|
||||
dao.addAccount(update.getNewVersion());
|
||||
}else{
|
||||
dao.modifyAccount(update.getOldVersion(), update.getNewVersion());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -103,7 +103,8 @@ public class FileAccountDao implements IAccountDao {
|
||||
String expectedPasswordHash = entry.getPasswordHash();
|
||||
String salt = entry.getSalt();
|
||||
|
||||
if(expectedUsername.equals(account.getUsername()) && hashTool.hashAndSalt(account.getPassword(), salt).equals(expectedPasswordHash)){
|
||||
if(expectedUsername.equals(account.getUsername())
|
||||
&& hashTool.hashAndSalt(account.getPassword(), salt).equals(expectedPasswordHash)){
|
||||
connectedAccount.add(entry);
|
||||
return true;
|
||||
}else
|
||||
@ -140,7 +141,9 @@ public class FileAccountDao implements IAccountDao {
|
||||
|
||||
@Override
|
||||
public synchronized List<Account> getAccountList() {
|
||||
return accountEntries.stream().map(accountEntry -> new Account(accountEntry.getUsername(), null, accountEntry.getLevel())).collect(Collectors.toList());
|
||||
return accountEntries.stream()
|
||||
.map(accountEntry -> new Account(accountEntry.getUsername(), null, accountEntry.getLevel()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -150,11 +153,14 @@ public class FileAccountDao implements IAccountDao {
|
||||
fileManager.saveSetToFile(accountEntries);
|
||||
}
|
||||
|
||||
public boolean addAccount(Account account){
|
||||
if(accountEntries.stream().filter(accountEntry -> accountEntry.getUsername().equals(account.getUsername())).count()==0) {
|
||||
@Override
|
||||
public synchronized boolean addAccount(Account account){
|
||||
if(accountEntries.stream().noneMatch(accountEntry -> accountEntry.getUsername().equals(account.getUsername()))){
|
||||
String salt = randomString.nextString();
|
||||
String passwordHash = hashTool.hashAndSalt(account.getPassword(), salt);
|
||||
accountEntries.add(new AccountEntry(account.getUsername(), passwordHash, salt, account.getPermissionLevel()));
|
||||
accountEntries.add(
|
||||
new AccountEntry(account.getUsername(), passwordHash, salt, account.getPermissionLevel())
|
||||
);
|
||||
saveToFile();
|
||||
return true;
|
||||
}else{
|
||||
@ -162,6 +168,33 @@ public class FileAccountDao implements IAccountDao {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void removeAccount(Account oldVersion) {
|
||||
AccountEntry match = lookupMatchingEntry(oldVersion, accountEntries);
|
||||
if(match!=null && !connectedAccount.contains(match)){
|
||||
accountEntries.remove(match);
|
||||
saveToFile();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void modifyAccount(Account oldVersion, Account newVersion) {
|
||||
AccountEntry match = lookupMatchingEntry(oldVersion, accountEntries);
|
||||
if(match!=null && oldVersion.getUsername().equals(newVersion.getUsername())){
|
||||
boolean toReconnect = connectedAccount.remove(match);
|
||||
accountEntries.remove(match);
|
||||
|
||||
String salt = randomString.nextString();
|
||||
String passwordHash = hashTool.hashAndSalt(newVersion.getPassword(), salt);
|
||||
AccountEntry newEntry =
|
||||
new AccountEntry(oldVersion.getUsername(), passwordHash, salt, newVersion.getPermissionLevel());
|
||||
accountEntries.add(newEntry);
|
||||
if(toReconnect)
|
||||
connectedAccount.add(newEntry);
|
||||
saveToFile();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Charge les données des comptes depuis le fichier de sauvegarde.
|
||||
* <p/>
|
||||
|
@ -63,10 +63,31 @@ public interface IAccountDao {
|
||||
/**
|
||||
* Ajoute un objet {@link Account} dans la collection de comptes utilisateurs.
|
||||
* <p/>
|
||||
* Les implémentations doivent en outre effectuer une vérification pour s'assurer que le compte à rajouter ne pas
|
||||
* un nom d'utilisateur qui existe déjà. Dans ce cas de figure, l'ajout du nouveau compte doit échouer.
|
||||
* Les implémentations doivent en outre effectuer une vérification pour s'assurer que le compte à rajouter ne soit
|
||||
* pas un nom d'utilisateur qui existe déjà. Dans ce cas de figure, l'ajout du nouveau compte doit échouer.
|
||||
* @param account
|
||||
* @return
|
||||
*/
|
||||
boolean addAccount(Account account);
|
||||
|
||||
/**
|
||||
* Retire un objet {@link Account} dans la collection de comptes utilisateurs.
|
||||
* <p/>
|
||||
* Les implémentations doivent en outre effectuer une vérification pour s'assurer que le compte à retirer ne soit
|
||||
* pas un compte utilisateur actuellement connecté. Dans ce cas de figure, l'ajout du nouveau compte doit échouer.
|
||||
*
|
||||
* @param oldVersion
|
||||
*/
|
||||
void removeAccount(Account oldVersion);
|
||||
|
||||
/**
|
||||
* Modifie un objet {@link Account} {@code oldVersion} en remplaçant ses attributs par ceux de {@code newVersion}.
|
||||
* <p/>
|
||||
* Les implémentations doivent s'assurer que le nouveau nom ne soit pas un nom déjà existant dans la base de données.
|
||||
* Dans un tel cas de figure, la modification doit échouer et doit laisser {@code oldVersion} inchangé.
|
||||
*
|
||||
* @param oldVersion
|
||||
* @param newVersion
|
||||
*/
|
||||
void modifyAccount(Account oldVersion, Account newVersion);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user