La taille du fichier est maintenant en long pour supporter les gros fichiers

This commit is contained in:
Maximilien LEDOUX 2022-03-19 14:51:16 +01:00
parent a287bbdb59
commit 06c16a289e
15 changed files with 79 additions and 32 deletions

View File

@ -126,6 +126,14 @@ public class Context {
requestBundle.putInt(key, value); requestBundle.putInt(key, value);
} }
/**
* @param key La clé permettant de retrouver la valeur
* @param value La valeur associée à la clé
*/
public void putDataLong(String key, long value) {
requestBundle.putLong(key, value);
}
/** /**
* Permet de récupérer des données pour la requête courante * Permet de récupérer des données pour la requête courante
* *
@ -146,6 +154,14 @@ public class Context {
return requestBundle.getInt(key); return requestBundle.getInt(key);
} }
/**
* @param key La clé permettant de retrouver la valeur
* @return La valeur associée à la clé
*/
public long getDataLong(String key) {
return requestBundle.getLong(key);
}
/** /**
* Permet d'ajouter un fichier à l'utilisateur * Permet d'ajouter un fichier à l'utilisateur
* *
@ -156,7 +172,7 @@ public class Context {
* @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, long 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());
} }

View File

@ -9,6 +9,8 @@ public class RequestBundle {
private final Map<String, Integer> intData = new HashMap<>(); private final Map<String, Integer> intData = new HashMap<>();
private final Map<String, Long> longData = new HashMap<>();
/** /**
* Permet d'ajouter des String * Permet d'ajouter des String
* *
@ -48,4 +50,21 @@ public class RequestBundle {
public int getInt(String key) { public int getInt(String key) {
return intData.get(key); return intData.get(key);
} }
/**
* @param key La clé permettant de retrouver la valeur
* @param value La valeur associée à la clé
*/
public void putLong(String key, long value) {
longData.put(key, value);
}
/**
*
* @param key La clé permettant de retrouver la valeur
* @return La valeur associée à la clé ou null
*/
public long getLong(String key) {
return longData.get(key);
}
} }

View File

@ -3,7 +3,6 @@ package lightcontainer.protocol.rules.reader;
import lightcontainer.domains.client.Context; import lightcontainer.domains.client.Context;
import lightcontainer.interfaces.ProtocolRepository; import lightcontainer.interfaces.ProtocolRepository;
import lightcontainer.protocol.ProtocolReader; import lightcontainer.protocol.ProtocolReader;
import lightcontainer.protocol.StandardizedDefinitions;
import lightcontainer.protocol.rules.writer.RemoveFileErrorRule; import lightcontainer.protocol.rules.writer.RemoveFileErrorRule;
import static lightcontainer.protocol.StandardizedDefinitions.SBE_ERASE_RESULT_ERROR; import static lightcontainer.protocol.StandardizedDefinitions.SBE_ERASE_RESULT_ERROR;

View File

@ -3,7 +3,6 @@ package lightcontainer.protocol.rules.reader;
import lightcontainer.domains.client.Context; import lightcontainer.domains.client.Context;
import lightcontainer.interfaces.ProtocolRepository; import lightcontainer.interfaces.ProtocolRepository;
import lightcontainer.protocol.ProtocolReader; import lightcontainer.protocol.ProtocolReader;
import lightcontainer.protocol.StandardizedDefinitions;
import lightcontainer.protocol.rules.writer.GetFileErrorRule; import lightcontainer.protocol.rules.writer.GetFileErrorRule;
import lightcontainer.protocol.rules.writer.RetrieveFileRule; import lightcontainer.protocol.rules.writer.RetrieveFileRule;
import lightcontainer.storage.ReadOnlyFile; import lightcontainer.storage.ReadOnlyFile;
@ -62,7 +61,7 @@ public class GetFileRule extends ProtocolReader {
// Save into bundle // Save into bundle
context.putDataString("fileName", file.getName()); context.putDataString("fileName", file.getName());
context.putDataInt("fileSize", file.getSize()); context.putDataLong("fileSize", file.getSize());
context.putDataString("fileIV", file.getIv()); context.putDataString("fileIV", file.getIv());
// Create cmd for storebacked // Create cmd for storebacked

View File

@ -37,10 +37,10 @@ public class RetrieveOkRule extends ProtocolReader {
public class Result extends ProtocolResult { public class Result extends ProtocolResult {
// Variables // Variables
private final String filename; private final String filename;
private final int filesize; private final long filesize;
private String hashedFileContent; private String hashedFileContent;
public Result(Context context, String filename, int filesize, String hashedFileContent) { public Result(Context context, String filename, long filesize, String hashedFileContent) {
super(context); super(context);
this.filename = filename; this.filename = filename;
this.filesize = filesize; this.filesize = filesize;
@ -51,7 +51,7 @@ public class RetrieveOkRule extends ProtocolReader {
return filename; return filename;
} }
public int getFilesize() { public long getFilesize() {
return filesize; return filesize;
} }
@ -81,11 +81,11 @@ public class RetrieveOkRule extends ProtocolReader {
RetrieveOkRule.Result result = new RetrieveOkRule.Result(context, data[HASHED_FILE_NAME], Integer.parseInt(data[FILE_SIZE]), data[HASHED_FILE_CONTENT]); RetrieveOkRule.Result result = new RetrieveOkRule.Result(context, data[HASHED_FILE_NAME], Integer.parseInt(data[FILE_SIZE]), data[HASHED_FILE_CONTENT]);
// save encrypted file size into bundle // save encrypted file size into bundle
context.putDataInt("encryptedFileSize", result.getFilesize()); // TODO to long ?! context.putDataLong("encryptedFileSize", result.getFilesize()); // TODO to long ?!
context.putDataString("hashedFileName", result.getFilename()); context.putDataString("hashedFileName", result.getFilename());
// Set result command // Set result command
result.setResultCommand(protocolRep.executeWriter(context, GetFileOkRule.NAME, context.getDataString("fileName"), String.valueOf(context.getDataInt("fileSize"))), ResultCmdReceiver.CLIENT); result.setResultCommand(protocolRep.executeWriter(context, GetFileOkRule.NAME, context.getDataString("fileName"), String.valueOf(context.getDataLong("fileSize"))), ResultCmdReceiver.CLIENT);
return result; return result;
} }

View File

@ -43,10 +43,10 @@ public class SavefileRule extends ProtocolReader {
public class Result extends ProtocolResult { public class Result extends ProtocolResult {
// Variables // Variables
private String filename; private String filename;
private final int size; private final long size;
// Construct // Construct
public Result(Context context, String filename, int size) { public Result(Context context, String filename, long size) {
super(context); super(context);
this.filename = filename; this.filename = filename;
this.size = size; this.size = size;
@ -75,7 +75,7 @@ public class SavefileRule extends ProtocolReader {
String iv = AES_GCM.generateIV(); String iv = AES_GCM.generateIV();
// retrieve file and new size // retrieve file and new size
int encryptedFileSize = fileReceiver.receiveFile(reader, this.filename, this.size, key, iv); long encryptedFileSize = fileReceiver.receiveFile(reader, this.filename, this.size, key, iv);
if (encryptedFileSize < 0) throw new IOException(); if (encryptedFileSize < 0) throw new IOException();
System.out.println(encryptedFileSize); System.out.println(encryptedFileSize);
@ -83,7 +83,7 @@ public class SavefileRule extends ProtocolReader {
String fileHash = SHA.hashFile(storagePath, this.filename); String fileHash = SHA.hashFile(storagePath, this.filename);
// On met les données de la requête actuelle // On met les données de la requête actuelle
getContext().putDataInt("size", size); getContext().putDataLong("size", size);
getContext().putDataString("iv", iv); getContext().putDataString("iv", iv);
getContext().putDataString("fileNameSalt", fileNameSalt); getContext().putDataString("fileNameSalt", fileNameSalt);

View File

@ -3,7 +3,6 @@ package lightcontainer.protocol.rules.reader;
import lightcontainer.domains.client.Context; import lightcontainer.domains.client.Context;
import lightcontainer.interfaces.ProtocolRepository; import lightcontainer.interfaces.ProtocolRepository;
import lightcontainer.protocol.ProtocolReader; import lightcontainer.protocol.ProtocolReader;
import lightcontainer.protocol.StandardizedDefinitions;
import lightcontainer.protocol.rules.writer.SignErrorRule; import lightcontainer.protocol.rules.writer.SignErrorRule;
import lightcontainer.protocol.rules.writer.SignOkRule; import lightcontainer.protocol.rules.writer.SignOkRule;

View File

@ -33,10 +33,10 @@ public class GetFileOkRule extends ProtocolWriter {
public class Result extends ProtocolWriter.ProtocolResult { public class Result extends ProtocolWriter.ProtocolResult {
// Variables // Variables
private final String filename; private final String filename;
private final int filesize; private final long filesize;
// Constructors // Constructors
public Result(Context context, String filename, int filesize) { public Result(Context context, String filename, long filesize) {
super(context); super(context);
this.filename = filename; this.filename = filename;
this.filesize = filesize; this.filesize = filesize;
@ -51,12 +51,12 @@ public class GetFileOkRule extends ProtocolWriter {
public void write(OutputStream writer) throws IOException { public void write(OutputStream writer) throws IOException {
System.out.printf("Sauvegarde du fichier : %s %d\n", this.filename, this.filesize); System.out.printf("Sauvegarde du fichier : %s %d\n", this.filename, this.filesize);
System.out.println("Encrypted size for parsing: " + getContext().getDataInt("encryptedFileSize") + " normal: " + getContext().getDataInt("fileSize")); System.out.println("Encrypted size for parsing: " + getContext().getDataLong("encryptedFileSize") + " normal: " + getContext().getDataLong("fileSize"));
FileSender fileSender = new FileSender(storagePath); FileSender fileSender = new FileSender(storagePath);
fileSender.sendFile( fileSender.sendFile(
getContext().getDataString("hashedFileName"), getContext().getDataString("hashedFileName"),
writer, writer,
getContext().getDataInt("encryptedFileSize"), // Encrypted file size (because data is parsing into AES system) getContext().getDataLong("encryptedFileSize"), // Encrypted file size (because data is parsing into AES system)
getContext().getAesKey(), getContext().getAesKey(),
getContext().getDataString("fileIV") getContext().getDataString("fileIV")
); );

View File

@ -32,7 +32,7 @@ public class SaveFileOkRule extends ProtocolWriter {
System.out.println("===> Save en json " + context.getDomain() + " - " + context.getLogin()); System.out.println("===> Save en json " + context.getDomain() + " - " + context.getLogin());
// Sauvegarder dans JSON // Sauvegarder dans JSON
context.addFile(context.getDataString("fileName"), context.getDataString("fileNameSalt"), context.getDataInt("size"), context.getDataString("iv"), context.getDomain()); context.addFile(context.getDataString("fileName"), context.getDataString("fileNameSalt"), context.getDataLong("size"), context.getDataString("iv"), context.getDomain());
// Suppression du fichier temporaire dans le stockage du FFE // Suppression du fichier temporaire dans le stockage du FFE
String hashedFileName = context.getHashedFileName(context.getDataString("fileName")); String hashedFileName = context.getHashedFileName(context.getDataString("fileName"));

View File

@ -33,10 +33,10 @@ public class SendfileRule extends ProtocolWriter {
public class Result extends ProtocolWriter.ProtocolResult { public class Result extends ProtocolWriter.ProtocolResult {
private final String hashedFileName; private final String hashedFileName;
private final int fileSize; private final long fileSize;
private final String hashedFileContent; private final String hashedFileContent;
public Result(Context context, String hashedFileName, int fileSize, String hashedFileContent) { public Result(Context context, String hashedFileName, long fileSize, String hashedFileContent) {
super(context); super(context);
this.hashedFileName = hashedFileName; this.hashedFileName = hashedFileName;
this.fileSize = fileSize; this.fileSize = fileSize;

View File

@ -10,12 +10,12 @@ public class File implements ReadOnlyFile {
// Variables // Variables
private final String name; private final String name;
private final String fileNameSalt; private final String fileNameSalt;
private final int size; private final long size;
private final String iv; private final String iv;
private final Set<String> storage; private final Set<String> storage;
// Constructor // Constructor
public File(String name, String fileNameSalt, int size, String iv, Set<String> storage) { public File(String name, String fileNameSalt, long size, String iv, Set<String> storage) {
this.name = name; this.name = name;
this.fileNameSalt = fileNameSalt; this.fileNameSalt = fileNameSalt;
this.size = size; this.size = size;
@ -34,7 +34,7 @@ public class File implements ReadOnlyFile {
} }
@Override @Override
public int getSize() { public long getSize() {
return size; return size;
} }

View File

@ -8,7 +8,7 @@ public interface ReadOnlyFile {
String getFileNameSalt(); String getFileNameSalt();
int getSize(); long getSize();
String getIv(); String getIv();

View File

@ -9,7 +9,7 @@ public class FileReceiver {
this.path = path; this.path = path;
} }
public int receiveFile(InputStream input, String fileName, int fileSize, String key, String iv) { public int receiveFile(InputStream input, String fileName, long fileSize, String key, String iv) {
try { try {
File file = new File(String.format("%s/%s", path, fileName)); File file = new File(String.format("%s/%s", path, fileName));
if (file.createNewFile()) { if (file.createNewFile()) {

View File

@ -10,7 +10,7 @@ public class FileSender {
this.path = path; this.path = path;
} }
public boolean sendFile(String filename, OutputStream out, int fileSize, String aesKey, String iv) throws IOException { public boolean sendFile(String filename, OutputStream out, long fileSize, String aesKey, String iv) throws IOException {
BufferedInputStream bisFile; BufferedInputStream bisFile;
System.out.printf("Envoie fichier : %s - %s - %s \n", filename, aesKey, iv); System.out.printf("Envoie fichier : %s - %s - %s \n", filename, aesKey, iv);
try { try {
@ -28,7 +28,7 @@ public class FileSender {
public boolean sendFile(String filename, OutputStream out) throws IOException { public boolean sendFile(String filename, OutputStream out) throws IOException {
BufferedInputStream bisFile; BufferedInputStream bisFile;
int bytesReaded = 0; int bytesRead = 0;
try { try {
File file = new File(String.format("%s/%s", path, filename)); File file = new File(String.format("%s/%s", path, filename));
long fileSize = file.length(); long fileSize = file.length();
@ -36,10 +36,10 @@ public class FileSender {
byte[] buffer = new byte[DEFAULT_BUFFER]; byte[] buffer = new byte[DEFAULT_BUFFER];
bisFile = new BufferedInputStream(new FileInputStream(file)); bisFile = new BufferedInputStream(new FileInputStream(file));
long currentOffset = 0; long currentOffset = 0;
while ((currentOffset < fileSize) && (bytesReaded = bisFile.read(buffer)) > 0) { while ((currentOffset < fileSize) && (bytesRead = bisFile.read(buffer)) > 0) {
out.write(buffer, 0, bytesReaded); out.write(buffer, 0, bytesRead);
out.flush(); out.flush();
currentOffset += bytesReaded; currentOffset += bytesRead;
} }
bisFile.close(); bisFile.close();
return true; return true;

View File

@ -1 +1,16 @@
{"unicast_port":8000,"multicast_ip":"224.66.66.1","multicast_port":15502,"network_interface":"wlp1s0","tls":true,"storagePath":"/home/benjamin/ffe","users":[{"name":"benjamin","password":"$2a$10$I4vHt83CTYuQCP7xvZ04Ne7Vb0cswBiVZhV0n23k9FCxoH0ny9fZG","aes_key":"mAP6izUBUhBxIkakH2yB/TplhRz1OQV5Fp6HQmhywns=","files":[{"name":"README.md","fileNameSalt":"atK0eGo/J8IBOTCpIZpWow==","size":17,"iv":"fXPzefxl0cO4Hf02Qwi+BA==","storage":["lightcontainerSB01"]}]},{"name":"aaaaa","password":"$2a$10$nDCEDVwbNO/YDQ4qdRcxfuES4.aboluLzWouXXsk6vDoaWocv516W","aes_key":"kYtwHy9qJBg30WS6axWTFGVE0Ge5kpYiJJlC+COIEI4=","files":[{"name":"ca.crt","fileNameSalt":"qz6FoPGyJJ8Hy+1LIouvZA==","size":4207,"iv":"8v2H+cOzztD++NXHXw5Ofw==","storage":["lightcontainerSB01"]}]}]} {
"unicast_port": 8000,
"multicast_ip": "224.66.66.1",
"multicast_port": 15502,
"network_interface": "lo",
"tls": true,
"storagePath": "C:\\Users\\ledou\\Documents\\ffe",
"users": [
{
"name": "aaaaa",
"password": "$2a$10$6KbB.cBqsWyRExIf2ugkhebsJOhUG9goXFEfOYWXJI4dOQNT1uXhu",
"aes_key": "2gYT1TeILBswvCbxAth24ZNLtFhaA1zvdJmtfh0unNE=",
"files": []
}
]
}