mirror of
https://github.com/klmp200/PQT_Gestionnaire_vente_stock.git
synced 2024-11-22 08:13:20 +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.server_config.ServerConfig;
|
||||||
import com.pqt.core.entities.user_account.Account;
|
import com.pqt.core.entities.user_account.Account;
|
||||||
import com.pqt.core.entities.user_account.AccountLevel;
|
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.exception.ServerQueryException;
|
||||||
import com.pqt.server.module.account.AccountService;
|
import com.pqt.server.module.account.AccountService;
|
||||||
import com.pqt.server.module.sale.SaleService;
|
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"));
|
List<ProductUpdate> updates = messageToolFactory.getListParser(ProductUpdate.class).parse(message.getField("updates"));
|
||||||
stockService.applyUpdateList(updates);
|
stockService.applyUpdateList(updates);
|
||||||
return new Message(MessageType.ACK_STOCK_UPDATE, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, null);
|
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<>();
|
Map<String, String> fields = new HashMap<>();
|
||||||
fields.put(header_err_query, e.toString());
|
fields.put(header_err_query, e.toString());
|
||||||
return new Message(MessageType.ERROR_QUERY, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields);
|
return new Message(MessageType.ERROR_QUERY, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields);
|
||||||
}
|
}
|
||||||
}, AccountLevel.MASTER);
|
}, 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
|
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.Account;
|
||||||
import com.pqt.core.entities.user_account.AccountLevel;
|
import com.pqt.core.entities.user_account.AccountLevel;
|
||||||
|
import com.pqt.core.entities.user_account.AccountUpdate;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -117,4 +118,21 @@ public class AccountService {
|
|||||||
public List<Account> getAccountList(){
|
public List<Account> getAccountList(){
|
||||||
return dao.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 expectedPasswordHash = entry.getPasswordHash();
|
||||||
String salt = entry.getSalt();
|
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);
|
connectedAccount.add(entry);
|
||||||
return true;
|
return true;
|
||||||
}else
|
}else
|
||||||
@ -140,7 +141,9 @@ public class FileAccountDao implements IAccountDao {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized List<Account> getAccountList() {
|
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);
|
fileManager.saveSetToFile(accountEntries);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean addAccount(Account account){
|
@Override
|
||||||
if(accountEntries.stream().filter(accountEntry -> accountEntry.getUsername().equals(account.getUsername())).count()==0) {
|
public synchronized boolean addAccount(Account account){
|
||||||
|
if(accountEntries.stream().noneMatch(accountEntry -> accountEntry.getUsername().equals(account.getUsername()))){
|
||||||
String salt = randomString.nextString();
|
String salt = randomString.nextString();
|
||||||
String passwordHash = hashTool.hashAndSalt(account.getPassword(), salt);
|
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();
|
saveToFile();
|
||||||
return true;
|
return true;
|
||||||
}else{
|
}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.
|
* Charge les données des comptes depuis le fichier de sauvegarde.
|
||||||
* <p/>
|
* <p/>
|
||||||
|
@ -63,10 +63,31 @@ public interface IAccountDao {
|
|||||||
/**
|
/**
|
||||||
* Ajoute un objet {@link Account} dans la collection de comptes utilisateurs.
|
* Ajoute un objet {@link Account} dans la collection de comptes utilisateurs.
|
||||||
* <p/>
|
* <p/>
|
||||||
* Les implémentations doivent en outre effectuer une vérification pour s'assurer que le compte à rajouter ne pas
|
* Les implémentations doivent en outre effectuer une vérification pour s'assurer que le compte à rajouter ne soit
|
||||||
* un nom d'utilisateur qui existe déjà. Dans ce cas de figure, l'ajout du nouveau compte doit échouer.
|
* pas un nom d'utilisateur qui existe déjà. Dans ce cas de figure, l'ajout du nouveau compte doit échouer.
|
||||||
* @param account
|
* @param account
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
boolean addAccount(Account account);
|
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