diff --git a/src/server/internalServer.cpp b/src/server/internalServer.cpp index 7f5bc624e..5c5ecbf30 100644 --- a/src/server/internalServer.cpp +++ b/src/server/internalServer.cpp @@ -96,16 +96,6 @@ inline std::string normalizeRootUrl(std::string rootUrl) return rootUrl.empty() ? rootUrl : "/" + rootUrl; } -unsigned parseIllustration(const std::string& s) -{ - int nw(0), nh(0), nEnd(0); - long int w(-1), h(-1); - if ( sscanf(s.c_str(), "Illustration_%n%ldx%n%ld@1%n)", &nw, &w, &nh, &h, &nEnd) == 2 - && nEnd == (int)s.size() && !isspace(s[nw]) && !isspace(s[nh]) && w == h && w >= 0) { - return w; - } - return 0; -} } // unnamed namespace static IdNameMapper defaultNameMapper; @@ -288,9 +278,6 @@ std::unique_ptr InternalServer::handle_request(const RequestContext& r if (startsWith(request.get_url(), "/raw/")) return handle_raw(request); - if (request.get_url() == "/meta") - return handle_meta(request); - if (request.get_url() == "/search") return handle_search(request); @@ -383,60 +370,6 @@ SuggestionsList_t getSuggestions(const zim::Archive* const archive, return suggestions; } -/** - * Archive and Zim handlers end - **/ - -std::unique_ptr InternalServer::handle_meta(const RequestContext& request) -{ - std::string bookName; - std::shared_ptr archive; - try { - bookName = request.get_argument("content"); - const std::string bookId = mp_nameMapper->getIdForName(bookName); - archive = mp_library->getArchiveById(bookId); - } catch (const std::out_of_range& e) { - // error handled by the archive == nullptr check below - } - - if (archive == nullptr) { - const std::string error_details = "No such book: " + bookName; - return Response::build_404(*this, "", bookName, "", error_details); - } - - std::string content; - std::string mimeType = "text"; - const auto meta_name = request.get_optional_param("name", std::string()); - - if (meta_name == "title") { - content = getArchiveTitle(*archive); - } else if (meta_name == "description") { - content = getMetaDescription(*archive); - } else if (meta_name == "language") { - content = getMetaLanguage(*archive); - } else if (meta_name == "name") { - content = getMetaName(*archive); - } else if (meta_name == "tags") { - content = getMetaTags(*archive); - } else if (meta_name == "date") { - content = getMetaDate(*archive); - } else if (meta_name == "creator") { - content = getMetaCreator(*archive); - } else if (meta_name == "publisher") { - content = getMetaPublisher(*archive); - } else if (meta_name == "favicon") { - getArchiveFavicon(*archive, 48, content, mimeType); - } else if (const unsigned illustrationSize = parseIllustration(meta_name)) { - getArchiveFavicon(*archive, illustrationSize, content, mimeType); - } else { - const std::string error_details = "No such metadata item: " + meta_name; - return Response::build_404(*this, "", bookName, "", error_details); - } - - auto response = ContentResponse::build(*this, content, mimeType); - response->set_cacheable(); - return std::move(response); -} std::unique_ptr InternalServer::handle_suggest(const RequestContext& request) { diff --git a/src/server/internalServer.h b/src/server/internalServer.h index ddd33f7e8..09f591f0c 100644 --- a/src/server/internalServer.h +++ b/src/server/internalServer.h @@ -83,7 +83,6 @@ class InternalServer { std::unique_ptr handle_catalog_v2_categories(const RequestContext& request); std::unique_ptr handle_catalog_v2_languages(const RequestContext& request); std::unique_ptr handle_catalog_v2_illustration(const RequestContext& request); - std::unique_ptr handle_meta(const RequestContext& request); std::unique_ptr handle_search(const RequestContext& request); std::unique_ptr handle_suggest(const RequestContext& request); std::unique_ptr handle_random(const RequestContext& request); diff --git a/test/server.cpp b/test/server.cpp index 5f79ad153..134ca1526 100644 --- a/test/server.cpp +++ b/test/server.cpp @@ -194,16 +194,15 @@ const ResourceCollection resources200Uncompressible{ { WITH_ETAG, "/ROOT/skin/jquery-ui/images/animated-overlay.gif" }, { WITH_ETAG, "/ROOT/skin/caret.png" }, - { WITH_ETAG, "/ROOT/meta?content=zimfile&name=title" }, - { WITH_ETAG, "/ROOT/meta?content=zimfile&name=description" }, - { WITH_ETAG, "/ROOT/meta?content=zimfile&name=language" }, - { WITH_ETAG, "/ROOT/meta?content=zimfile&name=name" }, - { WITH_ETAG, "/ROOT/meta?content=zimfile&name=tags" }, - { WITH_ETAG, "/ROOT/meta?content=zimfile&name=date" }, - { WITH_ETAG, "/ROOT/meta?content=zimfile&name=creator" }, - { WITH_ETAG, "/ROOT/meta?content=zimfile&name=publisher" }, - { WITH_ETAG, "/ROOT/meta?content=zimfile&name=favicon" }, - { WITH_ETAG, "/ROOT/meta?content=zimfile&name=Illustration_48x48@1" }, + { WITH_ETAG, "/ROOT/raw/zimfile/meta/Title" }, + { WITH_ETAG, "/ROOT/raw/zimfile/meta/Description" }, + { WITH_ETAG, "/ROOT/raw/zimfile/meta/Language" }, + { WITH_ETAG, "/ROOT/raw/zimfile/meta/Name" }, + { WITH_ETAG, "/ROOT/raw/zimfile/meta/Tags" }, + { WITH_ETAG, "/ROOT/raw/zimfile/meta/Date" }, + { WITH_ETAG, "/ROOT/raw/zimfile/meta/Creator" }, + { WITH_ETAG, "/ROOT/raw/zimfile/meta/Publisher" }, + { NO_ETAG, "/ROOT/catalog/v2/illustration/zimfile?size=48" }, { WITH_ETAG, "/ROOT/zimfile/I/m/Ray_Charles_classic_piano_pose.jpg" }, @@ -296,6 +295,10 @@ const char* urls404[] = { "/ROOT/suggest?content=non-existent-book&term=abcd", "/ROOT/catch/external", "/ROOT/zimfile/A/non-existent-article", + + // zimfile has no Favicon nor Illustration_48x48@1 meta item + "/ROOT/raw/zimfile/meta/Favicon", + "/ROOT/raw/zimfile/meta/Illustration_48x48@1", }; TEST_F(ServerTest, 404)