mirror of https://github.com/kiwix/libkiwix.git
Enter ContentResponseBlueprint
This commit is contained in:
parent
ff8da65c68
commit
df98c58d07
|
@ -657,7 +657,8 @@ std::unique_ptr<Response> InternalServer::handle_catalog(const RequestContext& r
|
||||||
host = request.get_header("Host");
|
host = request.get_header("Host");
|
||||||
url = request.get_url_part(1);
|
url = request.get_url_part(1);
|
||||||
} catch (const std::out_of_range&) {
|
} catch (const std::out_of_range&) {
|
||||||
return Response::build_404(*this, request.get_full_url());
|
return make404Response(*this, request)
|
||||||
|
+ make404ResponseData(request.get_full_url());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (url == "v2") {
|
if (url == "v2") {
|
||||||
|
|
|
@ -109,6 +109,15 @@ std::unique_ptr<ContentResponse> Response::build_404(const InternalServer& serve
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ContentResponseBlueprint make404Response(const InternalServer& server,
|
||||||
|
const RequestContext& request)
|
||||||
|
{
|
||||||
|
return ContentResponseBlueprint(&server,
|
||||||
|
&request,
|
||||||
|
MHD_HTTP_NOT_FOUND,
|
||||||
|
"text/html",
|
||||||
|
RESOURCE::templates::_404_html);
|
||||||
|
}
|
||||||
|
|
||||||
std::unique_ptr<Response> Response::build_416(const InternalServer& server, size_t resourceLength)
|
std::unique_ptr<Response> Response::build_416(const InternalServer& server, size_t resourceLength)
|
||||||
{
|
{
|
||||||
|
|
|
@ -133,6 +133,55 @@ std::unique_ptr<ContentResponse> withTaskbarInfo(const std::string& bookName,
|
||||||
const zim::Archive* archive,
|
const zim::Archive* archive,
|
||||||
std::unique_ptr<ContentResponse> r);
|
std::unique_ptr<ContentResponse> r);
|
||||||
|
|
||||||
|
class ContentResponseBlueprint
|
||||||
|
{
|
||||||
|
public: // functions
|
||||||
|
ContentResponseBlueprint(const InternalServer* server,
|
||||||
|
const RequestContext* request,
|
||||||
|
int httpStatusCode,
|
||||||
|
const std::string& mimeType,
|
||||||
|
const std::string& templateStr)
|
||||||
|
: m_server(*server)
|
||||||
|
, m_request(*request)
|
||||||
|
, m_httpStatusCode(httpStatusCode)
|
||||||
|
, m_mimeType(mimeType)
|
||||||
|
, m_template(templateStr)
|
||||||
|
{}
|
||||||
|
|
||||||
|
ContentResponseBlueprint& operator+(kainjow::mustache::data&& data)
|
||||||
|
{
|
||||||
|
this->m_data = std::move(data);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
operator std::unique_ptr<ContentResponse>() const
|
||||||
|
{
|
||||||
|
auto r = ContentResponse::build(m_server, m_template, m_data, m_mimeType);
|
||||||
|
r->set_code(m_httpStatusCode);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
operator std::unique_ptr<Response>() const
|
||||||
|
{
|
||||||
|
return operator std::unique_ptr<ContentResponse>();
|
||||||
|
}
|
||||||
|
|
||||||
|
private: // data
|
||||||
|
const InternalServer& m_server;
|
||||||
|
const RequestContext& m_request;
|
||||||
|
const int m_httpStatusCode;
|
||||||
|
const std::string m_mimeType;
|
||||||
|
const std::string m_template;
|
||||||
|
kainjow::mustache::data m_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
ContentResponseBlueprint make404Response(const InternalServer& server,
|
||||||
|
const RequestContext& request);
|
||||||
|
|
||||||
|
kainjow::mustache::data make404ResponseData(const std::string& url,
|
||||||
|
const std::string& details = "");
|
||||||
|
|
||||||
|
|
||||||
class ItemResponse : public Response {
|
class ItemResponse : public Response {
|
||||||
public:
|
public:
|
||||||
ItemResponse(bool verbose, const zim::Item& item, const std::string& mimetype, const ByteRange& byterange);
|
ItemResponse(bool verbose, const zim::Item& item, const std::string& mimetype, const ByteRange& byterange);
|
||||||
|
|
Loading…
Reference in New Issue