Vérification du nombre de fichiers présents pour un utilisateur avant de lui permettre d'ajouter un fichier
This commit is contained in:
parent
ea401d0631
commit
4b8367e641
@ -103,6 +103,7 @@ public class Context {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Clé AES de l'utilisateur
|
* Clé AES de l'utilisateur
|
||||||
|
*
|
||||||
* @return Clé AES de l'utilisateur
|
* @return Clé AES de l'utilisateur
|
||||||
*/
|
*/
|
||||||
public String getAesKey() {
|
public String getAesKey() {
|
||||||
@ -118,7 +119,8 @@ public class Context {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Permet d'ajouter des données pour la requête courrante
|
* Permet d'ajouter des données pour la requête courrante
|
||||||
* @param key La clé permettant de retrouver la valeur
|
*
|
||||||
|
* @param key La clé permettant de retrouver la valeur
|
||||||
* @param value La valeur associée à la clé
|
* @param value La valeur associée à la clé
|
||||||
*/
|
*/
|
||||||
public void putDataString(String key, String value) {
|
public void putDataString(String key, String value) {
|
||||||
@ -127,7 +129,8 @@ public class Context {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Permet d'ajouter des données pour la requête courrante
|
* Permet d'ajouter des données pour la requête courrante
|
||||||
* @param key La clé permettant de retrouver la valeur
|
*
|
||||||
|
* @param key La clé permettant de retrouver la valeur
|
||||||
* @param value La valeur associée à la clé
|
* @param value La valeur associée à la clé
|
||||||
*/
|
*/
|
||||||
public void putDataInt(String key, int value) {
|
public void putDataInt(String key, int value) {
|
||||||
@ -136,6 +139,7 @@ public class Context {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Permet de récupérer des données pour la requête courrante
|
* Permet de récupérer des données pour la requête courrante
|
||||||
|
*
|
||||||
* @param key La clé permettant de retrouver la valeur
|
* @param key La clé permettant de retrouver la valeur
|
||||||
* @return La valeur associée à la clé ou null
|
* @return La valeur associée à la clé ou null
|
||||||
*/
|
*/
|
||||||
@ -145,6 +149,7 @@ public class Context {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Permet de récupérer des données pour la requête courrante
|
* Permet de récupérer des données pour la requête courrante
|
||||||
|
*
|
||||||
* @param key La clé permettant de retrouver la valeur
|
* @param key La clé permettant de retrouver la valeur
|
||||||
* @return La valeur associée à la clé
|
* @return La valeur associée à la clé
|
||||||
*/
|
*/
|
||||||
@ -154,17 +159,22 @@ public class Context {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Permet d'ajouter un fichier à l'utilisateur
|
* Permet d'ajouter un fichier à l'utilisateur
|
||||||
* @param fileName Nom du fichier hashé
|
*
|
||||||
|
* @param fileName Nom du fichier hashé
|
||||||
* @param fileNameSalt Salt appliqué sur le nom du fichier
|
* @param fileNameSalt Salt appliqué sur le nom du fichier
|
||||||
* @param size Taille du fichier
|
* @param size Taille du fichier
|
||||||
* @param iv IV du fichier
|
* @param iv IV du fichier
|
||||||
* @param domain Domain dans lequel est stocké le fichier
|
* @param domain Domain dans lequel est stocké le fichier
|
||||||
* @return TRUE si le fichier a pu être enregistré.
|
* @return TRUE si le fichier a pu être enregistré.
|
||||||
*/
|
*/
|
||||||
public boolean addFile(String fileName, String fileNameSalt, int size, String iv, String domain) {
|
public boolean addFile(String fileName, String fileNameSalt, int size, String iv, String domain) {
|
||||||
return this.repository.addFileFor(new File(fileName, fileNameSalt, size, iv, Set.of(domain)), getLogin());
|
return this.repository.addFileFor(new File(fileName, fileNameSalt, size, iv, Set.of(domain)), getLogin());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean canAddFile() {
|
||||||
|
return repository.canAddFile(login);
|
||||||
|
}
|
||||||
|
|
||||||
public String getDomain() {
|
public String getDomain() {
|
||||||
return this.domain;
|
return this.domain;
|
||||||
}
|
}
|
||||||
|
@ -54,39 +54,44 @@ public class SavefileRule extends ProtocolReader {
|
|||||||
super.read(reader);
|
super.read(reader);
|
||||||
System.out.printf("Sauvegarde du fichier : %s %d\n", filename, size);
|
System.out.printf("Sauvegarde du fichier : %s %d\n", filename, size);
|
||||||
|
|
||||||
try {
|
if (getContext().canAddFile()) {
|
||||||
FileReceiver fileReceiver = new FileReceiver(storagePath);
|
try {
|
||||||
|
FileReceiver fileReceiver = new FileReceiver(storagePath);
|
||||||
|
|
||||||
// Ajout login devant le nom du fichier
|
// Ajout login devant le nom du fichier
|
||||||
this.filename = getContext().getLogin() + "_" + this.filename;
|
this.filename = getContext().getLogin() + "_" + this.filename;
|
||||||
|
|
||||||
// Hashage du nom du fichier
|
// Hashage du nom du fichier
|
||||||
ShaHasher hasher = new ShaHasher(this.filename);
|
ShaHasher hasher = new ShaHasher(this.filename);
|
||||||
this.filename = hasher.nextHashing();
|
this.filename = hasher.nextHashing();
|
||||||
String fileNameSalt = hasher.getSalt();
|
String fileNameSalt = hasher.getSalt();
|
||||||
|
|
||||||
String key = AES_GCM.generateSecretKey();
|
String key = AES_GCM.generateSecretKey();
|
||||||
String iv = AES_GCM.generateIV();
|
String iv = AES_GCM.generateIV();
|
||||||
|
|
||||||
if (!fileReceiver.receiveFile(reader, this.filename, this.size, key, iv))
|
if (!fileReceiver.receiveFile(reader, this.filename, this.size, key, iv))
|
||||||
throw new IOException();
|
throw new IOException();
|
||||||
|
|
||||||
// On met les données de la requête actuelle
|
// On met les données de la requête actuelle
|
||||||
getContext().putDataString("fileName", filename);
|
getContext().putDataString("fileName", filename);
|
||||||
getContext().putDataInt("size", size);
|
getContext().putDataInt("size", size);
|
||||||
getContext().putDataString("iv", iv);
|
getContext().putDataString("iv", iv);
|
||||||
getContext().putDataString("fileNameSalt", fileNameSalt);
|
getContext().putDataString("fileNameSalt", fileNameSalt);
|
||||||
|
|
||||||
this.setResultCommand(protocolRep.executeWriter(getContext(), SendfileRule.NAME, this.filename, String.valueOf(this.size), "EMPREINTEBLBLBLBLBLABLABLBALBALBALBALBALBALBALBALBALABLBALBALBALABLABLABLABLABLABLABALBLABALABLABLABLABKJABKAHBHKBHJbhjvgkh"), ResultCmdReceiver.STOREBACKEND);
|
this.setResultCommand(protocolRep.executeWriter(getContext(), SendfileRule.NAME, this.filename, String.valueOf(this.size), "EMPREINTEBLBLBLBLBLABLABLBALBALBALBALBALBALBALBALBALABLBALBALBALABLABLABLABLABLABLABALBLABALABLABLABLABKJABKAHBHKBHJbhjvgkh"), ResultCmdReceiver.STOREBACKEND);
|
||||||
} catch (IOException | AES_GCM.AesGcmException e) {
|
} catch (IOException | AES_GCM.AesGcmException e) {
|
||||||
|
this.setResultCommand(protocolRep.executeWriter(getContext(), SaveFileErrorRule.NAME), ResultCmdReceiver.CLIENT);
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
this.setResultCommand(protocolRep.executeWriter(getContext(), SaveFileErrorRule.NAME), ResultCmdReceiver.CLIENT);
|
this.setResultCommand(protocolRep.executeWriter(getContext(), SaveFileErrorRule.NAME), ResultCmdReceiver.CLIENT);
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cette méthode est appelée lors de l'exécution de la règle
|
* Cette méthode est appelée lors de l'exécution de la règle
|
||||||
|
*
|
||||||
* @param data Paramètres pour créer la commande.
|
* @param data Paramètres pour créer la commande.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
@ -83,6 +83,13 @@ public class AppData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean canAddFile(String login) {
|
||||||
|
if (this.users.containsKey(login)) {
|
||||||
|
return this.users.get(login).canAddFile();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public Iterator<User> usersIterator() {
|
public Iterator<User> usersIterator() {
|
||||||
return users.values().iterator();
|
return users.values().iterator();
|
||||||
}
|
}
|
||||||
@ -104,8 +111,7 @@ public class AppData {
|
|||||||
if (!this.users.containsKey(userName)) {
|
if (!this.users.containsKey(userName)) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
this.users.get(userName).addFile(file);
|
return this.users.get(userName).addFile(file);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,6 +161,7 @@ public class AppData {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Méthode permettant de récupérer la clé AES d'un utilisateur
|
* Méthode permettant de récupérer la clé AES d'un utilisateur
|
||||||
|
*
|
||||||
* @param login Login de l'utilisateur
|
* @param login Login de l'utilisateur
|
||||||
* @return Clé AES
|
* @return Clé AES
|
||||||
*/
|
*/
|
||||||
|
@ -55,6 +55,10 @@ public class Repository {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean canAddFile(String login) {
|
||||||
|
return appData.canAddFile(login);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean deleteFileOf(String fileName, String userName) {
|
public boolean deleteFileOf(String fileName, String userName) {
|
||||||
if (appData.deleteFileOf(fileName, userName)) {
|
if (appData.deleteFileOf(fileName, userName)) {
|
||||||
save();
|
save();
|
||||||
@ -117,6 +121,7 @@ public class Repository {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Méthode permettant de récupérer le chemin de sauvegarde des fichiers
|
* Méthode permettant de récupérer le chemin de sauvegarde des fichiers
|
||||||
|
*
|
||||||
* @return Chemin de sauvegarde
|
* @return Chemin de sauvegarde
|
||||||
*/
|
*/
|
||||||
public String getStoragePath() {
|
public String getStoragePath() {
|
||||||
@ -125,6 +130,7 @@ public class Repository {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Méthode permettant de récupérer la clé AES d'un utilisateur
|
* Méthode permettant de récupérer la clé AES d'un utilisateur
|
||||||
|
*
|
||||||
* @param login Login de l'utilisateur
|
* @param login Login de l'utilisateur
|
||||||
* @return Clé AES
|
* @return Clé AES
|
||||||
*/
|
*/
|
||||||
@ -133,5 +139,4 @@ public class Repository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -54,8 +54,16 @@ public class User {
|
|||||||
* @param file The file to add.
|
* @param file The file to add.
|
||||||
* @return False if a file with the same name already exists. Otherwise, adds the file and returns true.
|
* @return False if a file with the same name already exists. Otherwise, adds the file and returns true.
|
||||||
*/
|
*/
|
||||||
public void addFile(File file) {
|
public boolean addFile(File file) {
|
||||||
this.files.put(file.getName(), file);
|
if (canAddFile()) {
|
||||||
|
this.files.put(file.getName(), file);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canAddFile() {
|
||||||
|
return this.files.size() < 50;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,27 +1 @@
|
|||||||
{
|
{"unicast_port":8000,"multicast_ip":"226.66.66.1","multicast_port":15502,"network_interface":"My network interface","tls":true,"storagePath":"C:\\Users\\ledou\\Documents\\ffe","users":[{"name":"aaaaa","password":"5d628c274ebb008324f1e199d3bfff0a3fe839730a7f2355e82850d7acca5e5ca64db9071abf3d91034295695f84a617","aes_key":"qlTH6TijnfMRnrS0Qf+k6IPKGp5LoRMXGxCq16e+mF4=","passwordSalt":"Ns8Al6DpqPsIDlCSRBVTEg==","files":[{"name":"79ba59efe08f50e762b875c2f1c1f36d2bd13ba888c4b8cf548c63f69e742e709405d7cd0f2390090955f5a7c5d61c34","fileNameSalt":"l5Adt2RnYQqHXnDWUdUV7Q==","size":168,"iv":"bEXi5SyhMSkBjYVUU6qAag==","storage":["lightcontainerSB01"]}]}]}
|
||||||
"unicast_port": 8000,
|
|
||||||
"multicast_ip": "226.66.66.1",
|
|
||||||
"multicast_port": 15502,
|
|
||||||
"network_interface": "My network interface",
|
|
||||||
"tls": true,
|
|
||||||
"storagePath": "/home/benjamin/ffe",
|
|
||||||
"users": [
|
|
||||||
{
|
|
||||||
"name": "aaaaa",
|
|
||||||
"password": "5d628c274ebb008324f1e199d3bfff0a3fe839730a7f2355e82850d7acca5e5ca64db9071abf3d91034295695f84a617",
|
|
||||||
"aes_key": "qlTH6TijnfMRnrS0Qf+k6IPKGp5LoRMXGxCq16e+mF4=",
|
|
||||||
"passwordSalt": "Ns8Al6DpqPsIDlCSRBVTEg==",
|
|
||||||
"files": [
|
|
||||||
{
|
|
||||||
"name": "ebf1d834055adf836823c46d36334edf24f40245948cff0173f999392d8429536ccd57bf82090807a6b9cb4317b1bf64",
|
|
||||||
"fileNameSalt": "zXjO49TAftzugcnyaw3myQ==",
|
|
||||||
"size": 854,
|
|
||||||
"iv": "2DLTOZ4SX9MhTd6JdqFkuw==",
|
|
||||||
"storage": [
|
|
||||||
"lightcontainerSB01"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user