🐛🎨 fixed filters reliance on toResponse for bank responses crashing

This commit is contained in:
EntireTwix 2021-07-06 21:53:32 -07:00
parent e02120b6f2
commit dedff14e7e
4 changed files with 28 additions and 22 deletions

View file

@ -2,6 +2,10 @@
#include <string>
#include <drogon/HttpTypes.h>
#include <drogon/HttpResponse.h>
#include <../src/HttpResponseImpl.h>
#include <../src/HttpAppFrameworkImpl.h>
struct BankResponse
{
drogon::HttpStatusCode first = drogon::k200OK;
@ -11,3 +15,6 @@ struct BankResponse
BankResponse(drogon::HttpStatusCode code, std::string &&str) noexcept ;
BankResponse(drogon::HttpStatusCode code, const std::string &str) noexcept ;
};
template <>
drogon::HttpResponsePtr drogon::toResponse(BankResponse &&data);

View file

@ -17,25 +17,6 @@
#define NAME_PARAM req->getBody().data()
#include <drogon/HttpResponse.h>
#include <../src/HttpResponseImpl.h>
#include <../src/HttpAppFrameworkImpl.h>
template <>
HttpResponsePtr drogon::toResponse(BankResponse &&data)
{
auto res = std::make_shared<HttpResponseImpl>(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)
{
}

View file

@ -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<HttpResponseImpl>(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;
}

View file

@ -19,6 +19,8 @@ void JsonFilter<check_content_type>::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,10 +29,10 @@ void JsonFilter<check_content_type>::doFilter(const HttpRequestPtr &req,
fccb();
return;
}
}
const auto &resp = HttpResponse::newCustomHttpResponse(BankResponse(k406NotAcceptable, "Client must Accept JSON"));
fcb(resp);
}
}
template class JsonFilter<true>;
template class JsonFilter<false>;