From 7f277994a99545e43fa1f25ad1bf6d4d32a863de Mon Sep 17 00:00:00 2001 From: Tina_Azure <-> Date: Thu, 27 Apr 2023 00:29:50 +0200 Subject: [PATCH] pasword reset request route handler --- src/main.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/main.cpp b/src/main.cpp index 70c304c..38fc85d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -279,6 +279,44 @@ int main(int argc, char *argv[]) { return page.render(); }); + /* + * Page for freelancer password reset fulfilment + */ + CROW_ROUTE(app, "/freelancer/login/passwordreset/fulfilment") + ([&, configuration](const crow::request& postRequest ) { + crow::mustache::context ctx; + string postRequestBody = postRequest.body; + Utilities::decodeString(postRequestBody); + vector splitPostRequestBody = Utilities::splitStringIntoVector(postRequestBody, '&'); + string email; + for (const string& item : splitPostRequestBody) { + vector splitItem = Utilities::splitStringIntoVector(item, '='); + if (splitItem.at(0) == "freelanceremail") + email = splitItem.at(1); + } + + if (!email.empty()) { + pqxx::connection databaseConnection(configuration.databaseConnectionString); + pqxx::result checkFreelancerExists = Database::executePreparedStatement_SELECT_CHECK_EMAIL_EXISTS(databaseConnection, email); + int checkFreelancerExistsExtracted = stoi(checkFreelancerExists.at(0).at(0).c_str()); + if (checkFreelancerExistsExtracted == 1) { + std::string passwordResetKey = Utilities::generateRandomHashValueSHA256(); + + pqxx::result checkFreelancerResetKeyExists = Database::executePreparedStatement_SELECT_CHECK_FREELANCER_RESET_KEY(databaseConnection, email); + int checkFreelancerResetKeyExistsExtracted = stoi(checkFreelancerResetKeyExists.at(0).at(0).c_str()); + if (checkFreelancerResetKeyExistsExtracted > 0) + Database::executePreparedStatement_DELETE_FREELANCER_RESET_KEY(databaseConnection, email); + + Database::executePreparedStatement_INSERT_FREELANCER_RESET_KEY(databaseConnection, email, passwordResetKey); + + if (Utilities::sendPasswordResetEmail(configuration, email, passwordResetKey) == 0) + ctx["passwordresetmailsent"] = true; + } + ctx["resetemail"] = email; + } + auto page = crow::mustache::load("freelancer_Login_PasswordReset.html"); + return page.render(ctx); + }); /* * Page for freelancer to log in fulfillment */