mirror of
https://github.com/Expand-sys/CCash
synced 2026-03-22 20:47:10 +11:00
🐛🎨 fixed filters reliance on toResponse for bank responses crashing
This commit is contained in:
parent
e02120b6f2
commit
dedff14e7e
4 changed files with 28 additions and 22 deletions
|
|
@ -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);
|
||||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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,9 +29,9 @@ 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>;
|
||||
|
|
|
|||
Loading…
Reference in a new issue