Changed the signature of Response::build_404()

Now Response::build_404() takes the URL instead of the entire
RequestContext object. An empty url suppresses the

 The requested URL "url" was not found on this server.

part of the error text.
This commit is contained in:
Veloman Yunkan 2021-12-11 21:36:24 +04:00 committed by Matthieu Gautier
parent f7b853373c
commit d8c525289b
4 changed files with 21 additions and 21 deletions

View File

@ -271,7 +271,7 @@ std::unique_ptr<Response> InternalServer::handle_request(const RequestContext& r
{
try {
if (! request.is_valid_url())
return Response::build_404(*this, request, "", "");
return Response::build_404(*this, request.get_full_url(), "", "");
const ETag etag = get_matching_if_none_match_etag(request);
if ( etag )
@ -394,11 +394,11 @@ std::unique_ptr<Response> InternalServer::handle_meta(const RequestContext& requ
meta_name = request.get_argument("name");
archive = mp_library->getArchiveById(bookId);
} catch (const std::out_of_range& e) {
return Response::build_404(*this, request, bookName, "");
// error handled by the archive == nullptr check below
}
if (archive == nullptr) {
return Response::build_404(*this, request, bookName, "");
return Response::build_404(*this, request.get_full_url(), bookName, "");
}
std::string content;
@ -425,7 +425,7 @@ std::unique_ptr<Response> InternalServer::handle_meta(const RequestContext& requ
} else if (const unsigned illustrationSize = parseIllustration(meta_name)) {
getArchiveFavicon(*archive, illustrationSize, content, mimeType);
} else {
return Response::build_404(*this, request, bookName, "");
return Response::build_404(*this, request.get_full_url(), bookName, "");
}
auto response = ContentResponse::build(*this, content, mimeType);
@ -452,7 +452,7 @@ std::unique_ptr<Response> InternalServer::handle_suggest(const RequestContext& r
queryString = request.get_argument("term");
archive = mp_library->getArchiveById(bookId);
} catch (const std::out_of_range&) {
return Response::build_404(*this, request, bookName, "");
return Response::build_404(*this, "", bookName, "");
}
auto start = 0;
@ -470,7 +470,7 @@ std::unique_ptr<Response> InternalServer::handle_suggest(const RequestContext& r
}
if (archive == nullptr) {
return Response::build_404(*this, request, bookName, "");
return Response::build_404(*this, "", bookName, "");
}
if (m_verbose.load()) {
@ -532,7 +532,7 @@ std::unique_ptr<Response> InternalServer::handle_skin(const RequestContext& requ
response->set_cacheable();
return std::move(response);
} catch (const ResourceNotFound& e) {
return Response::build_404(*this, request, "", "");
return Response::build_404(*this, request.get_full_url(), "", "");
}
}
@ -673,7 +673,7 @@ std::unique_ptr<Response> InternalServer::handle_random(const RequestContext& re
if (archive == nullptr) {
const std::string error_details = "No such book: " + bookName;
return Response::build_404(*this, request, bookName, "", error_details);
return Response::build_404(*this, "", bookName, "", error_details);
}
try {
@ -681,7 +681,7 @@ std::unique_ptr<Response> InternalServer::handle_random(const RequestContext& re
return build_redirect(bookName, getFinalItem(*archive, entry));
} catch(zim::EntryNotFound& e) {
const std::string error_details = "Oops! Failed to pick a random article :(";
return Response::build_404(*this, request, bookName, getArchiveTitle(*archive), error_details);
return Response::build_404(*this, "", bookName, getArchiveTitle(*archive), error_details);
}
}
@ -693,7 +693,7 @@ std::unique_ptr<Response> InternalServer::handle_captured_external(const Request
} catch (const std::out_of_range& e) {}
if (source.empty())
return Response::build_404(*this, request, "", "");
return Response::build_404(*this, request.get_full_url(), "", "");
auto data = get_default_data();
data.set("source", source);
@ -712,7 +712,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog(const RequestContext& r
host = request.get_header("Host");
url = request.get_url_part(1);
} catch (const std::out_of_range&) {
return Response::build_404(*this, request, "", "");
return Response::build_404(*this, request.get_full_url(), "", "");
}
if (url == "v2") {
@ -720,7 +720,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog(const RequestContext& r
}
if (url != "searchdescription.xml" && url != "root.xml" && url != "search") {
return Response::build_404(*this, request, "", "");
return Response::build_404(*this, request.get_full_url(), "", "");
}
if (url == "searchdescription.xml") {
@ -856,7 +856,7 @@ std::unique_ptr<Response> InternalServer::handle_content(const RequestContext& r
std::string searchURL = m_root+"/search?pattern="+pattern; // Make a full search on the entire library.
const std::string details = searchSuggestionHTML(searchURL, kiwix::urlDecode(pattern));
return Response::build_404(*this, request, bookName, "", details);
return Response::build_404(*this, request.get_full_url(), bookName, "", details);
}
auto urlStr = request.get_url().substr(bookName.size()+1);
@ -889,7 +889,7 @@ std::unique_ptr<Response> InternalServer::handle_content(const RequestContext& r
std::string searchURL = m_root+"/search?content="+bookName+"&pattern="+pattern; // Make a search on this specific book only.
const std::string details = searchSuggestionHTML(searchURL, kiwix::urlDecode(pattern));
return Response::build_404(*this, request, bookName, getArchiveTitle(*archive), details);
return Response::build_404(*this, request.get_full_url(), bookName, getArchiveTitle(*archive), details);
}
}

View File

@ -43,7 +43,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2(const RequestContext
try {
url = request.get_url_part(2);
} catch (const std::out_of_range&) {
return Response::build_404(*this, request, "", "");
return Response::build_404(*this, request.get_full_url(), "", "");
}
if (url == "root.xml") {
@ -67,7 +67,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2(const RequestContext
} else if (url == "languages") {
return handle_catalog_v2_languages(request);
} else {
return Response::build_404(*this, request, "", "");
return Response::build_404(*this, request.get_full_url(), "", "");
}
}
@ -108,7 +108,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2_complete_entry(const
try {
mp_library->getBookById(entryId);
} catch (const std::out_of_range&) {
return Response::build_404(*this, request, "", "");
return Response::build_404(*this, request.get_full_url(), "", "");
}
OPDSDumper opdsDumper(mp_library);

View File

@ -83,11 +83,11 @@ std::unique_ptr<Response> Response::build_304(const InternalServer& server, cons
return response;
}
std::unique_ptr<Response> Response::build_404(const InternalServer& server, const RequestContext& request, const std::string& bookName, const std::string& bookTitle, const std::string& details)
std::unique_ptr<Response> Response::build_404(const InternalServer& server, const std::string& url, const std::string& bookName, const std::string& bookTitle, const std::string& details)
{
MustacheData results;
if ( request.get_url() != "/random" ) {
results.set("url", request.get_full_url());
if ( !url.empty() ) {
results.set("url", url);
}
results.set("details", details);

View File

@ -47,7 +47,7 @@ class Response {
static std::unique_ptr<Response> build(const InternalServer& server);
static std::unique_ptr<Response> build_304(const InternalServer& server, const ETag& etag);
static std::unique_ptr<Response> build_404(const InternalServer& server, const RequestContext& request, const std::string& bookName, const std::string& bookTitle, const std::string& details="");
static std::unique_ptr<Response> build_404(const InternalServer& server, const std::string& url, const std::string& bookName, const std::string& bookTitle, const std::string& details="");
static std::unique_ptr<Response> build_416(const InternalServer& server, size_t resourceLength);
static std::unique_ptr<Response> build_500(const InternalServer& server, const std::string& msg);
static std::unique_ptr<Response> build_redirect(const InternalServer& server, const std::string& redirectUrl);