mirror of https://github.com/kiwix/libkiwix.git
Enter UrlNotFoundMsg iomanipulator-like class
This commit is contained in:
parent
df98c58d07
commit
668063205c
|
@ -387,6 +387,25 @@ SuggestionsList_t getSuggestions(SuggestionSearcherCache& cache, const zim::Arch
|
|||
return suggestions;
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
class UrlNotFoundMsg {};
|
||||
|
||||
const UrlNotFoundMsg urlNotFoundMsg;
|
||||
|
||||
ContentResponseBlueprint&& operator+(ContentResponseBlueprint&& crb,
|
||||
UrlNotFoundMsg /*unused*/)
|
||||
{
|
||||
const std::string requestUrl = crb.m_request.get_full_url();
|
||||
kainjow::mustache::mustache msgTmpl(R"(The requested URL "{{url}}" was not found on this server.)");
|
||||
const auto urlNotFoundMsgText = msgTmpl.render({"url", requestUrl});
|
||||
crb.m_data["details"].push_back({"p", urlNotFoundMsgText});
|
||||
return std::move(crb);
|
||||
}
|
||||
|
||||
|
||||
} // unnamed namespace
|
||||
|
||||
std::unique_ptr<Response> InternalServer::handle_suggest(const RequestContext& request)
|
||||
{
|
||||
|
@ -658,7 +677,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog(const RequestContext& r
|
|||
url = request.get_url_part(1);
|
||||
} catch (const std::out_of_range&) {
|
||||
return make404Response(*this, request)
|
||||
+ make404ResponseData(request.get_full_url());
|
||||
+ urlNotFoundMsg;
|
||||
}
|
||||
|
||||
if (url == "v2") {
|
||||
|
@ -666,7 +685,8 @@ 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.get_full_url());
|
||||
return make404Response(*this, request)
|
||||
+ urlNotFoundMsg;
|
||||
}
|
||||
|
||||
if (url == "searchdescription.xml") {
|
||||
|
|
|
@ -112,11 +112,14 @@ std::unique_ptr<ContentResponse> Response::build_404(const InternalServer& serve
|
|||
ContentResponseBlueprint make404Response(const InternalServer& server,
|
||||
const RequestContext& request)
|
||||
{
|
||||
return ContentResponseBlueprint(&server,
|
||||
&request,
|
||||
MHD_HTTP_NOT_FOUND,
|
||||
"text/html",
|
||||
RESOURCE::templates::_404_html);
|
||||
auto crb = ContentResponseBlueprint(&server,
|
||||
&request,
|
||||
MHD_HTTP_NOT_FOUND,
|
||||
"text/html",
|
||||
RESOURCE::templates::_404_html);
|
||||
|
||||
kainjow::mustache::list emptyList;
|
||||
return crb + kainjow::mustache::object{{"details", emptyList}};
|
||||
}
|
||||
|
||||
std::unique_ptr<Response> Response::build_416(const InternalServer& server, size_t resourceLength)
|
||||
|
|
|
@ -166,7 +166,7 @@ public: // functions
|
|||
return operator std::unique_ptr<ContentResponse>();
|
||||
}
|
||||
|
||||
private: // data
|
||||
public: //data
|
||||
const InternalServer& m_server;
|
||||
const RequestContext& m_request;
|
||||
const int m_httpStatusCode;
|
||||
|
|
|
@ -549,9 +549,6 @@ TEST_F(ServerTest, 404WithBodyTesting)
|
|||
<p>
|
||||
The requested URL "/ROOT/catalog/" was not found on this server.
|
||||
</p>
|
||||
<p>
|
||||
//EOLWHITESPACEMARKER
|
||||
</p>
|
||||
)" },
|
||||
|
||||
{ /* url */ "/ROOT/catalog/invalid_endpoint",
|
||||
|
@ -560,9 +557,6 @@ TEST_F(ServerTest, 404WithBodyTesting)
|
|||
<p>
|
||||
The requested URL "/ROOT/catalog/invalid_endpoint" was not found on this server.
|
||||
</p>
|
||||
<p>
|
||||
//EOLWHITESPACEMARKER
|
||||
</p>
|
||||
)" },
|
||||
|
||||
{ /* url */ "/ROOT/invalid-book/whatever",
|
||||
|
|
Loading…
Reference in New Issue