From dedff14e7ee6095762d4527e5657e4f37adb491f Mon Sep 17 00:00:00 2001 From: EntireTwix Date: Tue, 6 Jul 2021 21:53:32 -0700 Subject: [PATCH] :bug::art: fixed filters reliance on toResponse for bank responses crashing --- include/bank_resp.h | 9 ++++++++- src/bank_api.cpp | 19 ------------------- src/bank_resp.cpp | 16 ++++++++++++++++ src/json_filter.cpp | 6 ++++-- 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/include/bank_resp.h b/include/bank_resp.h index b846a10..341f33c 100644 --- a/include/bank_resp.h +++ b/include/bank_resp.h @@ -2,6 +2,10 @@ #include #include +#include +#include <../src/HttpResponseImpl.h> +#include <../src/HttpAppFrameworkImpl.h> + struct BankResponse { drogon::HttpStatusCode first = drogon::k200OK; @@ -10,4 +14,7 @@ struct BankResponse BankResponse() noexcept ; BankResponse(drogon::HttpStatusCode code, std::string &&str) noexcept ; BankResponse(drogon::HttpStatusCode code, const std::string &str) noexcept ; -}; \ No newline at end of file +}; + +template <> +drogon::HttpResponsePtr drogon::toResponse(BankResponse &&data); \ No newline at end of file diff --git a/src/bank_api.cpp b/src/bank_api.cpp index a7d9db5..3e7ac02 100644 --- a/src/bank_api.cpp +++ b/src/bank_api.cpp @@ -17,25 +17,6 @@ #define NAME_PARAM req->getBody().data() -#include -#include <../src/HttpResponseImpl.h> -#include <../src/HttpAppFrameworkImpl.h> -template <> -HttpResponsePtr drogon::toResponse(BankResponse &&data) -{ - auto res = std::make_shared(data.first, CT_APPLICATION_JSON); - res->setBody(std::move(data.second)); - auto &advices = HttpAppFrameworkImpl::instance().getResponseCreationAdvices(); - if (!advices.empty()) - { - for (auto &advice : advices) - { - advice(res); - } - } - return res; -} - api::api(Bank &b) noexcept : bank(b) { } diff --git a/src/bank_resp.cpp b/src/bank_resp.cpp index ffbb24e..e38a175 100644 --- a/src/bank_resp.cpp +++ b/src/bank_resp.cpp @@ -3,3 +3,19 @@ BankResponse::BankResponse() noexcept = default; BankResponse::BankResponse(drogon::HttpStatusCode code, std::string &&str) noexcept : first(code), second(str) {} BankResponse::BankResponse(drogon::HttpStatusCode code, const std::string &str) noexcept : first(code), second(str) {} + +template <> +drogon::HttpResponsePtr drogon::toResponse(BankResponse &&data) +{ + auto res = std::make_shared(data.first, CT_APPLICATION_JSON); + res->setBody(std::move(data.second)); + auto &advices = HttpAppFrameworkImpl::instance().getResponseCreationAdvices(); + if (!advices.empty()) + { + for (auto &advice : advices) + { + advice(res); + } + } + return res; +} \ No newline at end of file diff --git a/src/json_filter.cpp b/src/json_filter.cpp index 3dd9e0c..26d97aa 100644 --- a/src/json_filter.cpp +++ b/src/json_filter.cpp @@ -19,6 +19,8 @@ void JsonFilter::doFilter(const HttpRequestPtr &req, fccb(); return; } + const auto &resp = HttpResponse::newCustomHttpResponse(BankResponse(k406NotAcceptable, "Client must Accept and have content-type of JSON")); + fcb(resp); } else { @@ -27,9 +29,9 @@ void JsonFilter::doFilter(const HttpRequestPtr &req, fccb(); return; } + const auto &resp = HttpResponse::newCustomHttpResponse(BankResponse(k406NotAcceptable, "Client must Accept JSON")); + fcb(resp); } - const auto &resp = HttpResponse::newCustomHttpResponse(BankResponse(k406NotAcceptable, "Client must Accept JSON")); - fcb(resp); } template class JsonFilter;