mirror of
https://github.com/Expand-sys/CCash
synced 2026-03-22 12:37:08 +11:00
✨ made responses more inuitive for vpass and admin/vpass & fixed send funds bug
This commit is contained in:
parent
5e8541c2a6
commit
c7695dd6db
4 changed files with 43 additions and 27 deletions
24
help.md
24
help.md
|
|
@ -15,12 +15,12 @@
|
||||||
* "**A**" denotes requiring Authentication in the form of a header titled "**Password**"
|
* "**A**" denotes requiring Authentication in the form of a header titled "**Password**"
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
| Name | Path | Method | A | Description |
|
| Name | Path | Method | A | Description |
|
||||||
| :------------: | :-------------------------------- | :----: | :---: | --------------------------------------------------------------------------------------------------------------------------- |
|
| :------------: | :-------------------------------- | :----: | :---: | -------------------------------------------------------------------------------------------------- |
|
||||||
| GetBal | /{name}/bal | GET | false | returns the balance of a given user `{name}` |
|
| GetBal | /{name}/bal | GET | false | returns the balance of a given user `{name}` |
|
||||||
| GetLog | /{name}/log | GET | true | returns a list of last `n` number of transactions (a configurable amount) of a given user `{name}` |
|
| GetLog | /{name}/log | GET | true | returns a list of last `n` number of transactions (a configurable amount) of a given user `{name}` |
|
||||||
| SendFunds | /{name}/send/{to}/amount={amount} | POST | true | sends `{amount}` from user `{name}` to user `{to}` |
|
| SendFunds | /{name}/send/{to}/amount={amount} | POST | true | sends `{amount}` from user `{name}` to user `{to}` |
|
||||||
| VerifyPassword | /{name}/pass/verify | GET | true | returns `true` or `false` depending on if the supplied user `{name}`'s password matches the password supplied in the header |
|
| VerifyPassword | /{name}/pass/verify | GET | true | returns `1` if the supplied user `{name}`'s password matches the password supplied in the header |
|
||||||
|
|
||||||
# Meta Usage
|
# Meta Usage
|
||||||
| Name | Path | Method | A | Description |
|
| Name | Path | Method | A | Description |
|
||||||
|
|
@ -29,12 +29,12 @@
|
||||||
| SetBal | /admin/{name}/bal/amount={amount} | PATCH | true | sets the balance of a give user `{name}` if the supplied password matches the admin password |
|
| SetBal | /admin/{name}/bal/amount={amount} | PATCH | true | sets the balance of a give user `{name}` if the supplied password matches the admin password |
|
||||||
|
|
||||||
# System Usage
|
# System Usage
|
||||||
| Name | Path | Method | A | Description |
|
| Name | Path | Method | A | Description |
|
||||||
| :-------------: | :--------------- | :----: | :---: | -------------------------------------------------------------------------------------------------------- |
|
| :-------------: | :--------------- | :----: | :---: | ------------------------------------------------------------------------------------- |
|
||||||
| Help | /help | GET | false | the page you're looking at right now! |
|
| Help | /help | GET | false | the page you're looking at right now! |
|
||||||
| Close | /admin/close | POST | true | saves and then closes the program if the supplied password matches the admin password |
|
| Close | /admin/close | POST | true | saves and then closes the program if the supplied password matches the admin password |
|
||||||
| Contains | /contains/{name} | GET | false | returns `true` or `false` depending on if the supplied user `{name}` exists |
|
| Contains | /contains/{name} | GET | false | returns `true` or `false` depending on if the supplied user `{name}` exists |
|
||||||
| AdminVerifyPass | /admin/verify | GET | true | returns `true` or `false` depending on if the password supplied in the header matches the admin password |
|
| AdminVerifyPass | /admin/verify | GET | true | returns `1` if the password supplied in the header matches the admin password |
|
||||||
|
|
||||||
# User Management
|
# User Management
|
||||||
| Name | Path | Method | A | Description |
|
| Name | Path | Method | A | Description |
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ public:
|
||||||
int_fast8_t SendFunds(const std::string &a_name, const std::string &b_name, uint32_t amount, const std::string &attempt);
|
int_fast8_t SendFunds(const std::string &a_name, const std::string &b_name, uint32_t amount, const std::string &attempt);
|
||||||
|
|
||||||
bool Contains(const std::string &name) const;
|
bool Contains(const std::string &name) const;
|
||||||
bool AdminVerifyPass(const std::string &attempt);
|
int_fast8_t AdminVerifyPass(const std::string &attempt);
|
||||||
|
|
||||||
int_fast8_t SetBal(const std::string &name, const std::string &attempt, uint32_t amount);
|
int_fast8_t SetBal(const std::string &name, const std::string &attempt, uint32_t amount);
|
||||||
int_fast64_t GetBal(const std::string &name) const;
|
int_fast64_t GetBal(const std::string &name) const;
|
||||||
|
|
|
||||||
42
src/bank.cpp
42
src/bank.cpp
|
|
@ -27,12 +27,12 @@ int_fast8_t Bank::AdminAddUser(const std::string &attempt, std::string &&name, u
|
||||||
}
|
}
|
||||||
if (admin_pass != attempt)
|
if (admin_pass != attempt)
|
||||||
{
|
{
|
||||||
return ErrorResponse::WrongAdminPassword;
|
return ErrorResponse::WrongPassword;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::shared_lock<std::shared_mutex> lock{size_l};
|
std::shared_lock<std::shared_mutex> lock{size_l};
|
||||||
if (users.try_emplace_l(
|
if (users.try_emplace_l(
|
||||||
name, [](User &) {}, std::move(init_pass)))
|
name, [](User &) {}, init_bal, std::move(init_pass)))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -58,7 +58,7 @@ int_fast8_t Bank::DelUser(const std::string &name, const std::string &attempt)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return ErrorResponse::WrongAdminPassword;
|
return ErrorResponse::WrongPassword;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -78,7 +78,7 @@ int_fast8_t Bank::AdminDelUser(const std::string &name, const std::string &attem
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return ErrorResponse::WrongAdminPassword;
|
return ErrorResponse::WrongPassword;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -90,7 +90,6 @@ int_fast8_t Bank::SendFunds(const std::string &a_name, const std::string &b_name
|
||||||
{
|
{
|
||||||
return ErrorResponse::InvalidRequest;
|
return ErrorResponse::InvalidRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
int_fast8_t state = false;
|
int_fast8_t state = false;
|
||||||
{
|
{
|
||||||
std::shared_lock<std::shared_mutex> lock{send_funds_l}; //because SendFunds requires 3 locking operations
|
std::shared_lock<std::shared_mutex> lock{send_funds_l}; //because SendFunds requires 3 locking operations
|
||||||
|
|
@ -113,10 +112,6 @@ int_fast8_t Bank::SendFunds(const std::string &a_name, const std::string &b_name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
{
|
|
||||||
return ErrorResponse::UserNotFound;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
if (state)
|
if (state)
|
||||||
{
|
{
|
||||||
|
|
@ -152,6 +147,13 @@ int_fast8_t Bank::SendFunds(const std::string &a_name, const std::string &b_name
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
{
|
||||||
|
std::cout << "b\n";
|
||||||
|
return ErrorResponse::UserNotFound;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -159,16 +161,23 @@ bool Bank::Contains(const std::string &name) const
|
||||||
{
|
{
|
||||||
return users.contains(name);
|
return users.contains(name);
|
||||||
}
|
}
|
||||||
bool Bank::AdminVerifyPass(const std::string &attempt)
|
int_fast8_t Bank::AdminVerifyPass(const std::string &attempt)
|
||||||
{
|
{
|
||||||
return (admin_pass == attempt);
|
if (admin_pass == attempt)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return ErrorResponse::WrongPassword;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int_fast8_t Bank::SetBal(const std::string &name, const std::string &attempt, uint32_t amount)
|
int_fast8_t Bank::SetBal(const std::string &name, const std::string &attempt, uint32_t amount)
|
||||||
{
|
{
|
||||||
if (admin_pass != attempt)
|
if (admin_pass != attempt)
|
||||||
{
|
{
|
||||||
return ErrorResponse::WrongAdminPassword;
|
return ErrorResponse::WrongPassword;
|
||||||
}
|
}
|
||||||
if (users.modify_if(name, [amount](User &u) {
|
if (users.modify_if(name, [amount](User &u) {
|
||||||
u.balance = amount;
|
u.balance = amount;
|
||||||
|
|
@ -194,7 +203,14 @@ int_fast8_t Bank::VerifyPassword(const std::string &name, const std::string &att
|
||||||
{
|
{
|
||||||
int_fast8_t res = ErrorResponse::UserNotFound;
|
int_fast8_t res = ErrorResponse::UserNotFound;
|
||||||
users.if_contains(name, [&res, &attempt](const User &u) {
|
users.if_contains(name, [&res, &attempt](const User &u) {
|
||||||
res = u.password == XXH3_64bits(attempt.data(), attempt.size());
|
if (u.password == XXH3_64bits(attempt.data(), attempt.size()))
|
||||||
|
{
|
||||||
|
res = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
res = ErrorResponse::WrongPassword;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue