mirror of
https://github.com/Expand-sys/CCash
synced 2025-12-16 16:12:14 +11:00
✨ changed to per-method versioning
This commit is contained in:
parent
cc103c7298
commit
83455a0510
16 changed files with 121 additions and 210 deletions
|
|
@ -81,16 +81,10 @@ set(RETURN_ON_DEL_VAL false)
|
||||||
set(RETURN_ON_DEL_NAME_VAL "\"\"")
|
set(RETURN_ON_DEL_NAME_VAL "\"\"")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(DEFINED API_VERSION)
|
if(DEFINED USE_DEPRECATED_ENDPOINTS)
|
||||||
set(API_VERSION_VAL ${API_VERSION})
|
set(USE_DEPRECATED_ENDPOINTS_VAL ${USE_DEPRECATED_ENDPOINTS})
|
||||||
else()
|
else()
|
||||||
set(API_VERSION_VAL 2)
|
set(USE_DEPRECATED_ENDPOINTS_VAL true)
|
||||||
endif()
|
|
||||||
|
|
||||||
if(DEFINED MIN_API_SUPPORT)
|
|
||||||
set(MIN_API_SUPPORT_VAL ${MIN_API_SUPPORT})
|
|
||||||
else()
|
|
||||||
set(MIN_API_SUPPORT_VAL 1)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
configure_file(ccash_config.hpp.in ${CMAKE_CURRENT_SOURCE_DIR}/include/ccash_config.hpp)
|
configure_file(ccash_config.hpp.in ${CMAKE_CURRENT_SOURCE_DIR}/include/ccash_config.hpp)
|
||||||
|
|
|
||||||
|
|
@ -90,14 +90,12 @@ int main(int argc, char **argv)
|
||||||
Op(Bank::VerifyPassword("twix", "root"), "verify pass: ", 1000000);
|
Op(Bank::VerifyPassword("twix", "root"), "verify pass: ", 1000000);
|
||||||
Op(Bank::ChangePassword("twix", "root"), "change pass: ", 1000000);
|
Op(Bank::ChangePassword("twix", "root"), "change pass: ", 1000000);
|
||||||
#if MAX_LOG_SIZE > 0
|
#if MAX_LOG_SIZE > 0
|
||||||
#if MIN_API_SUPPORT == 1
|
#if USE_DEPRECATED_ENDPOINTS
|
||||||
Op(Bank::GetLogs("twix"), "get logs init: ", 1);
|
Op(Bank::GetLogs("twix"), "get logs init: ", 1);
|
||||||
Op(Bank::GetLogs("twix"), "get logs cached: ", 1000000);
|
Op(Bank::GetLogs("twix"), "get logs cached: ", 1000000);
|
||||||
#endif
|
#endif
|
||||||
#if (API_VERSION >= 2) && (MIN_API_SUPPORT <= 2)
|
|
||||||
Op(Bank::GetLogsV2("twix"), "get logs init (v2): ", 1);
|
Op(Bank::GetLogsV2("twix"), "get logs init (v2): ", 1);
|
||||||
Op(Bank::GetLogsV2("twix"), "get logs cached (v2): ", 1000000);
|
Op(Bank::GetLogsV2("twix"), "get logs cached (v2): ", 1000000);
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
Op(Bank::PruneUsers(0, 0), "prune users: ", 1);
|
Op(Bank::PruneUsers(0, 0), "prune users: ", 1);
|
||||||
Op(Bank::Save(), "saving: ", 1);
|
Op(Bank::Save(), "saving: ", 1);
|
||||||
|
|
|
||||||
|
|
@ -28,12 +28,8 @@ if false, when frequency is hit save
|
||||||
*/
|
*/
|
||||||
#define CONSERVATIVE_DISK_SAVE @CONSERVATIVE_DISK_SAVE_VAL@
|
#define CONSERVATIVE_DISK_SAVE @CONSERVATIVE_DISK_SAVE_VAL@
|
||||||
|
|
||||||
// doesnt compile api endpoints above API_VERSION
|
|
||||||
#define API_VERSION @API_VERSION_VAL@
|
|
||||||
|
|
||||||
// doesnt compile api endpoints below MIN_API_SUPPORT
|
|
||||||
#define MIN_API_SUPPORT @MIN_API_SUPPORT_VAL@
|
|
||||||
|
|
||||||
#define MULTI_THREADED @MULTI_THREADED_VAL@
|
#define MULTI_THREADED @MULTI_THREADED_VAL@
|
||||||
|
|
||||||
#define ADD_USER_OPEN @ADD_USER_OPEN_VAL@
|
#define ADD_USER_OPEN @ADD_USER_OPEN_VAL@
|
||||||
|
|
||||||
|
#define USE_DEPRECATED_ENDPOINTS @USE_DEPRECATED_ENDPOINTS_VAL@
|
||||||
|
|
@ -4,11 +4,10 @@
|
||||||
become: true
|
become: true
|
||||||
pre_tasks:
|
pre_tasks:
|
||||||
- name: load variables
|
- name: load variables
|
||||||
ansible.builtin.include_vars: '{{ item }}'
|
ansible.builtin.include_vars: "{{ item }}"
|
||||||
with_first_found:
|
with_first_found:
|
||||||
- "default.yml"
|
- "default.yml"
|
||||||
|
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
- name: refresh packages update
|
- name: refresh packages update
|
||||||
yum:
|
yum:
|
||||||
|
|
@ -24,20 +23,30 @@
|
||||||
|
|
||||||
- name: install dependencies
|
- name: install dependencies
|
||||||
yum:
|
yum:
|
||||||
name: [git, gcc, gcc-c++, libuuid-devel, openssl-devel, zlib-devel, jsoncpp-devel, cmake]
|
name:
|
||||||
|
[
|
||||||
|
git,
|
||||||
|
gcc,
|
||||||
|
gcc-c++,
|
||||||
|
libuuid-devel,
|
||||||
|
openssl-devel,
|
||||||
|
zlib-devel,
|
||||||
|
jsoncpp-devel,
|
||||||
|
cmake,
|
||||||
|
]
|
||||||
state: present
|
state: present
|
||||||
when: ansible_os_family == "RedHat"
|
when: ansible_os_family == "RedHat"
|
||||||
|
|
||||||
- name: clone CCash repository
|
- name: clone CCash repository
|
||||||
git:
|
git:
|
||||||
repo: https://github.com/EntireTwix/CCash.git
|
repo: https://github.com/EntireTwix/CCash.git
|
||||||
dest: '{{BUILD_DIR}}/CCash'
|
dest: "{{BUILD_DIR}}/CCash"
|
||||||
recursive: true
|
recursive: true
|
||||||
update: false
|
update: false
|
||||||
|
|
||||||
- name: Make lib base64
|
- name: Make lib base64
|
||||||
community.general.make:
|
community.general.make:
|
||||||
chdir: '{{BUILD_DIR}}/CCash/third_party/base64'
|
chdir: "{{BUILD_DIR}}/CCash/third_party/base64"
|
||||||
params:
|
params:
|
||||||
AVX2_CFLAGS: -mavx2
|
AVX2_CFLAGS: -mavx2
|
||||||
SSSE3_CFLAGS: -mssse3
|
SSSE3_CFLAGS: -mssse3
|
||||||
|
|
@ -47,35 +56,34 @@
|
||||||
|
|
||||||
- name: create build dir
|
- name: create build dir
|
||||||
file:
|
file:
|
||||||
path: '{{BUILD_DIR}}/CCash/build'
|
path: "{{BUILD_DIR}}/CCash/build"
|
||||||
state: directory
|
state: directory
|
||||||
|
|
||||||
- name: Cmake CCash
|
- name: Cmake CCash
|
||||||
ansible.builtin.command:
|
ansible.builtin.command:
|
||||||
chdir: '{{BUILD_DIR}}/CCash/build'
|
chdir: "{{BUILD_DIR}}/CCash/build"
|
||||||
cmd: |
|
cmd: |
|
||||||
cmake -DDROGON_CONFIG_LOC="{{ BUILD_DIR }}/CCash/config/config.json" -DUSER_SAVE_LOC="{{ BUILD_DIR }}/CCash/config/users.dat" -DAPI_VERSION="{{ API_VERSION }}" -DMIN_API_SUPPORT="{{ MIN_API_SUPPORT }}" ..
|
cmake -DDROGON_CONFIG_LOC="{{ BUILD_DIR }}/CCash/config/config.json" -DUSER_SAVE_LOC="{{ BUILD_DIR }}/CCash/config/users.dat" -DUSE_DEPRECATED_ENDPOINTS="{{ USE_DEPRECATED_ENDPOINTS }}" ..
|
||||||
|
|
||||||
- name: make CCash
|
- name: make CCash
|
||||||
community.general.make:
|
community.general.make:
|
||||||
chdir: '{{BUILD_DIR}}/CCash/build'
|
chdir: "{{BUILD_DIR}}/CCash/build"
|
||||||
params:
|
params:
|
||||||
NUM_THREADS: '-j{{ ansible_processor_vcpus }}'
|
NUM_THREADS: "-j{{ ansible_processor_vcpus }}"
|
||||||
|
|
||||||
|
|
||||||
- name: create users file
|
- name: create users file
|
||||||
ansible.builtin.command:
|
ansible.builtin.command:
|
||||||
chdir: '{{BUILD_DIR}}/CCash/build/'
|
chdir: "{{BUILD_DIR}}/CCash/build/"
|
||||||
cmd: ./bank
|
cmd: ./bank
|
||||||
creates: '{{ BUILD_DIR }}/CCash/config/users.dat'
|
creates: "{{ BUILD_DIR }}/CCash/config/users.dat"
|
||||||
- name: chmod +x ssl.sh
|
- name: chmod +x ssl.sh
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
mode: u+x
|
mode: u+x
|
||||||
path: '{{BUILD_DIR}}/CCash/config/ssl.sh'
|
path: "{{BUILD_DIR}}/CCash/config/ssl.sh"
|
||||||
- name: generate default ssl
|
- name: generate default ssl
|
||||||
ansible.builtin.command:
|
ansible.builtin.command:
|
||||||
chdir: '{{BUILD_DIR}}/CCash/config/'
|
chdir: "{{BUILD_DIR}}/CCash/config/"
|
||||||
cmd: './ssl.sh'
|
cmd: "./ssl.sh"
|
||||||
|
|
||||||
- name: create service file
|
- name: create service file
|
||||||
ansible.builtin.copy:
|
ansible.builtin.copy:
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
---
|
---
|
||||||
BUILD_DIR: '/root'
|
BUILD_DIR: "/root"
|
||||||
ADMIN_A: "admin"
|
ADMIN_A: "admin"
|
||||||
SAVE_FREQ: "2"
|
SAVE_FREQ: "2"
|
||||||
API_VERSION: "2"
|
USE_DEPRECATED_ENDPOINTS: "true"
|
||||||
MIN_API_SUPPORT: "1"
|
|
||||||
|
|
|
||||||
|
|
@ -64,10 +64,10 @@ mkdir build
|
||||||
cd build
|
cd build
|
||||||
```
|
```
|
||||||
|
|
||||||
### CMake Flags
|
### CMake Variables
|
||||||
there are multiple flags responsible configuring CCash:
|
there are multiple flags responsible configuring CCash:
|
||||||
| name | default | description | pros | cons |
|
| name | default | description | pros | cons |
|
||||||
| :--------------------- | :------------------: | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | -------------------------------------------------------- |
|
| :----------------------- | :------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | -------------------------------------------------------- |
|
||||||
| USER_SAVE_LOC | "config/users.dat" | where the users are saved | `N/A` | `N/A` |
|
| USER_SAVE_LOC | "config/users.dat" | where the users are saved | `N/A` | `N/A` |
|
||||||
| DROGON_CONFIG_LOC | "config/config.json" | where the config is located | `N/A` | `N/A` |
|
| DROGON_CONFIG_LOC | "config/config.json" | where the config is located | `N/A` | `N/A` |
|
||||||
| MAX_LOG_SIZE | 100 | max number of logs per user, last `n` transactions. If both this and pre log are toggled to 0 logs will not be compiled. | large history | higher memory usage |
|
| MAX_LOG_SIZE | 100 | max number of logs per user, last `n` transactions. If both this and pre log are toggled to 0 logs will not be compiled. | large history | higher memory usage |
|
||||||
|
|
@ -75,8 +75,7 @@ there are multiple flags responsible configuring CCash:
|
||||||
| MULTI_THREADED | `true` | when `true` the program is compiled to utilize `n` threads which corresponds to how many Cores your CPU has, plus 1 for saving | speed | memory lock overhead is wasteful on single core machines |
|
| MULTI_THREADED | `true` | when `true` the program is compiled to utilize `n` threads which corresponds to how many Cores your CPU has, plus 1 for saving | speed | memory lock overhead is wasteful on single core machines |
|
||||||
| RETURN_ON_DEL_NAME | `N/A` | when defined, return on delete will be toggled and any accounts deleted will send their funds to the defined account, this prevent currency destruction | prevents destruction of currency | deleting accounts is made slower |
|
| RETURN_ON_DEL_NAME | `N/A` | when defined, return on delete will be toggled and any accounts deleted will send their funds to the defined account, this prevent currency destruction | prevents destruction of currency | deleting accounts is made slower |
|
||||||
| ADD_USER_OPEN | `true` | anybody can make a new account, if set to false only admins can add accounts via `AdminAddUser()` | `N/A` | spamming new users |
|
| ADD_USER_OPEN | `true` | anybody can make a new account, if set to false only admins can add accounts via `AdminAddUser()` | `N/A` | spamming new users |
|
||||||
| API_VERSION | 2 | the maximum api version's endpoints to be compiled. By default `API_VERSION` is set to the newest version | `N/A` | `N/A` |
|
| USE_DEPRECATED_ENDPOINTS | `true` | some endpoints have newer versions making them obsolete but old programs might still call these endpoints so they are simply marked deprecated. | supports old programs | old endpoints can be ineffecient |
|
||||||
| MIN_API_SUPPORT | 1 | the minimum api version's endpoints to be compiled. By default set to 1 for full backwards compatibility, setting to the same value as `API_VERSION` would disable backwards compatiblity | `N/A` | `N/A` |
|
|
||||||
|
|
||||||
EXAMPLE:
|
EXAMPLE:
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -2,27 +2,23 @@
|
||||||
|
|
||||||
## Key
|
## Key
|
||||||
| description | symbol |
|
| description | symbol |
|
||||||
| :-------------------: | :----------------- |
|
| :-----------------------: | :----------------- |
|
||||||
| supported | :heavy_check_mark: |
|
| supported | :heavy_check_mark: |
|
||||||
| calls older endpoints | ⚠ |
|
| uses deprecated endpoints | ⚠ |
|
||||||
| calls newer endpoints | :x: |
|
|
||||||
|
|
||||||
Just because a service calls old endpoints, doesn't mean the service will not work under that version of CCash. As long as the `MIN_API_SUPPORT` is less than or equal to the required version's endpoints, then the connected service can call the old CCash endpoints. **By default `MIN_API_SUPPORT` is 1 (complete backwards compatibility) making all ⚠ effectively :heavy_check_mark:**.
|
|
||||||
|
|
||||||
## General
|
## General
|
||||||
| author | name | v1 | v2 | image |
|
| author | name | v1 | image |
|
||||||
| :-------------------------------------- | ----------------------------------------------------------- | :----------------: | :---: | :-------------------------------------------------------------------------------------------------------------: |
|
| :-------------------------------------- | ----------------------------------------------------------- | :----------------: | :-------------------------------------------------------------------------------------------------------------: |
|
||||||
| [Expand](https://github.com/Expand-sys) | [Web Frontend](https://github.com/Expand-sys/ccashfrontend) | :heavy_check_mark: | ⚠ |  |
|
| [Expand](https://github.com/Expand-sys) | [Web Frontend](https://github.com/Expand-sys/ccashfrontend) | ⚠ |  |
|
||||||
| [Expand](https://github.com/Expand-sys) | [Discord Bot](https://github.com/Expand-sys/ccashbot) | :heavy_check_mark: | ⚠ | |
|
| [Expand](https://github.com/Expand-sys) | [Discord Bot](https://github.com/Expand-sys/ccashbot) | :heavy_check_mark: | |
|
||||||
| [ArcNyxx](https://github.com/ArcNyxx) | [CCash CLI](https://github.com/ArcNyxx/ccash_cmd) | :heavy_check_mark: | ⚠ | |
|
| [ArcNyxx](https://github.com/ArcNyxx) | [CCash CLI](https://github.com/ArcNyxx/ccash_cmd) | ⚠ | |
|
||||||
|
|
||||||
## Minecraft
|
## Minecraft
|
||||||
| author | name | v1 | v2 | image |
|
| author | name | support | image |
|
||||||
| :------------------------------------------ | --------------------------------------------------------------------------- | :----------------: | :----------------: | :-------------------------------------------------------------------------------------------------------------: |
|
| :------------------------------------------ | --------------------------------------------------------------------------- | :----------------: | :-------------------------------------------------------------------------------------------------------------: |
|
||||||
| [Reactified](https://github.com/Reactified) | [Shop](https://github.com/Reactified/rpm/tree/main/packages/ccash-shop) | :heavy_check_mark: | ⚠ |  |
|
| [Reactified](https://github.com/Reactified) | [Shop](https://github.com/Reactified/rpm/tree/main/packages/ccash-shop) | :heavy_check_mark: |  |
|
||||||
| [Reactified](https://github.com/Reactified) | [Wallet](https://github.com/Reactified/rpm/tree/main/packages/ccash-wallet) | :heavy_check_mark: | ⚠ |  |
|
| [Reactified](https://github.com/Reactified) | [Wallet](https://github.com/Reactified/rpm/tree/main/packages/ccash-wallet) | ⚠ |  |
|
||||||
| [Reactified](https://github.com/Reactified) | [ATM](https://github.com/Reactified/rpm/tree/main/packages/ccash-bank) | :heavy_check_mark: | ⚠ |  |
|
| [Reactified](https://github.com/Reactified) | [ATM](https://github.com/Reactified/rpm/tree/main/packages/ccash-bank) | :heavy_check_mark: |  |
|
||||||
| [STBoyden](https://github.com/STBoyden) | Commodities Exchange (in-development) | :x: | :heavy_check_mark: | |
|
| [STBoyden](https://github.com/STBoyden) | Commodities Exchange (in-development) | :heavy_check_mark: | |
|
||||||
|
|
||||||
## Desired
|
## Desired
|
||||||
| idea | description |
|
| idea | description |
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
[PREVIOUS PAGE](explanation.md) | [NEXT PAGE](endpoints.md)
|
[PREVIOUS PAGE](explanation.md) | [NEXT PAGE](endpoints.md)
|
||||||
|
|
||||||
note: all CCash version's API are backwards compatible, so while a language's API may not support the newest CCash endpoints it can still use the old endpoints.
|
CCash is backwards compatible, so even if a language API does not support the newester version it can still call the old endpoints.
|
||||||
| author | language | | v1 endpoints | v2 endpoints |
|
| author | language | | newest CCash supported version |
|
||||||
| :------------------------------------------- | :------: | ------------------------------------------------------------------- | :----------------: | :----------: |
|
| :------------------------------------------- | :------: | ------------------------------------------------------------------- | :----------------------------: |
|
||||||
| [SpaceCat](https://github.com/SpaceCat-Chan) | CCLua | [CatsCCashLuaApi](https://github.com/SpaceCat-Chan/CatsCCashLuaApi) | :heavy_check_mark: | :x: |
|
| [SpaceCat](https://github.com/SpaceCat-Chan) | CCLua | [CatsCCashLuaApi](https://github.com/SpaceCat-Chan/CatsCCashLuaApi) | `v1.4.3` |
|
||||||
| [Doggo](https://github.com/ArcNyxx) | Python | [CCashPythonClient](https://github.com/ArcNyxx/ccash_python_client) | :heavy_check_mark: | :x: |
|
| [Doggo](https://github.com/ArcNyxx) | Python | [CCashPythonClient](https://github.com/ArcNyxx/ccash_python_client) | `v1.4.3` |
|
||||||
| [Sam](https://github.com/STBoyden) | Rust | [ccash rs](https://github.com/STBoyden/ccash-rs) | :heavy_check_mark: | :x: |
|
| [Sam](https://github.com/STBoyden) | Rust | [ccash rs](https://github.com/STBoyden/ccash-rs) | `v1.4.3` |
|
||||||
|
|
||||||
for example here is a demo program for the lua API by SpaceCat
|
for example here is a demo program for the lua API by SpaceCat
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,21 +10,20 @@
|
||||||
|
|
||||||
`A` - Admin, same as `U` but in addition requires username supplied be equal to the admin account username
|
`A` - Admin, same as `U` but in addition requires username supplied be equal to the admin account username
|
||||||
|
|
||||||
:heavy_check_mark:
|
⚠ - Deprecated endpoint
|
||||||
:x:
|
|
||||||
|
:no_entry: - Defunct endpoint
|
||||||
|
|
||||||
## all error responses have JSON string along with them to describe
|
## all error responses have JSON string along with them to describe
|
||||||
|
|
||||||
## all endpoint paths start with api/v{n} where n is whatever version you're requesting e.g api/v2
|
|
||||||
|
|
||||||
### Usage endpoints
|
### Usage endpoints
|
||||||
| name | purpose | json input | path | HTTP Method | correct status | return type | return value | Jresp | Jreq | A | U |
|
| name | added on | purpose | json input | path | HTTP Method | correct status | return type | return value | Jresp | Jreq | A | U |
|
||||||
| :------------- | ------------------------------------------------------------------------------ | -------------------------------- | ------------------------ | :---------: | :------------: | :--------------: | :------------------------------------------------------------------------: | :----------------: | :----------------: | :---: | :----------------: |
|
| :------------- | :------: | ------------------------------------------------------------------------------ | -------------------------------- | ------------------------------- | :---------: | :------------: | :--------------: | :------------------------------------------------------------------------: | :----------------: | :----------------: | :---: | :----------------: |
|
||||||
| GetBal | retrieving the balance of a given user, `{name}` | `N/A` | user/balance?name={name} | `GET` | 200 | uint32 | the user's balance | :heavy_check_mark: | :x: | :x: | :x: |
|
| GetBal | `v1.2.3` | retrieving the balance of a given user, `{name}` | `N/A` | api/v1/user/balance?name={name} | `GET` | 200 | uint32 | the user's balance | :heavy_check_mark: | :x: | :x: | :x: |
|
||||||
| GetLog | retrieves the logs of a given user, length varies by server configuration | `N/A` | user/log | `GET` | 200 | array of objects | [{"to":string, "from":string, "amount":uint32, "time":int64}] | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: |
|
| GetLog | `v1.2.3` | retrieves the logs of a given user, length varies by server configuration | `N/A` | ⚠ api/v1/user/log | `GET` | 200 | array of objects | [{"to":string, "from":string, "amount":uint32, "time":int64}] | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: |
|
||||||
| GetLogV2 | retrieves the logs of a given user, length varies by server configuration | `N/A` | user/log | `GET` | 200 | array of objects | [{"counterparty":string, "receiving":bool, "amount":uint32, "time":int64}] | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: |
|
| GetLogV2 | `v1.5.3` | retrieves the logs of a given user, length varies by server configuration | `N/A` | api/v2/user/log | `GET` | 200 | array of objects | [{"counterparty":string, "receiving":bool, "amount":uint32, "time":int64}] | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: |
|
||||||
| SendFunds | sends funds from the authenticated user to the user `{name}` given in the json | {"name":string, "amount":uint32} | user/transfer | `POST` | 200 | uint32 | the user's balance after the transaction | :heavy_check_mark: | :heavy_check_mark: | :x: | :heavy_check_mark: |
|
| SendFunds | `v1.2.3` | sends funds from the authenticated user to the user `{name}` given in the json | {"name":string, "amount":uint32} | api/v1/user/transfer | `POST` | 200 | uint32 | the user's balance after the transaction | :heavy_check_mark: | :heavy_check_mark: | :x: | :heavy_check_mark: |
|
||||||
| VerifyPassword | verifies the credentials, used for connected services for ease of use | `N/A` | user/verify_password | `POST` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: |
|
| VerifyPassword | `v1.2.3` | verifies the credentials, used for connected services for ease of use | `N/A` | api/v1/user/verify_password | `POST` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: |
|
||||||
|
|
||||||
### Usage enpoint errors
|
### Usage enpoint errors
|
||||||
| name | 400 | 401 | 404 | 406 |
|
| name | 400 | 401 | 404 | 406 |
|
||||||
|
|
@ -35,22 +34,13 @@
|
||||||
| SendFunds | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
| SendFunds | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||||
| VerifyPassword | :x: | :heavy_check_mark: | :x: | :heavy_check_mark: |
|
| VerifyPassword | :x: | :heavy_check_mark: | :x: | :heavy_check_mark: |
|
||||||
|
|
||||||
### Usage endpoint support
|
|
||||||
| name | v1 | v2 |
|
|
||||||
| :------------- | :----------------: | :----------------: |
|
|
||||||
| GetBal | :heavy_check_mark: | :heavy_check_mark: |
|
|
||||||
| GetLog | :heavy_check_mark: | :x: |
|
|
||||||
| GetLogV2 | :x: | :heavy_check_mark: |
|
|
||||||
| SendFunds | :heavy_check_mark: | :heavy_check_mark: |
|
|
||||||
| VerifyPassword | :heavy_check_mark: | :heavy_check_mark: |
|
|
||||||
|
|
||||||
### Meta Usage endpoints
|
### Meta Usage endpoints
|
||||||
| name | purpose | json input | path | HTTP Method | correct status | return type | return value | Jresp | Jreq | A | U |
|
| name | added on | purpose | json input | path | HTTP Method | correct status | return type | return value | Jresp | Jreq | A | U |
|
||||||
| :------------------ | -------------------------------------------------------------------------------------------------- | ------------------------------- | -------------------------- | :---------: | :------------: | :---------: | :----------------------------: | :----------------: | :----------------: | :----------------: | :----------------: |
|
| :------------------ | :------: | -------------------------------------------------------------------------------------------------- | ------------------------------- | --------------------------------- | :---------: | :------------: | :---------: | :----------------------------: | :----------------: | :----------------: | :----------------: | :----------------: |
|
||||||
| ChangePassword | changes the password of the Authenticated user | {"pass":string} | user/change_password | `PATCH` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :heavy_check_mark: | :x: | :heavy_check_mark: |
|
| ChangePassword | `v1.2.3` | changes the password of the Authenticated user | {"pass":string} | api/v1/user/change_password | `PATCH` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :heavy_check_mark: | :x: | :heavy_check_mark: |
|
||||||
| AdminChangePassword | changes the password of a given user `{name}` | {"name":string,"pass":string} | admin/user/change_password | `PATCH` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: |
|
| AdminChangePassword | `v1.2.3` | changes the password of a given user `{name}` | {"name":string,"pass":string} | api/v1/admin/user/change_password | `PATCH` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: |
|
||||||
| SetBal | sets the balance of a given user `{name}` | {"name":string,"amount":uint32} | admin/set_balance | `PATCH` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: |
|
| SetBal | `v1.2.3` | sets the balance of a given user `{name}` | {"name":string,"amount":uint32} | api/v1/admin/set_balance | `PATCH` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: |
|
||||||
| ImpactBal | modifies the user `{name}`'s balance by `{amount}` if positive itll add, if negative itll subtract | {"name":string,"amount":int64} | admin/impact_balance | `POST` | 200 | uint32 | new balance after modification | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: |
|
| ImpactBal | `v1.2.3` | modifies the user `{name}`'s balance by `{amount}` if positive itll add, if negative itll subtract | {"name":string,"amount":int64} | api/v1/admin/impact_balance | `POST` | 200 | uint32 | new balance after modification | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: |
|
||||||
|
|
||||||
### Meta Usage endpoint errors
|
### Meta Usage endpoint errors
|
||||||
| name | 400 | 401 | 404 | 406 |
|
| name | 400 | 401 | 404 | 406 |
|
||||||
|
|
@ -60,23 +50,15 @@
|
||||||
| SetBal | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
| SetBal | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||||
| ImpactBal | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
| ImpactBal | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|
||||||
|
|
||||||
### Meta Usage endpoint support
|
|
||||||
| name | v1 | v2 |
|
|
||||||
| :------------------ | :----------------: | :----------------: |
|
|
||||||
| ChangePassword | :heavy_check_mark: | :heavy_check_mark: |
|
|
||||||
| AdminChangePassword | :heavy_check_mark: | :heavy_check_mark: |
|
|
||||||
| SetBal | :heavy_check_mark: | :heavy_check_mark: |
|
|
||||||
| ImpactBal | :heavy_check_mark: | :heavy_check_mark: |
|
|
||||||
|
|
||||||
### Sytem Usage endpoints
|
### Sytem Usage endpoints
|
||||||
| name | purpose | json input | path | HTTP Method | correct status | return type | return value | Jresp | Jreq | A | U |
|
| name | added on | purpose | json input | path | HTTP Method | correct status | return type | return value | Jresp | Jreq | A | U |
|
||||||
| :----------------- | ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ----------------------- | :---------: | :------------: | :---------: | :---------------------------------------------------------------------------------------------------------: | :----------------: | :----------------: | :----------------: | :---: |
|
| :----------------- | :------: | ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ------------------------------ | :---------: | :------------: | :---------: | :---------------------------------------------------------------------------------------------------------: | :----------------: | :----------------: | :----------------: | :---: |
|
||||||
| Help | redirects to GitHub projects Docs | `N/A` | help | `GET` | 301 | `N/A` | `N/A` | :x: | :x: | :x: | :x: |
|
| Help | `v0.1` | redirects to GitHub projects Docs | `N/A` | api/help | `GET` | 301 | `N/A` | `N/A` | :x: | :x: | :x: | :x: |
|
||||||
| Close | saves & closes the CCash webserver | `N/A` | admin/shutdown | `POST` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :x: | :heavy_check_mark: | :x: |
|
| Close | `v1.2.3` | saves & closes the CCash webserver | `N/A` | api/v1/admin/shutdown | `POST` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :x: | :heavy_check_mark: | :x: |
|
||||||
| Contains | checks wether a user exists | `N/A` | user/exists?name={name} | `GET` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :x: | :x: | :x: |
|
| Contains | `v1.2.3` | checks wether a user exists | `N/A` | api/v1/user/exists?name={name} | `GET` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :x: | :x: | :x: |
|
||||||
| AdminVerifyAccount | checks wether a user is the admin | `N/A` | admin/verify_account | `POST` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :x: | :heavy_check_mark: | :x: |
|
| AdminVerifyAccount | `v1.2.3` | checks wether a user is the admin | `N/A` | api/v1/admin/verify_account | `POST` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :x: | :heavy_check_mark: | :x: |
|
||||||
| PruneUsers | deletes users with most recent transactions older then `{time}` (if logs are enabled) and have less money then `{amount}` | {"time":int64,"amount":uint32} or just {"amount":uint32} | admin/prune_users | `POST` | 200 | uint64 | number of users deleted | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: |
|
| PruneUsers | `v1.2.3` | deletes users with most recent transactions older then `{time}` (if logs are enabled) and have less money then `{amount}` | {"time":int64,"amount":uint32} or just {"amount":uint32} | api/v1/admin/prune_users | `POST` | 200 | uint64 | number of users deleted | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: |
|
||||||
| ApiProperties | properties of the given instance | `N/A` | api/properties | `GET` | 200 | json object | {"version":uint64,"min_version":uint64_t,"max_log":uint64} and "return_on_del":string if feature is enabled | :heavy_check_mark: | :x: | :x: | :x: |
|
| ApiProperties | `v1.2.3` | properties of the given instance | `N/A` | api/properties | `GET` | 200 | json object | {"version":uint64,"min_version":uint64_t,"max_log":uint64} and "return_on_del":string if feature is enabled | :heavy_check_mark: | :x: | :x: | :x: |
|
||||||
|
|
||||||
### System Usage endpoin errors
|
### System Usage endpoin errors
|
||||||
| name | 401 | 404 | 406 |
|
| name | 401 | 404 | 406 |
|
||||||
|
|
@ -88,16 +70,6 @@
|
||||||
| PruneUsers | :heavy_check_mark: | :x: | :heavy_check_mark: |
|
| PruneUsers | :heavy_check_mark: | :x: | :heavy_check_mark: |
|
||||||
| ApiProperties | :x: | :x: | :x: |
|
| ApiProperties | :x: | :x: | :x: |
|
||||||
|
|
||||||
### System Usage endpoint support
|
|
||||||
| name | v1 | v2 |
|
|
||||||
| :----------------- | :----------------: | :----------------: |
|
|
||||||
| Help | `N/A` | `N/A` |
|
|
||||||
| Close | :heavy_check_mark: | :heavy_check_mark: |
|
|
||||||
| Contains | :heavy_check_mark: | :heavy_check_mark: |
|
|
||||||
| AdminVerifyAccount | :heavy_check_mark: | :heavy_check_mark: |
|
|
||||||
| PruneUsers | :heavy_check_mark: | :heavy_check_mark: |
|
|
||||||
| ApiProperties | `N/A` | `N/A` |
|
|
||||||
|
|
||||||
### Username Requirements
|
### Username Requirements
|
||||||
Valid
|
Valid
|
||||||
* lowercase letters
|
* lowercase letters
|
||||||
|
|
@ -106,12 +78,12 @@ Valid
|
||||||
* Length must be atleast 3 and at most 16 characters.
|
* Length must be atleast 3 and at most 16 characters.
|
||||||
|
|
||||||
### User Management endpoints
|
### User Management endpoints
|
||||||
| name | purpose | json input | path | HTTP Method | correct status | return type | return value | Jresp | Jreq | A | U |
|
| name | added on | purpose | json input | path | HTTP Method | correct status | return type | return value | Jresp | Jreq | A | U |
|
||||||
| :----------- | --------------------------------------- | --------------------------------------------- | ------------------- | :---------: | :------------: | :---------: | :----------: | :----------------: | :----------------: | :----------------: | :----------------: |
|
| :----------- | :------: | --------------------------------------- | --------------------------------------------- | -------------------------- | :---------: | :------------: | :---------: | :----------: | :----------------: | :----------------: | :----------------: | :----------------: |
|
||||||
| AddUser | adding a user with a balance of 0 | {"name":string,"pass":string} | user/register | `POST` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :heavy_check_mark: | :x: | :x: |
|
| AddUser | `v1.2.3` | adding a user with a balance of 0 | {"name":string,"pass":string} | api/v1/user/register | `POST` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :heavy_check_mark: | :x: | :x: |
|
||||||
| AdminAddUser | adding a user with an arbitrary balance | {"name":string,"amount":uint32,"pass":string} | admin/user/register | `POST` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: |
|
| AdminAddUser | `v1.2.3` | adding a user with an arbitrary balance | {"name":string,"amount":uint32,"pass":string} | api/v1/admin/user/register | `POST` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: |
|
||||||
| DelSelf | deletes a user | `N/A` | user/delete | `DELETE` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: |
|
| DelSelf | `v1.2.3` | deletes a user | `N/A` | api/v1/user/delete | `DELETE` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: |
|
||||||
| AdminDelUser | deletes a given user `{name}` | {"name":string} | admin/user/delete | `DELETE` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: |
|
| AdminDelUser | `v1.2.3` | deletes a given user `{name}` | {"name":string} | api/v1/admin/user/delete | `DELETE` | 204 | `N/A` | `N/A` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: |
|
||||||
|
|
||||||
### User Management endpoint errors
|
### User Management endpoint errors
|
||||||
| name | 400 | 401 | 404 | 406 | 409 |
|
| name | 400 | 401 | 404 | 406 | 409 |
|
||||||
|
|
@ -120,11 +92,3 @@ Valid
|
||||||
| AdminAddUser | :heavy_check_mark: | :heavy_check_mark: | :x: | :heavy_check_mark: | :heavy_check_mark: |
|
| AdminAddUser | :heavy_check_mark: | :heavy_check_mark: | :x: | :heavy_check_mark: | :heavy_check_mark: |
|
||||||
| DelSelf | :x: | :heavy_check_mark: | :x: | :heavy_check_mark: | :x: |
|
| DelSelf | :x: | :heavy_check_mark: | :x: | :heavy_check_mark: | :x: |
|
||||||
| AdminDelUser | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: |
|
| AdminDelUser | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: |
|
||||||
|
|
||||||
### User Management endpoint support
|
|
||||||
| name | v1 | v2 |
|
|
||||||
| :----------- | :----------------: | :----------------: |
|
|
||||||
| AddUser | :heavy_check_mark: | :heavy_check_mark: |
|
|
||||||
| AdminAddUser | :heavy_check_mark: | :heavy_check_mark: |
|
|
||||||
| DelSelf | :heavy_check_mark: | :heavy_check_mark: |
|
|
||||||
| AdminDelUser | :heavy_check_mark: | :heavy_check_mark: |
|
|
||||||
|
|
|
||||||
|
|
@ -45,13 +45,10 @@ public:
|
||||||
static BankResponse GetBal(const std::string &name) noexcept;
|
static BankResponse GetBal(const std::string &name) noexcept;
|
||||||
|
|
||||||
#if MAX_LOG_SIZE > 0
|
#if MAX_LOG_SIZE > 0
|
||||||
#if MIN_API_SUPPORT == 1
|
#if USE_DEPRECATED_ENDPOINTS
|
||||||
static BankResponse GetLogs(const std::string &name) noexcept;
|
static BankResponse GetLogs(const std::string &name) noexcept;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (API_VERSION >= 2) && (MIN_API_SUPPORT <= 2)
|
|
||||||
static BankResponse GetLogsV2(const std::string &name) noexcept;
|
static BankResponse GetLogsV2(const std::string &name) noexcept;
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static BankResponse SendFunds(const std::string &a_name, const std::string &b_name, uint32_t amount) noexcept;
|
static BankResponse SendFunds(const std::string &a_name, const std::string &b_name, uint32_t amount) noexcept;
|
||||||
|
|
|
||||||
|
|
@ -12,10 +12,10 @@ class api : public HttpController<api>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static void GetBal(req_args, const std::string &name);
|
static void GetBal(req_args, const std::string &name);
|
||||||
|
#if USE_DEPRECATED_ENDPOINTS
|
||||||
static void GetLogs(req_args);
|
static void GetLogs(req_args);
|
||||||
#if (API_VERSION >= 2) && (MIN_API_SUPPORT <= 2)
|
|
||||||
static void GetLogsV2(req_args);
|
|
||||||
#endif
|
#endif
|
||||||
|
static void GetLogsV2(req_args);
|
||||||
static void SendFunds(req_args);
|
static void SendFunds(req_args);
|
||||||
static void VerifyPassword(req_args);
|
static void VerifyPassword(req_args);
|
||||||
|
|
||||||
|
|
@ -41,13 +41,18 @@ public:
|
||||||
METHOD_ADD(api::Help, "/help", Get, Options);
|
METHOD_ADD(api::Help, "/help", Get, Options);
|
||||||
METHOD_ADD(api::ApiProperties, "/properties", Get, Options);
|
METHOD_ADD(api::ApiProperties, "/properties", Get, Options);
|
||||||
|
|
||||||
#if MIN_API_SUPPORT == 1
|
|
||||||
//Usage
|
//Usage
|
||||||
METHOD_ADD(api::GetBal, "/v1/user/balance?name={name}", Get, Options, "JsonFilter<false>");
|
METHOD_ADD(api::GetBal, "/v1/user/balance?name={name}", Get, Options, "JsonFilter<false>");
|
||||||
#if MAX_LOG_SIZE > 0
|
#if MAX_LOG_SIZE > 0
|
||||||
|
#if USE_DEPRECATED_ENDPOINTS
|
||||||
METHOD_ADD(api::GetLogs, "/v1/user/log", Get, Options, "JsonFilter<false>", "UserFilter<true, false>");
|
METHOD_ADD(api::GetLogs, "/v1/user/log", Get, Options, "JsonFilter<false>", "UserFilter<true, false>");
|
||||||
|
#endif
|
||||||
|
METHOD_ADD(api::GetLogsV2, "/v2/user/log", Get, Options, "JsonFilter<false>", "UserFilter<true, false>");
|
||||||
#else
|
#else
|
||||||
|
#if USE_DEPRECATED_ENDPOINTS
|
||||||
METHOD_ADD(api::GetLogs, "/v1/user/log", Get, Options, "JsonFilter<false>");
|
METHOD_ADD(api::GetLogs, "/v1/user/log", Get, Options, "JsonFilter<false>");
|
||||||
|
#endif
|
||||||
|
METHOD_ADD(api::GetLogsV2, "/v2/user/log", Get, Options, "JsonFilter<false>");
|
||||||
#endif
|
#endif
|
||||||
METHOD_ADD(api::SendFunds, "/v1/user/transfer", Post, Options, "JsonFilter<true>", "UserFilter<true, false>"); //expects ["name"](string) and ["amount"](uint32)
|
METHOD_ADD(api::SendFunds, "/v1/user/transfer", Post, Options, "JsonFilter<true>", "UserFilter<true, false>"); //expects ["name"](string) and ["amount"](uint32)
|
||||||
METHOD_ADD(api::VerifyPassword, "/v1/user/verify_password", Post, Options, "UserFilter<false, false>", "JsonFilter<false>");
|
METHOD_ADD(api::VerifyPassword, "/v1/user/verify_password", Post, Options, "UserFilter<false, false>", "JsonFilter<false>");
|
||||||
|
|
@ -69,37 +74,6 @@ public:
|
||||||
METHOD_ADD(api::AdminAddUser, "/v1/admin/user/register", Post, Options, "JsonFilter<true>", "UserFilter<false, true>"); //expects ["name"](string) ["amount"](uint32) ["pass"](string)
|
METHOD_ADD(api::AdminAddUser, "/v1/admin/user/register", Post, Options, "JsonFilter<true>", "UserFilter<false, true>"); //expects ["name"](string) ["amount"](uint32) ["pass"](string)
|
||||||
METHOD_ADD(api::DelSelf, "/v1/user/delete", Delete, Options, "UserFilter<true, false>", "JsonFilter<false>");
|
METHOD_ADD(api::DelSelf, "/v1/user/delete", Delete, Options, "UserFilter<true, false>", "JsonFilter<false>");
|
||||||
METHOD_ADD(api::AdminDelUser, "/v1/admin/user/delete", Delete, Options, "JsonFilter<true>", "UserFilter<false, true>"); //expects ["name"](string)
|
METHOD_ADD(api::AdminDelUser, "/v1/admin/user/delete", Delete, Options, "JsonFilter<true>", "UserFilter<false, true>"); //expects ["name"](string)
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (API_VERSION >= 2) && (MIN_API_SUPPORT <= 2)
|
|
||||||
//Usage
|
|
||||||
METHOD_ADD(api::GetBal, "/v2/user/balance?name={name}", Get, Options, "JsonFilter<false>");
|
|
||||||
#if MAX_LOG_SIZE > 0
|
|
||||||
METHOD_ADD(api::GetLogsV2, "/v2/user/log", Get, Options, "JsonFilter<false>", "UserFilter<true, false>");
|
|
||||||
#else
|
|
||||||
METHOD_ADD(api::GetLogsV2, "/v2/user/log", Get, Options, "JsonFilter<false>");
|
|
||||||
#endif
|
|
||||||
METHOD_ADD(api::SendFunds, "/v2/user/transfer", Post, Options, "JsonFilter<true>", "UserFilter<true, false>"); //expects ["name"](string) and ["amount"](uint32)
|
|
||||||
METHOD_ADD(api::VerifyPassword, "/v2/user/verify_password", Post, Options, "UserFilter<false, false>", "JsonFilter<false>");
|
|
||||||
|
|
||||||
//Meta Usage
|
|
||||||
METHOD_ADD(api::ChangePassword, "/v2/user/change_password", Patch, Options, "JsonFilter<true>", "UserFilter<true, false>"); //expects ["pass"](string)
|
|
||||||
METHOD_ADD(api::AdminChangePassword, "/v2/admin/user/change_password", Patch, Options, "JsonFilter<true>", "UserFilter<false, true>"); //expects ["name"](string) and ["pass"](string)
|
|
||||||
METHOD_ADD(api::SetBal, "/v2/admin/set_balance", Patch, Options, "JsonFilter<true>", "UserFilter<false, true>"); //expects ["name"](string) and ["amount"](uint32)
|
|
||||||
METHOD_ADD(api::ImpactBal, "/v2/admin/impact_balance", Post, Options, "JsonFilter<true>", "UserFilter<false, true>"); //expects ["name"](string) and ["amount"](uint32)
|
|
||||||
|
|
||||||
//System Usage
|
|
||||||
METHOD_ADD(api::Close, "/v2/admin/shutdown", Post, Options, "UserFilter<false, true>", "JsonFilter<false>");
|
|
||||||
METHOD_ADD(api::Contains, "/v2/user/exists?name={name}", Get, Options, "JsonFilter<false>");
|
|
||||||
METHOD_ADD(api::AdminVerifyAccount, "/v2/admin/verify_account", Post, Options, "UserFilter<false, true>", "JsonFilter<false>");
|
|
||||||
METHOD_ADD(api::PruneUsers, "/v2/admin/prune_users", Post, "UserFilter<false, true>", "JsonFilter<true>"); //expects ["time"](int64) and ["amount"](uint32)
|
|
||||||
|
|
||||||
//User Managment
|
|
||||||
METHOD_ADD(api::AddUser, "/v2/user/register", Post, Options); //expects ["name"](string) ["pass"](string)
|
|
||||||
METHOD_ADD(api::AdminAddUser, "/v2/admin/user/register", Post, Options, "JsonFilter<true>", "UserFilter<false, true>"); //expects ["name"](string) ["amount"](uint32) ["pass"](string)
|
|
||||||
METHOD_ADD(api::DelSelf, "/v2/user/delete", Delete, Options, "UserFilter<true, false>", "JsonFilter<false>");
|
|
||||||
METHOD_ADD(api::AdminDelUser, "/v2/admin/user/delete", Delete, Options, "JsonFilter<true>", "UserFilter<false, true>"); //expects ["name"](string)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
METHOD_LIST_END
|
METHOD_LIST_END
|
||||||
};
|
};
|
||||||
|
|
@ -11,25 +11,20 @@ struct Log
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
#if MIN_API_SUPPORT == 1
|
#if USE_DEPRECATED_ENDPOINTS
|
||||||
ChangeFlag<true> log_flag;
|
ChangeFlag<true> log_flag;
|
||||||
std::string log_snapshot = "null";
|
std::string log_snapshot = "null";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (API_VERSION >= 2) && (MIN_API_SUPPORT <= 2)
|
|
||||||
ChangeFlag<true> log_flag_v2;
|
ChangeFlag<true> log_flag_v2;
|
||||||
std::string log_snapshot_v2 = "null";
|
std::string log_snapshot_v2 = "null";
|
||||||
#endif
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::deque<Transaction> data;
|
std::deque<Transaction> data;
|
||||||
|
|
||||||
#if MIN_API_SUPPORT == 1
|
#if USE_DEPRECATED_ENDPOINTS
|
||||||
std::string GetLogs(const std::string& name) noexcept;
|
std::string GetLogs(const std::string& name) noexcept;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (API_VERSION >= 2) && (MIN_API_SUPPORT <= 2)
|
|
||||||
std::string GetLogsV2() noexcept;
|
std::string GetLogsV2() noexcept;
|
||||||
#endif
|
|
||||||
void AddTrans(const std::string &counterparty_str, bool receiving, uint32_t amount, time_t time) noexcept;
|
void AddTrans(const std::string &counterparty_str, bool receiving, uint32_t amount, time_t time) noexcept;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
5
main.cpp
5
main.cpp
|
|
@ -34,7 +34,7 @@ int main(int argc, char **argv)
|
||||||
uint8_t temp[16]{16, 0, 0, 0, 4};
|
uint8_t temp[16]{16, 0, 0, 0, 4};
|
||||||
users_save.write((char *)temp, 16);
|
users_save.write((char *)temp, 16);
|
||||||
users_save.close();
|
users_save.close();
|
||||||
std::cout << "User save file generated\nUsage: sudo ./bank <admin account name> <saving frequency in minutes> [daemon flag]\n";
|
std::cout << "User save file generated\nUsage: sudo ./bank <admin account name> <saving frequency in minutes> [daemon flag {default: false}]\n";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -44,7 +44,7 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
if (argc < 3)
|
if (argc < 3)
|
||||||
{
|
{
|
||||||
std::cerr << "Usage: sudo ./bank <admin account> <saving frequency in minutes> [daemon flag]\n";
|
std::cerr << "Usage: sudo ./bank <admin account> <saving frequency in minutes> [daemon flag {default: false}]\n";
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (geteuid() != 0)
|
if (geteuid() != 0)
|
||||||
|
|
@ -54,7 +54,6 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
const unsigned long saving_freq = std::stoul(std::string(argv[2]));
|
const unsigned long saving_freq = std::stoul(std::string(argv[2]));
|
||||||
std::cout
|
std::cout
|
||||||
<< "\nAPI Version : " << API_VERSION
|
|
||||||
<< "\n\nAVX : " << (__builtin_cpu_supports("avx") ? "enabled" : "disabled")
|
<< "\n\nAVX : " << (__builtin_cpu_supports("avx") ? "enabled" : "disabled")
|
||||||
<< "\nAVX 2 : " << (__builtin_cpu_supports("avx2") ? "enabled" : "disabled")
|
<< "\nAVX 2 : " << (__builtin_cpu_supports("avx2") ? "enabled" : "disabled")
|
||||||
<< "\nSSE 2 : " << (__builtin_cpu_supports("sse2") ? "enabled" : "disabled")
|
<< "\nSSE 2 : " << (__builtin_cpu_supports("sse2") ? "enabled" : "disabled")
|
||||||
|
|
|
||||||
|
|
@ -85,9 +85,10 @@ BankResponse Bank::GetBal(const std::string &name) noexcept
|
||||||
return {k200OK, std::to_string(res)};
|
return {k200OK, std::to_string(res)};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if MAX_LOG_SIZE > 0
|
#if MAX_LOG_SIZE > 0
|
||||||
|
|
||||||
#if MIN_API_SUPPORT == 1
|
#if USE_DEPRECATED_ENDPOINTS
|
||||||
BankResponse Bank::GetLogs(const std::string &name) noexcept
|
BankResponse Bank::GetLogs(const std::string &name) noexcept
|
||||||
{
|
{
|
||||||
BankResponse res;
|
BankResponse res;
|
||||||
|
|
@ -102,7 +103,6 @@ BankResponse Bank::GetLogs(const std::string &name) noexcept
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (API_VERSION >= 2) && (MIN_API_SUPPORT <= 2)
|
|
||||||
BankResponse Bank::GetLogsV2(const std::string &name) noexcept
|
BankResponse Bank::GetLogsV2(const std::string &name) noexcept
|
||||||
{
|
{
|
||||||
BankResponse res;
|
BankResponse res;
|
||||||
|
|
@ -115,7 +115,6 @@ BankResponse Bank::GetLogsV2(const std::string &name) noexcept
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -241,6 +240,7 @@ BankResponse Bank::PruneUsers(uint32_t threshold_bal) noexcept
|
||||||
#else
|
#else
|
||||||
if (Bank::users.erase_if(u.first, [threshold_time, threshold_bal, &deleted_count](User &u) {
|
if (Bank::users.erase_if(u.first, [threshold_time, threshold_bal, &deleted_count](User &u) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return ((!u.log.data.size() || u.log.data.back().time < threshold_time) && u.balance < threshold_bal);
|
return ((!u.log.data.size() || u.log.data.back().time < threshold_time) && u.balance < threshold_bal);
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
|
@ -250,8 +250,8 @@ BankResponse Bank::PruneUsers(uint32_t threshold_bal) noexcept
|
||||||
#else
|
#else
|
||||||
if (Bank::users.erase_if(u.first, [threshold_bal, &deleted_count](User &u) {
|
if (Bank::users.erase_if(u.first, [threshold_bal, &deleted_count](User &u) {
|
||||||
#endif
|
#endif
|
||||||
return (u.balance < threshold_bal);
|
|
||||||
|
|
||||||
|
return (u.balance < threshold_bal);
|
||||||
#endif
|
#endif
|
||||||
}))
|
}))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ void api::GetBal(req_args, const std::string &name)
|
||||||
RESPONSE_PARSE(Bank::GetBal(name));
|
RESPONSE_PARSE(Bank::GetBal(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if MIN_API_SUPPORT == 1
|
#if USE_DEPRECATED_ENDPOINTS
|
||||||
void api::GetLogs(req_args)
|
void api::GetLogs(req_args)
|
||||||
{
|
{
|
||||||
#if MAX_LOG_SIZE > 0
|
#if MAX_LOG_SIZE > 0
|
||||||
|
|
@ -42,7 +42,6 @@ void api::GetLogs(req_args)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (API_VERSION >= 2) && (MIN_API_SUPPORT <= 2)
|
|
||||||
void api::GetLogsV2(req_args)
|
void api::GetLogsV2(req_args)
|
||||||
{
|
{
|
||||||
#if MAX_LOG_SIZE > 0
|
#if MAX_LOG_SIZE > 0
|
||||||
|
|
@ -54,7 +53,6 @@ void api::GetLogsV2(req_args)
|
||||||
callback(resp);
|
callback(resp);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
void api::SendFunds(req_args)
|
void api::SendFunds(req_args)
|
||||||
{
|
{
|
||||||
|
|
@ -220,7 +218,7 @@ void api::AdminVerifyAccount(req_args)
|
||||||
}
|
}
|
||||||
void api::ApiProperties(req_args)
|
void api::ApiProperties(req_args)
|
||||||
{
|
{
|
||||||
std::string info = "{\"version\":" + std::to_string(API_VERSION) + ",\"min_version\":" + std::to_string(MIN_API_SUPPORT) + ",\"max_log\":" + std::to_string(MAX_LOG_SIZE) + ",\"add_user_open\":" + std::to_string(ADD_USER_OPEN);
|
std::string info = "{\"max_log\":" + std::to_string(MAX_LOG_SIZE) + ",\"add_user_open\":" + std::to_string(ADD_USER_OPEN);
|
||||||
if constexpr (RETURN_ON_DEL)
|
if constexpr (RETURN_ON_DEL)
|
||||||
{
|
{
|
||||||
info += ",\"return_on_del\":\"" + std::string(return_account) + "\"}";
|
info += ",\"return_on_del\":\"" + std::string(return_account) + "\"}";
|
||||||
|
|
|
||||||
10
src/log.cpp
10
src/log.cpp
|
|
@ -2,14 +2,10 @@
|
||||||
|
|
||||||
void Log::AddTrans(const std::string &counterparty_str, bool receiving, uint32_t amount, time_t time) noexcept
|
void Log::AddTrans(const std::string &counterparty_str, bool receiving, uint32_t amount, time_t time) noexcept
|
||||||
{
|
{
|
||||||
|
#if USE_DEPRECATED_ENDPOINTS
|
||||||
#if MIN_API_SUPPORT == 1
|
|
||||||
log_flag.SetChangesOn();
|
log_flag.SetChangesOn();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (API_VERSION >= 2) && (MIN_API_SUPPORT <= 2)
|
|
||||||
log_flag_v2.SetChangesOn();
|
log_flag_v2.SetChangesOn();
|
||||||
#endif
|
|
||||||
|
|
||||||
if (data.size() == MAX_LOG_SIZE)
|
if (data.size() == MAX_LOG_SIZE)
|
||||||
{
|
{
|
||||||
|
|
@ -18,7 +14,7 @@ void Log::AddTrans(const std::string &counterparty_str, bool receiving, uint32_t
|
||||||
data.emplace_back(counterparty_str, receiving, amount, time);
|
data.emplace_back(counterparty_str, receiving, amount, time);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if MIN_API_SUPPORT == 1
|
#if USE_DEPRECATED_ENDPOINTS
|
||||||
std::string Log::GetLogs(const std::string& name) noexcept
|
std::string Log::GetLogs(const std::string& name) noexcept
|
||||||
{
|
{
|
||||||
if (log_flag.GetChangeState() && data.size()) //if there are changes
|
if (log_flag.GetChangeState() && data.size()) //if there are changes
|
||||||
|
|
@ -51,7 +47,6 @@ std::string Log::GetLogs(const std::string& name) noexcept
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (API_VERSION >= 2) && (MIN_API_SUPPORT <= 2)
|
|
||||||
std::string Log::GetLogsV2() noexcept
|
std::string Log::GetLogsV2() noexcept
|
||||||
{
|
{
|
||||||
if (log_flag_v2.GetChangeState() && data.size()) //if there are changes
|
if (log_flag_v2.GetChangeState() && data.size()) //if there are changes
|
||||||
|
|
@ -82,4 +77,3 @@ std::string Log::GetLogsV2() noexcept
|
||||||
|
|
||||||
return log_snapshot_v2;
|
return log_snapshot_v2;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue