From 6eb02a828860c5dc09d03cfd5bdab4a439619190 Mon Sep 17 00:00:00 2001 From: EntireTwix Date: Mon, 5 Jul 2021 00:44:53 -0700 Subject: [PATCH] :bug::art: fixed filter organization --- include/bank_api.h | 36 ++++++++++++++++++------------------ include/json_filter.h | 3 ++- main.cpp | 5 ++++- src/json_filter.cpp | 32 +++++++++++++++++++++++--------- 4 files changed, 47 insertions(+), 29 deletions(-) diff --git a/include/bank_api.h b/include/bank_api.h index d54d432..1325a26 100644 --- a/include/bank_api.h +++ b/include/bank_api.h @@ -43,34 +43,34 @@ public: #if API_VERSION >= 1 //Usage - METHOD_ADD(api::GetBal, "/v1/user/balance?name={name}", Get, Options); + METHOD_ADD(api::GetBal, "/v1/user/balance?name={name}", Get, Options, "JsonFilter"); #if MAX_LOG_SIZE > 0 - METHOD_ADD(api::GetLog, "/v1/user/log", Get, Options, "UserFilterDefault"); + METHOD_ADD(api::GetLog, "/v1/user/log", Get, Options, "UserFilter", "JsonFilter"); #else - METHOD_ADD(api::GetLog, "/v1/user/log", Get, Options); + METHOD_ADD(api::GetLog, "/v1/user/log", Get, Options, "JsonFilter"); #endif - METHOD_ADD(api::SendFunds, "/v1/user/transfer", Post, Options, "JsonFilter", "UserFilterDefault"); //expects ["to"](string) and ["amount"](32 bits) - METHOD_ADD(api::VerifyPassword, "/v1/user/verify_password", Post, Options, "UserFilterSparse"); + METHOD_ADD(api::SendFunds, "/v1/user/transfer", Post, Options, "JsonFilter", "UserFilter"); //expects ["to"](string) and ["amount"](32 bits) + METHOD_ADD(api::VerifyPassword, "/v1/user/verify_password", Post, Options, "UserFilter", "JsonFilter"); //Meta Usage - METHOD_ADD(api::ChangePassword, "/v1/user/change_password", Patch, Options, "JsonFilter", "UserFilterDefault"); //expects ["new_pass"](string) - METHOD_ADD(api::AdminChangePassword, "/v1/user/change_password", Patch, Options, "JsonFilter", "AdminFilter"); //expects ["name"](string) and ["new_pass"](string) - METHOD_ADD(api::SetBal, "/v1/admin/set_balance", Patch, Options, "JsonFilter", "AdminFilter"); //expects ["name"](string) and ["amount"](32 bits) - METHOD_ADD(api::AddBal, "/v1/admin/add_balance", Post, Options, "JsonFilter", "AdminFilter"); //expects ["name"](string) and ["amount"](32 bits) - METHOD_ADD(api::SubBal, "/v1/admin/sub_balance", Post, Options, "JsonFilter", "AdminFilter"); //expects ["name"](string) and ["amount"](32 bits) + METHOD_ADD(api::ChangePassword, "/v1/user/change_password", Patch, Options, "JsonFilter", "UserFilter"); //expects ["new_pass"](string) + METHOD_ADD(api::AdminChangePassword, "/v1/user/change_password", Patch, Options, "JsonFilter", "AdminFilter"); //expects ["name"](string) and ["new_pass"](string) + METHOD_ADD(api::SetBal, "/v1/admin/set_balance", Patch, Options, "JsonFilter", "AdminFilter"); //expects ["name"](string) and ["amount"](32 bits) + METHOD_ADD(api::AddBal, "/v1/admin/add_balance", Post, Options, "JsonFilter", "AdminFilter"); //expects ["name"](string) and ["amount"](32 bits) + METHOD_ADD(api::SubBal, "/v1/admin/sub_balance", Post, Options, "JsonFilter", "AdminFilter"); //expects ["name"](string) and ["amount"](32 bits) //System Usage METHOD_ADD(api::Help, "/v1/help", Get, Options); - METHOD_ADD(api::Ping, "/v1/ping", Get, Options); - METHOD_ADD(api::Close, "/v1/admin/shutdown", Post, Options, "AdminFilter"); - METHOD_ADD(api::Contains, "/v1/user/exists?name={name}", Get, Options); - METHOD_ADD(api::AdminVerifyAccount, "/v1/admin/verify_account", Post, Options, "AdminFilter"); + METHOD_ADD(api::Ping, "/v1/ping", Get, Options, "JsonFilter"); + METHOD_ADD(api::Close, "/v1/admin/shutdown", Post, Options, "AdminFilter", "JsonFilter"); + METHOD_ADD(api::Contains, "/v1/user/exists?name={name}", Get, Options, "JsonFilter"); + METHOD_ADD(api::AdminVerifyAccount, "/v1/admin/verify_account", Post, Options, "AdminFilter", "JsonFilter"); //User Managment - METHOD_ADD(api::AddUser, "/v1/user/register", Post, Options, "JsonFilter"); //expects ["name"](string) ["pass"](string) - METHOD_ADD(api::AdminAddUser, "/v1/admin/user/register", Post, Options, "JsonFilter", "AdminFilter"); //expects ["name"](string) ["balance"](32 bits) ["pass"](string) - METHOD_ADD(api::DelUser, "/v1/delete", Delete, Options, "UserFilterDefault"); - METHOD_ADD(api::AdminDelUser, "/v1/admin/delete", Delete, Options, "JsonFilter", "AdminFilter"); //expects ["name"](string) + METHOD_ADD(api::AddUser, "/v1/user/register", Post, Options); //expects ["name"](string) ["pass"](string) + METHOD_ADD(api::AdminAddUser, "/v1/admin/user/register", Post, Options, "JsonFilter", "AdminFilter"); //expects ["name"](string) ["balance"](32 bits) ["pass"](string) + METHOD_ADD(api::DelUser, "/v1/delete", Delete, Options, "UserFilter", "JsonFilter"); + METHOD_ADD(api::AdminDelUser, "/v1/admin/delete", Delete, Options, "JsonFilter", "AdminFilter"); //expects ["name"](string) #endif METHOD_ADD(api::ApiVersion, "/version", Get, Options); diff --git a/include/json_filter.h b/include/json_filter.h index b5ea875..a6038ee 100644 --- a/include/json_filter.h +++ b/include/json_filter.h @@ -3,7 +3,8 @@ using namespace drogon; -class JsonFilter : public HttpFilter +template +class JsonFilter : public HttpFilter, false> { public: JsonFilter(); diff --git a/main.cpp b/main.cpp index b57a84d..e918eea 100644 --- a/main.cpp +++ b/main.cpp @@ -104,7 +104,8 @@ int main(int argc, char **argv) auto user_filter_default = std::make_shared(bank); auto user_filter_sparse = std::make_shared(bank); auto admin_filter = std::make_shared(bank); - auto accept_filter = std::make_shared(); + auto json_resp_and_req_filter = std::make_shared>(); + auto json_resp_filter = std::make_shared>(); app().registerPostHandlingAdvice( [](const drogon::HttpRequestPtr &req, const drogon::HttpResponsePtr &resp) { @@ -115,6 +116,8 @@ int main(int argc, char **argv) .registerFilter(user_filter_default) .registerFilter(user_filter_sparse) .registerFilter(admin_filter) + .registerFilter(json_resp_and_req_filter) + .registerFilter(json_resp_filter) .registerController(API) #if MULTI_THREADED .setThreadNum(get_nprocs()) diff --git a/src/json_filter.cpp b/src/json_filter.cpp index 42c96df..4b8d776 100644 --- a/src/json_filter.cpp +++ b/src/json_filter.cpp @@ -1,20 +1,34 @@ #include "json_filter.h" -JsonFilter::JsonFilter() {} +template <> +JsonFilter::JsonFilter() {} +template <> +JsonFilter::JsonFilter() {} __attribute__((always_inline)) inline bool Contains(std::string_view str, const std::string &val) { return str.find(val) != std::string::npos; } -void JsonFilter::doFilter(const HttpRequestPtr &req, - FilterCallback &&fcb, - FilterChainCallback &&fccb) +template +void JsonFilter::doFilter(const HttpRequestPtr &req, + FilterCallback &&fcb, + FilterChainCallback &&fccb) { - std::string_view content_type = req->getHeader("content-type"); std::string_view accept_header = req->getHeader("Accept"); - - if (content_type == "application/json" && (Contains(accept_header, "*/*") || Contains(accept_header, "application/json"))) + if constexpr (check_content_type) { - fccb(); - return; + std::string_view content_type = req->getHeader("content-type"); + if (content_type == "application/json" && (Contains(accept_header, "*/*") || Contains(accept_header, "application/json"))) + { + fccb(); + return; + } + } + else + { + if ((Contains(accept_header, "*/*") || Contains(accept_header, "application/json"))) + { + fccb(); + return; + } } const auto &resp = HttpResponse::newHttpJsonResponse("Client must Accept JSON");