#include "redirect.h" #include #include #include #include #include #include #include #include #include using namespace std::string_literals; namespace bp = boost::process; namespace fs = std::filesystem; namespace { // Used to return errors by generating response page and HTTP status code std::string HttpStatus(std::string status, std::string message, std::function& SetResponseHeader) { SetResponseHeader("status", status); SetResponseHeader("content_type", "text/html"); return status + " " + message; } } // anonymous namespace std::string redirect_plugin::name() { return "redirect"; } redirect_plugin::redirect_plugin() { //std::cout << "Plugin constructor" << std::endl; } redirect_plugin::~redirect_plugin() { //std::cout << "Plugin destructor" << std::endl; } std::string redirect_plugin::generate_page( std::function& GetServerParam, std::function& GetRequestParam, // request including body (POST...) std::function& SetResponseHeader // to be added to result string ) { try { std::string new_location{GetRequestParam("doc_root")}; std::string status_code{GetRequestParam("STATUS_CODE")}; std::string message{GetRequestParam("MESSAGE")}; SetResponseHeader("location", new_location); return HttpStatus(status_code, message, SetResponseHeader); } catch (const std::exception& ex) { return HttpStatus("500", "Unknown Error: "s + ex.what(), SetResponseHeader); } } bool redirect_plugin::has_own_authentication() { return false; }