mirror of https://github.com/kiwix/libkiwix.git
Got rid of raw mode in response generation
This commit is contained in:
parent
6cc677b8ad
commit
b81cb3a8e9
|
@ -727,8 +727,7 @@ std::unique_ptr<Response> InternalServer::handle_skin(const RequestContext& requ
|
||||||
auto response = ContentResponse::build(
|
auto response = ContentResponse::build(
|
||||||
*this,
|
*this,
|
||||||
getResource(resourceName),
|
getResource(resourceName),
|
||||||
getMimeTypeForFile(resourceName),
|
getMimeTypeForFile(resourceName));
|
||||||
/*raw=*/true);
|
|
||||||
response->set_cacheable();
|
response->set_cacheable();
|
||||||
return std::move(response);
|
return std::move(response);
|
||||||
} catch (const ResourceNotFound& e) {
|
} catch (const ResourceNotFound& e) {
|
||||||
|
@ -818,11 +817,9 @@ std::unique_ptr<Response> InternalServer::handle_search(const RequestContext& re
|
||||||
renderer.setSearchProtocolPrefix(m_root + "/search");
|
renderer.setSearchProtocolPrefix(m_root + "/search");
|
||||||
renderer.setPageLength(pageLength);
|
renderer.setPageLength(pageLength);
|
||||||
if (request.get_requested_format() == "xml") {
|
if (request.get_requested_format() == "xml") {
|
||||||
return ContentResponse::build(*this, renderer.getXml(), "application/rss+xml; charset=utf-8",
|
return ContentResponse::build(*this, renderer.getXml(), "application/rss+xml; charset=utf-8");
|
||||||
/*raw =*/true);
|
|
||||||
}
|
}
|
||||||
auto response = ContentResponse::build(*this, renderer.getHtml(), "text/html; charset=utf-8",
|
auto response = ContentResponse::build(*this, renderer.getHtml(), "text/html; charset=utf-8");
|
||||||
/*raw =*/false);
|
|
||||||
// XXX: Now this has to be handled by the iframe-based viewer which
|
// XXX: Now this has to be handled by the iframe-based viewer which
|
||||||
// XXX: has to resolve if the book selection resulted in a single book.
|
// XXX: has to resolve if the book selection resulted in a single book.
|
||||||
/*
|
/*
|
||||||
|
@ -952,8 +949,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog(const RequestContext& r
|
||||||
auto response = ContentResponse::build(
|
auto response = ContentResponse::build(
|
||||||
*this,
|
*this,
|
||||||
opdsDumper.dumpOPDSFeed(bookIdsToDump, request.get_query()),
|
opdsDumper.dumpOPDSFeed(bookIdsToDump, request.get_query()),
|
||||||
"application/atom+xml; profile=opds-catalog; kind=acquisition; charset=utf-8",
|
"application/atom+xml; profile=opds-catalog; kind=acquisition; charset=utf-8");
|
||||||
/*raw*/ true);
|
|
||||||
return std::move(response);
|
return std::move(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1098,13 +1094,13 @@ std::unique_ptr<Response> InternalServer::handle_raw(const RequestContext& reque
|
||||||
try {
|
try {
|
||||||
if (kind == "meta") {
|
if (kind == "meta") {
|
||||||
auto item = archive->getMetadataItem(itemPath);
|
auto item = archive->getMetadataItem(itemPath);
|
||||||
return ItemResponse::build(*this, request, item, /*raw=*/true);
|
return ItemResponse::build(*this, request, item);
|
||||||
} else {
|
} else {
|
||||||
auto entry = archive->getEntryByPath(itemPath);
|
auto entry = archive->getEntryByPath(itemPath);
|
||||||
if (entry.isRedirect()) {
|
if (entry.isRedirect()) {
|
||||||
return build_redirect(bookName, entry.getItem(true));
|
return build_redirect(bookName, entry.getItem(true));
|
||||||
}
|
}
|
||||||
return ItemResponse::build(*this, request, entry.getItem(), /*raw=*/true);
|
return ItemResponse::build(*this, request, entry.getItem());
|
||||||
}
|
}
|
||||||
} catch (zim::EntryNotFound& e ) {
|
} catch (zim::EntryNotFound& e ) {
|
||||||
if (m_verbose.load()) {
|
if (m_verbose.load()) {
|
||||||
|
@ -1141,8 +1137,7 @@ std::unique_ptr<Response> InternalServer::handle_locally_customized_resource(con
|
||||||
|
|
||||||
return ContentResponse::build(*this,
|
return ContentResponse::build(*this,
|
||||||
resourceData,
|
resourceData,
|
||||||
crd.mimeType,
|
crd.mimeType);
|
||||||
/*raw=*/true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -183,8 +183,8 @@ class InternalServer {
|
||||||
std::unique_ptr<CustomizedResources> m_customizedResources;
|
std::unique_ptr<CustomizedResources> m_customizedResources;
|
||||||
|
|
||||||
friend std::unique_ptr<Response> Response::build(const InternalServer& server);
|
friend std::unique_ptr<Response> Response::build(const InternalServer& server);
|
||||||
friend std::unique_ptr<ContentResponse> ContentResponse::build(const InternalServer& server, const std::string& content, const std::string& mimetype, bool raw);
|
friend std::unique_ptr<ContentResponse> ContentResponse::build(const InternalServer& server, const std::string& content, const std::string& mimetype);
|
||||||
friend std::unique_ptr<Response> ItemResponse::build(const InternalServer& server, const RequestContext& request, const zim::Item& item, bool raw);
|
friend std::unique_ptr<Response> ItemResponse::build(const InternalServer& server, const RequestContext& request, const zim::Item& item);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,8 +103,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2_entries(const Reques
|
||||||
return ContentResponse::build(
|
return ContentResponse::build(
|
||||||
*this,
|
*this,
|
||||||
opdsFeed,
|
opdsFeed,
|
||||||
"application/atom+xml;profile=opds-catalog;kind=acquisition",
|
"application/atom+xml;profile=opds-catalog;kind=acquisition"
|
||||||
/*raw*/ true
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,8 +123,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2_complete_entry(const
|
||||||
return ContentResponse::build(
|
return ContentResponse::build(
|
||||||
*this,
|
*this,
|
||||||
opdsFeed,
|
opdsFeed,
|
||||||
"application/atom+xml;type=entry;profile=opds-catalog",
|
"application/atom+xml;type=entry;profile=opds-catalog"
|
||||||
/*raw*/ true
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,8 +135,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2_categories(const Req
|
||||||
return ContentResponse::build(
|
return ContentResponse::build(
|
||||||
*this,
|
*this,
|
||||||
opdsDumper.categoriesOPDSFeed(),
|
opdsDumper.categoriesOPDSFeed(),
|
||||||
"application/atom+xml;profile=opds-catalog;kind=navigation",
|
"application/atom+xml;profile=opds-catalog;kind=navigation"
|
||||||
/*raw*/ true
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,8 +147,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2_languages(const Requ
|
||||||
return ContentResponse::build(
|
return ContentResponse::build(
|
||||||
*this,
|
*this,
|
||||||
opdsDumper.languagesOPDSFeed(),
|
opdsDumper.languagesOPDSFeed(),
|
||||||
"application/atom+xml;profile=opds-catalog;kind=navigation",
|
"application/atom+xml;profile=opds-catalog;kind=navigation"
|
||||||
/*raw*/ true
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,8 +161,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2_illustration(const R
|
||||||
return ContentResponse::build(
|
return ContentResponse::build(
|
||||||
*this,
|
*this,
|
||||||
illustration->getData(),
|
illustration->getData(),
|
||||||
illustration->mimeType,
|
illustration->mimeType
|
||||||
/*raw*/ true
|
|
||||||
);
|
);
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
return HTTP404Response(*this, request)
|
return HTTP404Response(*this, request)
|
||||||
|
|
|
@ -233,11 +233,7 @@ HTTP500Response::HTTP500Response(const InternalServer& server,
|
||||||
|
|
||||||
std::unique_ptr<ContentResponse> HTTP500Response::generateResponseObject() const
|
std::unique_ptr<ContentResponse> HTTP500Response::generateResponseObject() const
|
||||||
{
|
{
|
||||||
// We want a 500 response to be a minimalistic one (so that the server doesn't
|
const std::string mimeType = "text/html;charset=utf-8";
|
||||||
// have to provide additional resources required for its proper rendering)
|
|
||||||
// ";raw=true" in the MIME-type below disables response decoration
|
|
||||||
// (see ContentResponse::contentDecorationAllowed())
|
|
||||||
const std::string mimeType = "text/html;charset=utf-8;raw=true";
|
|
||||||
auto r = ContentResponse::build(m_server, m_template, m_data, mimeType);
|
auto r = ContentResponse::build(m_server, m_template, m_data, mimeType);
|
||||||
r->set_code(m_httpStatusCode);
|
r->set_code(m_httpStatusCode);
|
||||||
return r;
|
return r;
|
||||||
|
@ -390,8 +386,7 @@ ContentResponse::ContentResponse(const std::string& root, bool verbose, const st
|
||||||
std::unique_ptr<ContentResponse> ContentResponse::build(
|
std::unique_ptr<ContentResponse> ContentResponse::build(
|
||||||
const InternalServer& server,
|
const InternalServer& server,
|
||||||
const std::string& content,
|
const std::string& content,
|
||||||
const std::string& mimetype,
|
const std::string& mimetype)
|
||||||
bool raw)
|
|
||||||
{
|
{
|
||||||
return std::unique_ptr<ContentResponse>(new ContentResponse(
|
return std::unique_ptr<ContentResponse>(new ContentResponse(
|
||||||
server.m_root,
|
server.m_root,
|
||||||
|
@ -407,7 +402,7 @@ std::unique_ptr<ContentResponse> ContentResponse::build(
|
||||||
const std::string& mimetype)
|
const std::string& mimetype)
|
||||||
{
|
{
|
||||||
auto content = render_template(template_str, data);
|
auto content = render_template(template_str, data);
|
||||||
return ContentResponse::build(server, content, mimetype, /*raw*/false);
|
return ContentResponse::build(server, content, mimetype);
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemResponse::ItemResponse(bool verbose, const zim::Item& item, const std::string& mimetype, const ByteRange& byterange) :
|
ItemResponse::ItemResponse(bool verbose, const zim::Item& item, const std::string& mimetype, const ByteRange& byterange) :
|
||||||
|
@ -420,14 +415,14 @@ ItemResponse::ItemResponse(bool verbose, const zim::Item& item, const std::strin
|
||||||
add_header(MHD_HTTP_HEADER_CONTENT_TYPE, m_mimeType);
|
add_header(MHD_HTTP_HEADER_CONTENT_TYPE, m_mimeType);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<Response> ItemResponse::build(const InternalServer& server, const RequestContext& request, const zim::Item& item, bool raw)
|
std::unique_ptr<Response> ItemResponse::build(const InternalServer& server, const RequestContext& request, const zim::Item& item)
|
||||||
{
|
{
|
||||||
const std::string mimetype = get_mime_type(item);
|
const std::string mimetype = get_mime_type(item);
|
||||||
auto byteRange = request.get_range().resolve(item.getSize());
|
auto byteRange = request.get_range().resolve(item.getSize());
|
||||||
const bool noRange = byteRange.kind() == ByteRange::RESOLVED_FULL_CONTENT;
|
const bool noRange = byteRange.kind() == ByteRange::RESOLVED_FULL_CONTENT;
|
||||||
if (noRange && is_compressible_mime_type(mimetype)) {
|
if (noRange && is_compressible_mime_type(mimetype)) {
|
||||||
// Return a contentResponse
|
// Return a contentResponse
|
||||||
auto response = ContentResponse::build(server, item.getData(), mimetype, raw);
|
auto response = ContentResponse::build(server, item.getData(), mimetype);
|
||||||
response->set_cacheable();
|
response->set_cacheable();
|
||||||
response->m_byteRange = byteRange;
|
response->m_byteRange = byteRange;
|
||||||
return std::move(response);
|
return std::move(response);
|
||||||
|
|
|
@ -89,8 +89,7 @@ class ContentResponse : public Response {
|
||||||
static std::unique_ptr<ContentResponse> build(
|
static std::unique_ptr<ContentResponse> build(
|
||||||
const InternalServer& server,
|
const InternalServer& server,
|
||||||
const std::string& content,
|
const std::string& content,
|
||||||
const std::string& mimetype,
|
const std::string& mimetype);
|
||||||
bool raw);
|
|
||||||
|
|
||||||
static std::unique_ptr<ContentResponse> build(
|
static std::unique_ptr<ContentResponse> build(
|
||||||
const InternalServer& server,
|
const InternalServer& server,
|
||||||
|
@ -205,7 +204,7 @@ private: // overrides
|
||||||
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);
|
||||||
static std::unique_ptr<Response> build(const InternalServer& server, const RequestContext& request, const zim::Item& item, bool raw = false);
|
static std::unique_ptr<Response> build(const InternalServer& server, const RequestContext& request, const zim::Item& item);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MHD_Response* create_mhd_response(const RequestContext& request);
|
MHD_Response* create_mhd_response(const RequestContext& request);
|
||||||
|
|
Loading…
Reference in New Issue