Skip to content

Commit

Permalink
Correctly url encode querystring
Browse files Browse the repository at this point in the history
Fix tests with querystring needed url encoding
(pattern=jazz&books.query.title=Ray%20Charles)
  • Loading branch information
mgautierfr committed May 31, 2022
1 parent 587afc8 commit 3ffe4b3
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 8 deletions.
8 changes: 4 additions & 4 deletions src/server/internalServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ std::pair<std::string, Library::BookIdSet> InternalServer::selectBooks(const Req
auto bookName = request.get_argument("content");
try {
const auto bookIds = Library::BookIdSet{mp_nameMapper->getIdForName(bookName)};
const auto queryString = request.get_query([&](const std::string& key){return key == "content";});
const auto queryString = request.get_query([&](const std::string& key){return key == "content";}, true);
return {queryString, bookIds};
} catch (const std::out_of_range&) {
throw Error(noSuchBookErrorMsg(bookName));
Expand All @@ -239,7 +239,7 @@ std::pair<std::string, Library::BookIdSet> InternalServer::selectBooks(const Req
}
const auto bookIds = Library::BookIdSet(id_vec.begin(), id_vec.end());
checkBookNumber(bookIds, m_multizimSearchLimit);
const auto queryString = request.get_query([&](const std::string& key){return key == prefix+"id";});
const auto queryString = request.get_query([&](const std::string& key){return key == prefix+"id";}, true);
return {queryString, bookIds};
} catch(const std::out_of_range&) {}

Expand All @@ -258,7 +258,7 @@ std::pair<std::string, Library::BookIdSet> InternalServer::selectBooks(const Req
}
}
checkBookNumber(bookIds, m_multizimSearchLimit);
const auto queryString = request.get_query([&](const std::string& key){return key == prefix+"name";});
const auto queryString = request.get_query([&](const std::string& key){return key == prefix+"name";}, true);
return {queryString, bookIds};
} catch(const std::out_of_range&) {}

Expand All @@ -270,7 +270,7 @@ std::pair<std::string, Library::BookIdSet> InternalServer::selectBooks(const Req
}
const auto bookIds = Library::BookIdSet(id_vec.begin(), id_vec.end());
checkBookNumber(bookIds, m_multizimSearchLimit);
const auto queryString = request.get_query([&](const std::string& key){return startsWith(key, prefix+"filter.");});
const auto queryString = request.get_query([&](const std::string& key){return startsWith(key, prefix+"filter.");}, true);
return {queryString, bookIds};
}

Expand Down
9 changes: 5 additions & 4 deletions src/server/request_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,20 +92,21 @@ class RequestContext {
std::string get_url_part(int part) const;
std::string get_full_url() const;

std::string get_query() const {
return get_query([](const std::string& key) {return true;});
std::string get_query(bool mustEncode = false) const {
return get_query([](const std::string& key) {return true;}, mustEncode);
}

template<class F>
std::string get_query(F filter) const {
std::string get_query(F filter, bool mustEncode) const {
std::string q;
const char* sep = "";
auto encode = [=](const std::string& value) { return mustEncode?urlEncode(value, true):value; };
for ( const auto& a : arguments ) {
if (!filter(a.first)) {
continue;
}
for (const auto& v: a.second) {
q += sep + a.first + '=' + v;
q += sep + encode(a.first) + '=' + encode(v);
sep = "&";
}
}
Expand Down

0 comments on commit 3ffe4b3

Please sign in to comment.