Passing of unrooted URL into RequestContext()

This change doesn't make much sense on its own - the real goal is to
prepare some ground for easier implementation of URI-encoding of the root
location.
This commit is contained in:
Veloman Yunkan 2023-02-08 21:07:01 +01:00
parent a807ce27f1
commit 71a66e0528
3 changed files with 27 additions and 25 deletions

View File

@ -94,6 +94,22 @@ inline std::string normalizeRootUrl(std::string rootUrl)
return rootUrl.empty() ? rootUrl : "/" + rootUrl; return rootUrl.empty() ? rootUrl : "/" + rootUrl;
} }
std::string
fullURL2LocalURL(const std::string& full_url, const std::string& rootLocation)
{
if (rootLocation.empty()) {
// nothing special to handle.
return full_url;
} else if (full_url == rootLocation) {
return "/";
} else if (full_url.size() > rootLocation.size() &&
full_url.substr(0, rootLocation.size()+1) == rootLocation + "/") {
return full_url.substr(rootLocation.size());
} else {
return "";
}
}
Filter get_search_filter(const RequestContext& request, const std::string& prefix="") Filter get_search_filter(const RequestContext& request, const std::string& prefix="")
{ {
auto filter = kiwix::Filter().valid(true).local(true); auto filter = kiwix::Filter().valid(true).local(true);
@ -494,7 +510,7 @@ static MHD_Result staticHandlerCallback(void* cls,
} }
MHD_Result InternalServer::handlerCallback(struct MHD_Connection* connection, MHD_Result InternalServer::handlerCallback(struct MHD_Connection* connection,
const char* url, const char* fullUrl,
const char* method, const char* method,
const char* version, const char* version,
const char* upload_data, const char* upload_data,
@ -505,8 +521,10 @@ MHD_Result InternalServer::handlerCallback(struct MHD_Connection* connection,
if (m_verbose.load() ) { if (m_verbose.load() ) {
printf("======================\n"); printf("======================\n");
printf("Requesting : \n"); printf("Requesting : \n");
printf("full_url : %s\n", url); printf("full_url : %s\n", fullUrl);
} }
const auto url = fullURL2LocalURL(fullUrl, m_root);
RequestContext request(connection, m_root, url, method, version); RequestContext request(connection, m_root, url, method, version);
if (m_verbose.load() ) { if (m_verbose.load() ) {
@ -527,7 +545,7 @@ MHD_Result InternalServer::handlerCallback(struct MHD_Connection* connection,
printf("========== INTERNAL ERROR !! ============\n"); printf("========== INTERNAL ERROR !! ============\n");
if (!m_verbose.load()) { if (!m_verbose.load()) {
printf("Requesting : \n"); printf("Requesting : \n");
printf("full_url : %s\n", url); printf("full_url : %s\n", fullUrl);
request.print_debug_info(); request.print_debug_info();
} }
} }

View File

@ -49,32 +49,16 @@ RequestMethod str2RequestMethod(const std::string& method) {
else return RequestMethod::OTHER; else return RequestMethod::OTHER;
} }
std::string
fullURL2LocalURL(const std::string& full_url, const std::string& rootLocation)
{
if (rootLocation.empty()) {
// nothing special to handle.
return full_url;
} else if (full_url == rootLocation) {
return "/";
} else if (full_url.size() > rootLocation.size() &&
full_url.substr(0, rootLocation.size()+1) == rootLocation + "/") {
return full_url.substr(rootLocation.size());
} else {
return "";
}
}
} // unnamed namespace } // unnamed namespace
RequestContext::RequestContext(struct MHD_Connection* connection, RequestContext::RequestContext(struct MHD_Connection* connection,
std::string _rootLocation, const std::string& _rootLocation,
const std::string& _url, const std::string& unrootedUrl,
const std::string& _method, const std::string& _method,
const std::string& version) : const std::string& version) :
rootLocation(_rootLocation), rootLocation(_rootLocation),
full_url(_url), full_url(_rootLocation + unrootedUrl),
url(fullURL2LocalURL(_url, _rootLocation)), url(unrootedUrl),
method(str2RequestMethod(_method)), method(str2RequestMethod(_method)),
version(version), version(version),
requestIndex(s_requestIndex++), requestIndex(s_requestIndex++),

View File

@ -57,8 +57,8 @@ class IndexError: public std::runtime_error {};
class RequestContext { class RequestContext {
public: // functions public: // functions
RequestContext(struct MHD_Connection* connection, RequestContext(struct MHD_Connection* connection,
std::string rootLocation, const std::string& rootLocation,
const std::string& url, const std::string& unrootedUrl,
const std::string& method, const std::string& method,
const std::string& version); const std::string& version);
~RequestContext(); ~RequestContext();