From 29f3339f2c3050d65087342fe879b19793bedd3c Mon Sep 17 00:00:00 2001 From: Hepatica Date: Fri, 9 Aug 2024 22:56:02 +0200 Subject: [PATCH] Adjust publish controller --- SpCloudMain/Controllers/PublishController.cpp | 146 +++++++++--------- SpCloudMain/SpCloudMain.cpp | 2 +- 2 files changed, 74 insertions(+), 74 deletions(-) diff --git a/SpCloudMain/Controllers/PublishController.cpp b/SpCloudMain/Controllers/PublishController.cpp index ca79e22..e644563 100644 --- a/SpCloudMain/Controllers/PublishController.cpp +++ b/SpCloudMain/Controllers/PublishController.cpp @@ -1,4 +1,4 @@ -//#include "httplib.h" +#include "../httplib.h" //#include //#include "Service/AuthorizationService.cpp" //#include "Service/FileProcessingService.cpp" @@ -14,82 +14,82 @@ private: FileProcessingService file_processing; - std::string publish_app_path = "C:/Temps/"; + std::string publish_app_path = "C:/Temps/";//Todo change to linux path public: - PublishController(/*httplib::Server& svr,*/ AuthorizationService authorization, FileProcessingService file_processing) + PublishController(httplib::Server& svr, AuthorizationService authorization, FileProcessingService file_processing) { - /*this->authorization = authorization; + this->authorization = authorization; - this->file_processing = file_processing;*/ + this->file_processing = file_processing; - //svr.Post("/publish", [this](const httplib::Request& req, httplib::Response& res) - // { - // this->process_publish(req, res); - // //httplib::Headers test = req.headers;//Todo add processing header for authorization layer - // }); + svr.Post("/publish", [this](const httplib::Request& req, httplib::Response& res) + { + this->process_publish(req, res); + //httplib::Headers test = req.headers;//Todo add processing header for authorization layer + }); } -// -//private: -// void process_publish(const httplib::Request& req, httplib::Response& res) -// { -// if (this->authorization.is_user_authorized()) -// { -// const auto& content = req.files.begin()->second.content; -// -// const auto& filename = this->publish_app_path + req.files.begin()->second.filename; -// -// if (filename.size() >= 4 && filename.substr(filename.size() - 4) == ".rar") { -// if (file_processing.save_file(filename, content)) { -// -// std::string random_string = generate_random_string(20);//Todo think about change -// -// file_processing.unzip(filename, this->publish_app_path + random_string); -// -// this->dotnet_publish(this->publish_app_path + random_string); -// -// res.set_content("File uploaded successfully: " + filename, "text/plain"); -// } -// else { -// res.status = 500; -// res.set_content("Failed to save file, please ensure you are putting rar file" -// + filename, "text/plain"); -// } -// } -// else { -// res.status = 400; -// res.set_content("Invalid file type. Only .rar files are allowed.", -// "text/plain"); -// } -// } -// else -// { -// //Todo add logging and exiting from function with bead request -// } -// } -// -// void dotnet_publish(const std::string& path) -// { -// std::string dll_file_name = file_processing.find_file_by_suffix(path, "dll"); -// -// std::string command = R"(dotnet )" + path + "/" + dll_file_name; -// -// std::thread commandThread(&CommandService::execute_command, command); -// -// commandThread.detach(); -// } -// -// static std::string generate_random_string(size_t length, const std::string& char_set = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") { -// std::random_device rd; -// std::mt19937 generator(rd()); -// std::uniform_int_distribution<> distribution(0, char_set.size() - 1); -// -// std::string random_string; -// for (size_t i = 0; i < length; ++i) { -// char random_char = char_set[distribution(generator)]; -// random_string += random_char; -// } -// -// return random_string; -// } + + private: + void process_publish(const httplib::Request& req, httplib::Response& res) + { + if (this->authorization.is_user_authorized()) + { + const auto& content = req.files.begin()->second.content; + + const auto& filename = this->publish_app_path + req.files.begin()->second.filename; + + if (filename.size() >= 4 && filename.substr(filename.size() - 4) == ".rar") { + if (file_processing.save_file(filename, content)) { + + std::string random_string = generate_random_string(20);//Todo think about change + + file_processing.unzip(filename, this->publish_app_path + random_string); + + this->dotnet_publish(this->publish_app_path + random_string); + + res.set_content("File uploaded successfully: " + filename, "text/plain"); + } + else { + res.status = 500; + res.set_content("Failed to save file, please ensure you are putting rar file" + + filename, "text/plain"); + } + } + else { + res.status = 400; + res.set_content("Invalid file type. Only .rar files are allowed.", + "text/plain"); + } + } + else + { + //Todo add logging and exiting from function with bead request + } + } + + void dotnet_publish(const std::string& path) + { + std::string dll_file_name = file_processing.find_file_by_suffix(path, "dll"); + + std::string command = R"(dotnet )" + path + "/" + dll_file_name; + + std::thread commandThread(&CommandService::execute_command, command); + + commandThread.detach(); + } + + static std::string generate_random_string(size_t length, const std::string& char_set = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") { + std::random_device rd; + std::mt19937 generator(rd()); + std::uniform_int_distribution<> distribution(0, char_set.size() - 1); + + std::string random_string; + for (size_t i = 0; i < length; ++i) { + char random_char = char_set[distribution(generator)]; + random_string += random_char; + } + + return random_string; + } }; \ No newline at end of file diff --git a/SpCloudMain/SpCloudMain.cpp b/SpCloudMain/SpCloudMain.cpp index fba4352..a3a170a 100644 --- a/SpCloudMain/SpCloudMain.cpp +++ b/SpCloudMain/SpCloudMain.cpp @@ -32,7 +32,7 @@ int main() //PublishController publish_controller(svr, authorization_service, file_processing); - PublishController publish_controller(/*svr,*/ authorization_service, file_processing); + PublishController publish_controller(svr, authorization_service, file_processing); std::cout << "Server is running at http://localhost:8080" << '\n';