#include "json_filter.h" template JsonFilter::JsonFilter() {} __attribute__((always_inline)) inline bool Contains(std::string_view str, const std::string &val) { return str.find(val) != std::string::npos; } template void JsonFilter::doFilter(const HttpRequestPtr &req, FilterCallback &&fcb, FilterChainCallback &&fccb) { static thread_local std::string_view accept_header = req->getHeader("Accept"); if constexpr (check_content_type) { static thread_local std::string_view content_type = req->getHeader("content-type"); if (content_type == "application/json" && (Contains(accept_header, "*/*") || Contains(accept_header, "application/json"))) { fccb(); return; } static thread_local const auto &resp = HttpResponse::newCustomHttpResponse(BankResponse(k406NotAcceptable, "\"Client must Accept and have content-type of JSON\"")); fcb(resp); } else { if ((Contains(accept_header, "*/*") || Contains(accept_header, "application/json"))) { fccb(); return; } static thread_local const auto &resp = HttpResponse::newCustomHttpResponse(BankResponse(k406NotAcceptable, "\"Client must Accept JSON\"")); fcb(resp); } } template class JsonFilter; template class JsonFilter;