From 41f25083dae9f8316d68261122922f6e07057689 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Wed, 29 Nov 2023 14:31:38 +0400 Subject: [PATCH] Replaced UrlNotFoundMsg with UrlNotFoundResponse --- src/server/internalServer.cpp | 45 +++++++++------------------ src/server/internalServer_catalog.cpp | 18 ++++------- src/server/response.cpp | 7 +++-- src/server/response.h | 11 ++++--- 4 files changed, 31 insertions(+), 50 deletions(-) diff --git a/src/server/internalServer.cpp b/src/server/internalServer.cpp index c8446cb17..cdfa4debe 100644 --- a/src/server/internalServer.cpp +++ b/src/server/internalServer.cpp @@ -593,8 +593,7 @@ std::unique_ptr InternalServer::handle_request(const RequestContext& r { try { if (! request.is_valid_url()) { - return HTTP404Response(*this, request) - + urlNotFoundMsg; + return UrlNotFoundResponse(*this, request); } if ( request.get_url() == "" ) { @@ -697,8 +696,7 @@ std::unique_ptr InternalServer::handle_suggest(const RequestContext& r } if ( startsWith(request.get_url(), "/suggest/") ) { - return HTTP404Response(*this, request) - + urlNotFoundMsg; + return UrlNotFoundResponse(*this, request); } std::string bookName, bookId; @@ -817,12 +815,10 @@ std::unique_ptr InternalServer::handle_no_js(const RequestContext& req const auto bookId = mp_nameMapper->getIdForName(urlParts[2]); content = getNoJSDownloadPageHTML(bookId, userLang); } catch (const std::out_of_range&) { - return HTTP404Response(*this, request) - + urlNotFoundMsg; + return UrlNotFoundResponse(*this, request); } } else { - return HTTP404Response(*this, request) - + urlNotFoundMsg; + return UrlNotFoundResponse(*this, request); } return ContentResponse::build( @@ -873,8 +869,7 @@ std::unique_ptr InternalServer::handle_skin(const RequestContext& requ response->set_kind(accessType); return std::move(response); } catch (const ResourceNotFound& e) { - return HTTP404Response(*this, request) - + urlNotFoundMsg; + return UrlNotFoundResponse(*this, request); } } @@ -892,8 +887,7 @@ std::unique_ptr InternalServer::handle_search(const RequestContext& re get_default_data(), "application/opensearchdescription+xml"); } - return HTTP404Response(*this, request) - + urlNotFoundMsg; + return UrlNotFoundResponse(*this, request); } try { @@ -1001,8 +995,7 @@ std::unique_ptr InternalServer::handle_random(const RequestContext& re } if ( startsWith(request.get_url(), "/random/") ) { - return HTTP404Response(*this, request) - + urlNotFoundMsg; + return UrlNotFoundResponse(*this, request); } std::string bookName; @@ -1037,8 +1030,7 @@ std::unique_ptr InternalServer::handle_captured_external(const Request } catch (const std::out_of_range& e) {} if (source.empty()) { - return HTTP404Response(*this, request) - + urlNotFoundMsg; + return UrlNotFoundResponse(*this, request); } auto data = get_default_data(); @@ -1056,8 +1048,7 @@ std::unique_ptr InternalServer::handle_catch(const RequestContext& req return handle_captured_external(request); } - return HTTP404Response(*this, request) - + urlNotFoundMsg; + return UrlNotFoundResponse(*this, request); } std::vector @@ -1141,8 +1132,7 @@ std::unique_ptr InternalServer::handle_content(const RequestContext& r if (archive == nullptr) { const std::string searchURL = m_root + "/search?pattern=" + kiwix::urlEncode(pattern); - return HTTP404Response(*this, request) - + urlNotFoundMsg + return UrlNotFoundResponse(*this, request) + suggestSearchMsg(searchURL, kiwix::urlDecode(pattern)); } @@ -1189,8 +1179,7 @@ std::unique_ptr InternalServer::handle_content(const RequestContext& r printf("Failed to find %s\n", urlStr.c_str()); std::string searchURL = m_root + "/search?content=" + bookName + "&pattern=" + kiwix::urlEncode(pattern); - return HTTP404Response(*this, request) - + urlNotFoundMsg + return UrlNotFoundResponse(*this, request) + suggestSearchMsg(searchURL, kiwix::urlDecode(pattern)); } } @@ -1208,13 +1197,11 @@ std::unique_ptr InternalServer::handle_raw(const RequestContext& reque bookName = request.get_url_part(1); kind = request.get_url_part(2); } catch (const std::out_of_range& e) { - return HTTP404Response(*this, request) - + urlNotFoundMsg; + return UrlNotFoundResponse(*this, request); } if (kind != "meta" && kind!= "content") { - return HTTP404Response(*this, request) - + urlNotFoundMsg + return UrlNotFoundResponse(*this, request) + invalidRawAccessMsg(kind); } @@ -1225,8 +1212,7 @@ std::unique_ptr InternalServer::handle_raw(const RequestContext& reque } catch (const std::out_of_range& e) {} if (archive == nullptr) { - return HTTP404Response(*this, request) - + urlNotFoundMsg + return UrlNotFoundResponse(*this, request) + noSuchBookErrorMsg(bookName); } @@ -1260,8 +1246,7 @@ std::unique_ptr InternalServer::handle_raw(const RequestContext& reque if (m_verbose.load()) { printf("Failed to find %s\n", itemPath.c_str()); } - return HTTP404Response(*this, request) - + urlNotFoundMsg + return UrlNotFoundResponse(*this, request) + rawEntryNotFoundMsg(kind, itemPath); } } diff --git a/src/server/internalServer_catalog.cpp b/src/server/internalServer_catalog.cpp index fa50450a9..7bda62792 100644 --- a/src/server/internalServer_catalog.cpp +++ b/src/server/internalServer_catalog.cpp @@ -63,8 +63,7 @@ std::unique_ptr InternalServer::handle_catalog(const RequestContext& r host = request.get_header("Host"); url = request.get_url_part(1); } catch (const std::out_of_range&) { - return HTTP404Response(*this, request) - + urlNotFoundMsg; + return UrlNotFoundResponse(*this, request); } if (url == "v2") { @@ -72,8 +71,7 @@ std::unique_ptr InternalServer::handle_catalog(const RequestContext& r } if (url != "searchdescription.xml" && url != "root.xml" && url != "search") { - return HTTP404Response(*this, request) - + urlNotFoundMsg; + return UrlNotFoundResponse(*this, request); } if (url == "searchdescription.xml") { @@ -111,8 +109,7 @@ std::unique_ptr InternalServer::handle_catalog_v2(const RequestContext try { url = request.get_url_part(2); } catch (const std::out_of_range&) { - return HTTP404Response(*this, request) - + urlNotFoundMsg; + return UrlNotFoundResponse(*this, request); } if (url == "root.xml") { @@ -138,8 +135,7 @@ std::unique_ptr InternalServer::handle_catalog_v2(const RequestContext } else if (url == "illustration") { return handle_catalog_v2_illustration(request); } else { - return HTTP404Response(*this, request) - + urlNotFoundMsg; + return UrlNotFoundResponse(*this, request); } } @@ -181,8 +177,7 @@ std::unique_ptr InternalServer::handle_catalog_v2_complete_entry(const try { mp_library->getBookById(entryId); } catch (const std::out_of_range&) { - return HTTP404Response(*this, request) - + urlNotFoundMsg; + return UrlNotFoundResponse(*this, request); } OPDSDumper opdsDumper(mp_library.get(), mp_nameMapper.get()); @@ -233,8 +228,7 @@ std::unique_ptr InternalServer::handle_catalog_v2_illustration(const R illustration->mimeType ); } catch(...) { - return HTTP404Response(*this, request) - + urlNotFoundMsg; + return UrlNotFoundResponse(*this, request); } } diff --git a/src/server/response.cpp b/src/server/response.cpp index 5399cfc58..f03ee5fcc 100644 --- a/src/server/response.cpp +++ b/src/server/response.cpp @@ -152,7 +152,6 @@ std::unique_ptr Response::build_304(const InternalServer& server, cons return response; } -const UrlNotFoundMsg urlNotFoundMsg; const InvalidUrlMsg invalidUrlMsg; std::string ContentResponseBlueprint::getMessage(const std::string& msgId) const @@ -198,10 +197,12 @@ HTTP404Response::HTTP404Response(const InternalServer& server, { } -HTTPErrorResponse& HTTP404Response::operator+(UrlNotFoundMsg /*unused*/) +UrlNotFoundResponse::UrlNotFoundResponse(const InternalServer& server, + const RequestContext& request) + : HTTP404Response(server, request) { const std::string requestUrl = urlDecode(m_request.get_full_url(), false); - return *this + ParameterizedMessage("url-not-found", {{"url", requestUrl}}); + *this += ParameterizedMessage("url-not-found", {{"url", requestUrl}}); } HTTPErrorResponse& HTTPErrorResponse::operator+(const std::string& msg) diff --git a/src/server/response.h b/src/server/response.h index 4ed07e628..32702de45 100644 --- a/src/server/response.h +++ b/src/server/response.h @@ -174,17 +174,18 @@ struct HTTPErrorResponse : ContentResponseBlueprint HTTPErrorResponse& operator+=(const ParameterizedMessage& errorDetails); }; -class UrlNotFoundMsg {}; - -extern const UrlNotFoundMsg urlNotFoundMsg; - struct HTTP404Response : HTTPErrorResponse { HTTP404Response(const InternalServer& server, const RequestContext& request); using HTTPErrorResponse::operator+; - HTTPErrorResponse& operator+(UrlNotFoundMsg /*unused*/); +}; + +struct UrlNotFoundResponse : HTTP404Response +{ + UrlNotFoundResponse(const InternalServer& server, + const RequestContext& request); }; class InvalidUrlMsg {};