add file metadata to database

This commit is contained in:
Tina_Azure
2023-08-07 19:34:09 +02:00
parent 3c9488df66
commit 552b1d62fe
5 changed files with 63 additions and 9 deletions

View File

@ -694,6 +694,32 @@ namespace Database {
work.commit();
return result;
}
/*
* Executes the prepared statement INSERT_FREELANCER_FILE_SUBMISSION
* Takes an open pqxx::connection and the freelancer email, the file name, the full path and the filesize in byte
* returns errorLevel
* 0 = no error
* 1 = query error
* 2 = critical error
*/
int executePreparedStatement_INSERT_FREELANCER_FILE_SUBMISSION(pqxx::connection &connection, const std::string& email, const std::string& fileName, const std::string& fullPath, const std::size_t filesize) {
try {
pqxx::work work(connection);
work.exec_prepared(PREPARED_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION, email, fileName, fullPath, filesize);
work.commit();
}
catch (pqxx::sql_error const &e) {
std::cerr
<< "Database error: " << e.what() << std::endl
<< "Query was: " << e.query() << std::endl;
return 1;
}
catch (std::exception const &e) {
std::cerr << e.what() << std::endl;
return 2;
}
return 0;
}
/*
* Prepares a statement based on ID

View File

@ -264,7 +264,15 @@ namespace DatabaseStatementConstCollection {
* Name and Statement for prepared statement to purge expired file submissions from the database
*/
const static std::string PREPARED_STATEMENT_PRUGE_FREELANCER_FILE_SUBMISSION = "purgeFreelancerFileSubmissions";
const static std::string SQL_STATEMENT_PRUGE_FREELANCER_FILE_SUBMISSION_PATH = "delete from freelancersubmissions where (current_timestamp - uploaddate) > make_interval(hours => $1)";
const static std::string SQL_STATEMENT_PRUGE_FREELANCER_FILE_SUBMISSION = "delete from freelancersubmissions where (current_timestamp - uploaddate) > make_interval(hours => $1)";
/*
* Name and Statement for prepared statement to insert metadata of a submission.
* 1=freelancer email, 2=filename, 3=fullpath, 4=filesize in byte
*/
const static std::string PREPARED_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION = "insertFreelancerFileSubmission";
const static std::string SQL_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION = "insert into freelancersubmissions values ((select freelancers.id from freelancers where emailaddress = $1), $2, $3, $4, CURRENT_TIMESTAMP);";
/*
* IDs of prepared statements
@ -311,6 +319,7 @@ namespace DatabaseStatementConstCollection {
const static int ID_SELECT_FREELANCER_FILE_SUBMISSION_PATH = 39;
const static int ID_DELETE_FREELANCER_FILE_SUBMISSION = 40;
const static int ID_PRUGE_FREELANCER_FILE_SUBMISSION = 41;
const static int ID_INSERT_FREELANCER_FILE_SUBMISSION = 42;
@ -359,7 +368,8 @@ namespace DatabaseStatementConstCollection {
{PREPARED_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_USED_STORAGE, SQL_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_USED_STORAGE},
{PREPARED_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_PATH, SQL_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_PATH},
{PREPARED_STATEMENT_DELETE_FREELANCER_FILE_SUBMISSION, SQL_STATEMENT_DELETE_FREELANCER_FILE_SUBMISSION_PATH},
{PREPARED_STATEMENT_PRUGE_FREELANCER_FILE_SUBMISSION, SQL_STATEMENT_PRUGE_FREELANCER_FILE_SUBMISSION_PATH}
{PREPARED_STATEMENT_PRUGE_FREELANCER_FILE_SUBMISSION, SQL_STATEMENT_PRUGE_FREELANCER_FILE_SUBMISSION},
{PREPARED_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION, SQL_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION}
};
/*
* Easy access to prepared statement name via int
@ -406,7 +416,8 @@ namespace DatabaseStatementConstCollection {
{ID_SELECT_FREELANCER_FILE_SUBMISSION_USED_STORAGE, PREPARED_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_USED_STORAGE},
{ID_SELECT_FREELANCER_FILE_SUBMISSION_PATH, PREPARED_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_PATH},
{ID_DELETE_FREELANCER_FILE_SUBMISSION, PREPARED_STATEMENT_DELETE_FREELANCER_FILE_SUBMISSION},
{ID_PRUGE_FREELANCER_FILE_SUBMISSION, PREPARED_STATEMENT_PRUGE_FREELANCER_FILE_SUBMISSION}
{ID_PRUGE_FREELANCER_FILE_SUBMISSION, PREPARED_STATEMENT_PRUGE_FREELANCER_FILE_SUBMISSION},
{ID_INSERT_FREELANCER_FILE_SUBMISSION, PREPARED_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION}
};
/*

View File

@ -1023,7 +1023,8 @@ int main(int argc, char *argv[]) {
pqxx::connection databaseConnection(configuration.databaseConnectionString);
Database::prepareStatements(databaseConnection, {
ID_SELECT_FREELANCER_ID,
ID_SELECT_FREELANCER_NAME
ID_SELECT_FREELANCER_NAME,
ID_INSERT_FREELANCER_FILE_SUBMISSION
});
string freelancerName, freelancerID;
@ -1079,7 +1080,7 @@ int main(int argc, char *argv[]) {
if (!Utilities::validateFolderPath(outputFolderPath))
return crow::response(400, "Unable to write to Freelancer folder");
const std::string& outputFilename = filename;
const std::string& outputFilename = Utilities::generateHashedFileName(filename);
const std::string outputFilePath = Utilities::generateSubmissionFilePath(outputFolderPath, outputFilename);
if (!Utilities::validateFilePath(outputFilePath))
@ -1098,6 +1099,16 @@ int main(int argc, char *argv[]) {
outputFileStream << postRequest.body[i];
}
outputFileStream.close();
size_t filesize = postRequest.body.size() - fileContentStart; //get filesize without metadata
if (Database::executePreparedStatement_INSERT_FREELANCER_FILE_SUBMISSION(databaseConnection, cookieCtx.get_cookie(COOKIE_FREELANCER_EMAIL), outputFilename, outputFilePath, filesize) != 0)
Utilities::errorOut("Error occured on insert of file to database after successful completion of the upload and saving:\n FreelancerEmail: "
+ cookieCtx.get_cookie(COOKIE_FREELANCER_EMAIL)
+ "\noutputFilename: " + outputFilename
+ "\noutputFilePath: " + outputFilePath
+ "\nfileSize: " + to_string(filesize));
return crow::response(200, "Upload was successfull");
}
else {

View File

@ -735,11 +735,17 @@ namespace Utilities {
return folderPath;
}
std::string generateHashedFileName(const std::string& fileName) {
std::string hashedFileName = "[";
hashedFileName.append(generateRandomHashValueSHA1Short(5));
hashedFileName.append("]");
hashedFileName.append(fileName);
return hashedFileName;
}
std::string generateSubmissionFilePath(const std::string& folderPath, const std::string& fileName){
std::string filePath = folderPath;
filePath.append("/[");
filePath.append(generateRandomHashValueSHA1Short(5));
filePath.append("]");
filePath.append("/");
filePath.append(fileName);
return filePath;
}

View File

@ -7,7 +7,7 @@
function upload() {
var file = _("FILE_SUBMISSION").files[0];
const fileSize = file.size / 1024 / 1024;
const maxSize = {{MAXIMUM_STORAGE_IN_MB}} - {{AVAILIBLE_STORAGE_IN_MB}};
const maxSize = {{MAXIMUM_STORAGE_IN_MB}} - {{USED_STORAGE_IN_MB}};
const maxFileNameLength = {{MAXIMUM_FILE_NAME_SIZE}};
console.log(maxSize);
console.log(maxFileNameLength);