mirror of
https://github.com/Expand-sys/CCash
synced 2025-12-17 00:22:14 +11:00
🐛🎨 fixed filter organization
This commit is contained in:
parent
97fd39b1d4
commit
6eb02a8288
4 changed files with 47 additions and 29 deletions
|
|
@ -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<false>");
|
||||
#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<true>", "JsonFilter<false>");
|
||||
#else
|
||||
METHOD_ADD(api::GetLog, "/v1/user/log", Get, Options);
|
||||
METHOD_ADD(api::GetLog, "/v1/user/log", Get, Options, "JsonFilter<false>");
|
||||
#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<true>", "UserFilter<true>"); //expects ["to"](string) and ["amount"](32 bits)
|
||||
METHOD_ADD(api::VerifyPassword, "/v1/user/verify_password", Post, Options, "UserFilter<false>", "JsonFilter<false>");
|
||||
|
||||
//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<true>", "UserFilter<true>"); //expects ["new_pass"](string)
|
||||
METHOD_ADD(api::AdminChangePassword, "/v1/user/change_password", Patch, Options, "JsonFilter<true>", "AdminFilter"); //expects ["name"](string) and ["new_pass"](string)
|
||||
METHOD_ADD(api::SetBal, "/v1/admin/set_balance", Patch, Options, "JsonFilter<true>", "AdminFilter"); //expects ["name"](string) and ["amount"](32 bits)
|
||||
METHOD_ADD(api::AddBal, "/v1/admin/add_balance", Post, Options, "JsonFilter<true>", "AdminFilter"); //expects ["name"](string) and ["amount"](32 bits)
|
||||
METHOD_ADD(api::SubBal, "/v1/admin/sub_balance", Post, Options, "JsonFilter<true>", "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<false>");
|
||||
METHOD_ADD(api::Close, "/v1/admin/shutdown", Post, Options, "AdminFilter", "JsonFilter<false>");
|
||||
METHOD_ADD(api::Contains, "/v1/user/exists?name={name}", Get, Options, "JsonFilter<false>");
|
||||
METHOD_ADD(api::AdminVerifyAccount, "/v1/admin/verify_account", Post, Options, "AdminFilter", "JsonFilter<false>");
|
||||
|
||||
//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<true>", "AdminFilter"); //expects ["name"](string) ["balance"](32 bits) ["pass"](string)
|
||||
METHOD_ADD(api::DelUser, "/v1/delete", Delete, Options, "UserFilter<true>", "JsonFilter<false>");
|
||||
METHOD_ADD(api::AdminDelUser, "/v1/admin/delete", Delete, Options, "JsonFilter<true>", "AdminFilter"); //expects ["name"](string)
|
||||
#endif
|
||||
METHOD_ADD(api::ApiVersion, "/version", Get, Options);
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@
|
|||
|
||||
using namespace drogon;
|
||||
|
||||
class JsonFilter : public HttpFilter<JsonFilter, false>
|
||||
template <bool check_content_type>
|
||||
class JsonFilter : public HttpFilter<JsonFilter<check_content_type>, false>
|
||||
{
|
||||
public:
|
||||
JsonFilter();
|
||||
|
|
|
|||
5
main.cpp
5
main.cpp
|
|
@ -104,7 +104,8 @@ int main(int argc, char **argv)
|
|||
auto user_filter_default = std::make_shared<UserFilterDefault>(bank);
|
||||
auto user_filter_sparse = std::make_shared<UserFilterSparse>(bank);
|
||||
auto admin_filter = std::make_shared<AdminFilter>(bank);
|
||||
auto accept_filter = std::make_shared<JsonFilter>();
|
||||
auto json_resp_and_req_filter = std::make_shared<JsonFilter<true>>();
|
||||
auto json_resp_filter = std::make_shared<JsonFilter<false>>();
|
||||
|
||||
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())
|
||||
|
|
|
|||
|
|
@ -1,20 +1,34 @@
|
|||
#include "json_filter.h"
|
||||
|
||||
JsonFilter::JsonFilter() {}
|
||||
template <>
|
||||
JsonFilter<true>::JsonFilter() {}
|
||||
template <>
|
||||
JsonFilter<false>::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 <bool check_content_type>
|
||||
void JsonFilter<check_content_type>::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");
|
||||
|
|
|
|||
Loading…
Reference in a new issue