🐎 body only set if method needs it

This commit is contained in:
EntireTwix 2021-07-04 23:42:18 -07:00
parent b310c8ec2b
commit 97fd39b1d4
6 changed files with 34 additions and 22 deletions

View file

@ -16,4 +16,4 @@ public:
virtual void doFilter(const HttpRequestPtr &,
FilterCallback &&,
FilterChainCallback &&) override;
};
};

View file

@ -45,19 +45,19 @@ public:
//Usage
METHOD_ADD(api::GetBal, "/v1/user/balance?name={name}", Get, Options);
#if MAX_LOG_SIZE > 0
METHOD_ADD(api::GetLog, "/v1/user/log", Get, Options, "UserFilter");
METHOD_ADD(api::GetLog, "/v1/user/log", Get, Options, "UserFilterDefault");
#else
METHOD_ADD(api::GetLog, "/v1/user/log", Get, Options);
#endif
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");
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");
//Meta Usage
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)
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)
//System Usage
METHOD_ADD(api::Help, "/v1/help", Get, Options);
@ -69,7 +69,7 @@ public:
//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, "UserFilter");
METHOD_ADD(api::DelUser, "/v1/delete", Delete, Options, "UserFilterDefault");
METHOD_ADD(api::AdminDelUser, "/v1/admin/delete", Delete, Options, "JsonFilter", "AdminFilter"); //expects ["name"](string)
#endif
METHOD_ADD(api::ApiVersion, "/version", Get, Options);

View file

@ -5,7 +5,8 @@
using namespace drogon;
class UserFilter : public HttpFilter<UserFilter, false>
template <bool set_body_flag>
class UserFilter : public HttpFilter<UserFilter<set_body_flag>, false>
{
private:
Bank &bank;
@ -16,4 +17,7 @@ public:
virtual void doFilter(const HttpRequestPtr &,
FilterCallback &&,
FilterChainCallback &&) override;
};
};
using UserFilterDefault = UserFilter<true>;
using UserFilterSparse = UserFilter<false>;

View file

@ -101,7 +101,8 @@ int main(int argc, char **argv)
}
auto API = std::make_shared<api>(bank);
auto user_filter = std::make_shared<UserFilter>(bank);
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>();
@ -111,7 +112,8 @@ int main(int argc, char **argv)
});
app()
.loadConfigFile(config_location)
.registerFilter(user_filter)
.registerFilter(user_filter_default)
.registerFilter(user_filter_sparse)
.registerFilter(admin_filter)
.registerController(API)
#if MULTI_THREADED

View file

@ -21,13 +21,12 @@ void AdminFilter::doFilter(const HttpRequestPtr &req,
if (middle != std::string::npos)
{
base64_result[middle] = '\0';
const std::string &username = results_view.substr(0, middle).data();
const std::string &username(results_view.substr(0, middle).data());
if (bank.AdminVerifyAccount(username))
{
base64_result[new_sz] = '\0';
if (bank.VerifyPassword(std::move(username), results_view.substr(middle + 1)))
{
req->setBody(username); //feels sub optimal
fccb();
return;
}

View file

@ -1,10 +1,14 @@
#include "user_filter.h"
UserFilter::UserFilter(Bank &b) : bank(b) {}
template <>
UserFilter<true>::UserFilter(Bank &b) : bank(b) {}
template <>
UserFilter<false>::UserFilter(Bank &b) : bank(b) {}
void UserFilter::doFilter(const HttpRequestPtr &req,
FilterCallback &&fcb,
FilterChainCallback &&fccb)
template <bool set_body_flag>
void UserFilter<set_body_flag>::doFilter(const HttpRequestPtr &req,
FilterCallback &&fcb,
FilterChainCallback &&fccb)
{
std::string_view auth_header = req->getHeader("Authorization");
if (auth_header.size() > 6)
@ -22,10 +26,13 @@ void UserFilter::doFilter(const HttpRequestPtr &req,
{
base64_result[middle] = '\0';
base64_result[new_sz] = '\0';
const std::string &username = results_view.substr(0, middle).data();
const std::string &username(results_view.substr(0, middle).data());
if (bank.VerifyPassword(username, results_view.substr(middle + 1)))
{
req->setBody(username); //feels sub optimal
if constexpr (set_body_flag)
{
req->setBody(username); //feels sub optimal
}
fccb();
return;
}