Access public file submission alias
database access of creation of a submission alias
This commit is contained in:
@ -490,6 +490,33 @@ namespace Database {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* //todo:implement
|
||||||
|
* Executes the prepared statement INSERT_FREELANCER_FILE_SUBMISSION_ALIAS
|
||||||
|
* Takes an open pqxx::connection and aliasname as {ID}/{Alias}, freelancerid, filename
|
||||||
|
* returns errorLevel
|
||||||
|
* 0 = no error
|
||||||
|
* 1 = query error
|
||||||
|
* 2 = critical error
|
||||||
|
*/
|
||||||
|
int executePreparedStatement_INSERT_FREELANCER_FILE_SUBMISSION_ALIAS(pqxx::connection &connection, const int freelancerID, const std::string& fileName, const std::string& aliasname) {
|
||||||
|
try {
|
||||||
|
pqxx::work work(connection);
|
||||||
|
work.exec_prepared(PREPARED_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION_ALIAS, freelancerID, fileName, aliasname);
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Executes the prepared statement SELECT_FREELANCER_ALIAS
|
* Executes the prepared statement SELECT_FREELANCER_ALIAS
|
||||||
* Takes an open pqxx::connection and the freelancer email to select by
|
* Takes an open pqxx::connection and the freelancer email to select by
|
||||||
@ -706,6 +733,20 @@ namespace Database {
|
|||||||
work.commit();
|
work.commit();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Executes the prepared statement SELECT_FREELANCER_FILE_SUBMISSION_ALIAS_PATH
|
||||||
|
* Takes an open pqxx::connection the alias and the freelancer ID
|
||||||
|
* returns the path to the file
|
||||||
|
*/
|
||||||
|
pqxx::result executePreparedStatement_SELECT_FREELANCER_FILE_SUBMISSION_ALIAS_PATH(pqxx::connection &connection, const int& freelancerID, const std::string& alias) {
|
||||||
|
pqxx::work work(connection);
|
||||||
|
pqxx::result result = work.exec_prepared(PREPARED_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_ALIAS_PATH, freelancerID, alias);
|
||||||
|
work.commit();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Executes the prepared statement INSERT_FREELANCER_FILE_SUBMISSION
|
* 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
|
* Takes an open pqxx::connection and the freelancer email, the file name, the full path and the filesize in byte
|
||||||
|
@ -254,6 +254,20 @@ namespace DatabaseStatementConstCollection {
|
|||||||
const static std::string PREPARED_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_PATH = "selectFreelancerFileSubmissionPATH";
|
const static std::string PREPARED_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_PATH = "selectFreelancerFileSubmissionPATH";
|
||||||
const static std::string SQL_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_PATH = "select fullpath from freelancersubmissions where freelancerid = (select freelancers.id from freelancers where emailaddress = $1) and filename = $2";
|
const static std::string SQL_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_PATH = "select fullpath from freelancersubmissions where freelancerid = (select freelancers.id from freelancers where emailaddress = $1) and filename = $2";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Name and Statement for prepared statement to select fullpath of a submission based on freelancer ID and alias
|
||||||
|
* Aliasname must follow the format {ID}/{Alias}
|
||||||
|
*/
|
||||||
|
const static std::string PREPARED_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_ALIAS_PATH = "selectFreelancerFileSubmissionAliasPATH";
|
||||||
|
const static std::string SQL_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_ALIAS_PATH = "select fullpath from freelancersubmissions where freelancerid = $1 and filename = (select route from aliasroutes where freelancerid = $1 and aliasname = $2 and routeparameter = 'FILESUBMISSION')";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Name and Statement for prepared statement to insert alias for a file submission
|
||||||
|
* 1=freelancer id, 2=filename, 3=aliasname as {ID}/{Alias}
|
||||||
|
*/
|
||||||
|
const static std::string PREPARED_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION_ALIAS = "insertFreelancerFileSubmissionAlias";
|
||||||
|
const static std::string SQL_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION_ALIAS = "insert into aliasroutes (aliasname, freelancerid, route, routeparameter) values($3, $1, $2, 'FILESUBMISSION');";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Name and Statement for prepared statement to delete a submission based on freelancer email and filename
|
* Name and Statement for prepared statement to delete a submission based on freelancer email and filename
|
||||||
*/
|
*/
|
||||||
@ -320,6 +334,8 @@ namespace DatabaseStatementConstCollection {
|
|||||||
const static int ID_DELETE_FREELANCER_FILE_SUBMISSION = 40;
|
const static int ID_DELETE_FREELANCER_FILE_SUBMISSION = 40;
|
||||||
const static int ID_PRUGE_FREELANCER_FILE_SUBMISSION = 41;
|
const static int ID_PRUGE_FREELANCER_FILE_SUBMISSION = 41;
|
||||||
const static int ID_INSERT_FREELANCER_FILE_SUBMISSION = 42;
|
const static int ID_INSERT_FREELANCER_FILE_SUBMISSION = 42;
|
||||||
|
const static int ID_SELECT_FREELANCER_FILE_SUBMISSION_ALIAS_PATH = 43;
|
||||||
|
const static int ID_INSERT_FREELANCER_FILE_SUBMISSION_ALIAS = 44;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -369,7 +385,9 @@ namespace DatabaseStatementConstCollection {
|
|||||||
{PREPARED_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_PATH, SQL_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_PATH},
|
{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_DELETE_FREELANCER_FILE_SUBMISSION, SQL_STATEMENT_DELETE_FREELANCER_FILE_SUBMISSION_PATH},
|
||||||
{PREPARED_STATEMENT_PRUGE_FREELANCER_FILE_SUBMISSION, SQL_STATEMENT_PRUGE_FREELANCER_FILE_SUBMISSION},
|
{PREPARED_STATEMENT_PRUGE_FREELANCER_FILE_SUBMISSION, SQL_STATEMENT_PRUGE_FREELANCER_FILE_SUBMISSION},
|
||||||
{PREPARED_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION, SQL_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION}
|
{PREPARED_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION, SQL_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION},
|
||||||
|
{PREPARED_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_ALIAS_PATH, SQL_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_ALIAS_PATH},
|
||||||
|
{PREPARED_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION_ALIAS, SQL_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION_ALIAS}
|
||||||
};
|
};
|
||||||
/*
|
/*
|
||||||
* Easy access to prepared statement name via int
|
* Easy access to prepared statement name via int
|
||||||
@ -417,7 +435,9 @@ namespace DatabaseStatementConstCollection {
|
|||||||
{ID_SELECT_FREELANCER_FILE_SUBMISSION_PATH, PREPARED_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_PATH},
|
{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_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}
|
{ID_INSERT_FREELANCER_FILE_SUBMISSION, PREPARED_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION},
|
||||||
|
{ID_SELECT_FREELANCER_FILE_SUBMISSION_ALIAS_PATH, PREPARED_STATEMENT_SELECT_FREELANCER_FILE_SUBMISSION_ALIAS_PATH},
|
||||||
|
{ID_INSERT_FREELANCER_FILE_SUBMISSION_ALIAS, PREPARED_STATEMENT_INSERT_FREELANCER_FILE_SUBMISSION_ALIAS}
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
32
src/main.cpp
32
src/main.cpp
@ -1160,6 +1160,38 @@ int main(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Serves a freelancers file based on alias without login validation
|
||||||
|
*/
|
||||||
|
CROW_ROUTE(app, "/commissionSubmission/<int>/<string>").methods(crow::HTTPMethod::GET)
|
||||||
|
([&, configuration](const crow::request &postRequest, const int& freelancerID, const string& alias) {
|
||||||
|
pqxx::connection databaseConnection(configuration.databaseConnectionString);
|
||||||
|
Database::prepareStatement(databaseConnection, ID_SELECT_FREELANCER_FILE_SUBMISSION_PATH);
|
||||||
|
|
||||||
|
string submissionFilePath = Utilities::getFreelancerSubmissionAlias(configuration, freelancerID, alias);
|
||||||
|
|
||||||
|
if (submissionFilePath.empty())
|
||||||
|
return crow::response(404, "File does not exist.");
|
||||||
|
|
||||||
|
switch (Utilities::validateFileReadAccess(submissionFilePath)) {
|
||||||
|
case 1:
|
||||||
|
return crow::response(404, "File does not exist.");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
return crow::response(500, "Filesystem Permission Error.");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
return crow::response(400, "Invalid file request was executed.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
crow::response fileResponse;
|
||||||
|
fileResponse.code = 200;
|
||||||
|
fileResponse.set_static_file_info(submissionFilePath);
|
||||||
|
|
||||||
|
return fileResponse;
|
||||||
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Page for freelancer to view existing submissions
|
* Page for freelancer to view existing submissions
|
||||||
*/
|
*/
|
||||||
|
@ -516,6 +516,26 @@ namespace Utilities {
|
|||||||
return resultJsonAlias;
|
return resultJsonAlias;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Gets The Alias of a freelancers Submission
|
||||||
|
* takes configuration the freelancerID and the Alias
|
||||||
|
* returns file path
|
||||||
|
*/
|
||||||
|
std::string getFreelancerSubmissionAlias(const Utilities::config& configuration, const int freelancerID, const std::string& alias) {
|
||||||
|
std::string filePath;
|
||||||
|
std::string decodedAlias = alias;
|
||||||
|
decodeString(decodedAlias);
|
||||||
|
std::string idAlias = std::to_string(freelancerID);
|
||||||
|
idAlias.append("/");
|
||||||
|
idAlias.append(decodedAlias);
|
||||||
|
pqxx::connection databaseConnection(configuration.databaseConnectionString);
|
||||||
|
Database::prepareStatement(databaseConnection, ID_SELECT_FREELANCER_FILE_SUBMISSION_ALIAS_PATH);
|
||||||
|
pqxx::result resultAlias = Database::executePreparedStatement_SELECT_FREELANCER_FILE_SUBMISSION_ALIAS_PATH(databaseConnection, freelancerID, idAlias);
|
||||||
|
if (!resultAlias.empty())
|
||||||
|
filePath = resultAlias.at(0).at(0).c_str();
|
||||||
|
return filePath;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Gets The freelancer listing
|
* Gets The freelancer listing
|
||||||
* takes configuration
|
* takes configuration
|
||||||
|
Reference in New Issue
Block a user