From e68257d6c9160bfbf331a88c8d172c1e9447babc Mon Sep 17 00:00:00 2001 From: Donald Zou Date: Thu, 15 Aug 2024 23:20:29 -0400 Subject: [PATCH] Updated some documentations --- docs/api-documents.md | 266 +++++++++++++++++- src/dashboard.py | 18 +- .../src/stores/DashboardConfigurationStore.js | 14 +- 3 files changed, 280 insertions(+), 18 deletions(-) diff --git a/docs/api-documents.md b/docs/api-documents.md index 7460c33..ad68293 100644 --- a/docs/api-documents.md +++ b/docs/api-documents.md @@ -4,6 +4,55 @@ **Created by: Donald Zou** + +* [📖 API Document for WGDashboard](#-api-document-for-wgdashboard) + * [🔑 How to use API Key?](#-how-to-use-api-key) + * [Create API Key](#create-api-key) + * [Use API Key](#use-api-key) + * [API Endpoints](#api-endpoints) + * [Handshake to Server](#handshake-to-server) + * [Request](#request) + * [Response](#response) + * [Validate Authentication](#validate-authentication) + * [Request](#request-1) + * [Response](#response-1) + * [Authenticate](#authenticate) + * [Request](#request-2) + * [Body Parameters](#body-parameters) + * [Response](#response-2) + * [Sign Out](#sign-out) + * [Request](#request-3) + * [Response](#response-3) + * [Get WireGuard Configurations](#get-wireguard-configurations) + * [Request](#request-4) + * [Response](#response-4) + * [Add WireGuard Configuration](#add-wireguard-configuration) + * [Request](#request-5) + * [Body Parameters](#body-parameters-1) + * [Response](#response-5) + * [Toggle WireGuard Configuration](#toggle-wireguard-configuration) + * [Request](#request-6) + * [Query String Parameter](#query-string-parameter) + * [Response](#response-6) + * [Get WGDashboard Configuration](#get-wgdashboard-configuration) + * [Request](#request-7) + * [Response](#response-7) + * [Update WGDashboard Configuration Item](#update-wgdashboard-configuration-item) + * [Request](#request-8) + * [Body Parameters](#body-parameters-2) + * [Response](#response-8) + * [Get WGDashboard API Keys](#get-wgdashboard-api-keys) + * [Request](#request-9) + * [Response](#response-9) + * [Add WGDashboard API Key](#add-wgdashboard-api-key) + * [Request](#request-10) + * [Body Parameters](#body-parameters-3) + * [Response](#response-10) + * [Endpoint](#endpoint) + * [Request](#request-11) + * [Response](#response-11) + +
## 🔑 How to use API Key? @@ -165,6 +214,7 @@ To remove the current session on server side "status": true } ``` +
### Get WireGuard Configurations @@ -328,9 +378,217 @@ If the `configurationName` provided does not exist } ``` +
+ +### Get WGDashboard Configuration + +Get the WGDashboard Configuration, such as `dashboard_theme`... + +#### Request + +`GET /api/getDashboardConfiguration` + +#### Response + +`200 - OK` + +```json +{ + "data": { + "Account": { + "enable_totp": false, + "password": "some hashed value :(", + "totp_verified": false, + "username": "admin" + }, + "Database": { + "type": "sqlite" + }, + "Other": { + "welcome_session": false + }, + "Peers": { + "peer_display_mode": "grid", + "peer_endpoint_allowed_ip": "0.0.0.0/0", + "peer_global_dns": "1.1.1.1", + "peer_keep_alive": "21", + "peer_mtu": "1420", + "remote_endpoint": "192.168.2.38" + }, + "Server": { + "app_ip": "0.0.0.0", + "app_port": "10086", + "app_prefix": "", + "auth_req": true, + "dashboard_api_key": true, + "dashboard_refresh_interval": "5000", + "dashboard_sort": "status", + "dashboard_theme": "dark", + "version": "v4.0", + "wg_conf_path": "/etc/wireguard" + } + }, + "message": null, + "status": true +} +``` + +
+ +### Update WGDashboard Configuration Item + +Update the WGDashboard Configuration one at a time + +#### Request + +`POST /api/updateDashboardConfigurationItem` + +##### Body Parameters + +```json +{ + "section": "Server", + "key": "dashboard_theme", + "value": "dark" +} +``` +| Parameter | Type | | +|-----------|--------|----------------------------------------------------------| +| `section` | string | Each section in the `wg-dashboard.ini` | +| `key` | string | Each key/value pair under each in the `wg-dashboard.ini` | +| `value` | string | Value for this key/value pair | -============= +#### Response + +`200 - OK` + +If update is success + +```json +{ + "data": true, + "message": null, + "status": true +} +``` + +If update failed + +```json +{ + "data": true, + "message": "Message related to the error will appear here", + "status": false +} +``` + +
+ +### Get WGDashboard API Keys + +Get a list of active API key in WGDashboard + +#### Request + +`GET /api/getDashboardAPIKeys` + +#### Response + +`200 - OK` + +If API Key function is enabled and there are active API keys + +> If `ExpiredAt` is `null`, that means this API key will never expire + +```json +{ + "data": [ + { + "CreatedAt": "2024-08-15 00:42:31", + "ExpiredAt": null, + "Key": "AXt1x3TZMukmA-eSnAyESy08I14n20boppSsknHOB-Y" + }, + { + "CreatedAt": "2024-08-14 22:50:44", + "ExpiredAt": "2024-08-21 22:50:43", + "Key": "ry0Suo0BrypSMzbq0C_TjkEcgrFHHj6UBZGmC2-KI2o" + } + ], + "message": null, + "status": true +} +``` + +If API key function is disabled + +```json +{ + "data": null, + "message": "Dashboard API Keys function is disabled", + "status": false +} +``` + +
+ +### Add WGDashboard API Key + +Add a new API Key in WGDashboard + +#### Request + +`POST /api/newDashboardAPIKey` + +##### Body Parameters + +```json +{ + "neverExpire": false, + "ExpiredAt": "2024-12-31 16:00:00" +} +``` +| Parameter | Type | | +|---------------|--------|-----------------------------------------------------------------------------------| +| `neverExpire` | bool | If this is `false`, please specify a date in `ExpiredAt` | +| `ExpiredAt` | string | If `neverExpire` is `true`, this can be omitted. Format is `YYYY-MM-DD hh:mm:ss`. | + +#### Response + +`200 - OK` + +If success, it will return the latest list of API Keys + +```json +{ + "data": [ + { + "CreatedAt": "2024-08-15 00:42:31", + "ExpiredAt": null, + "Key": "AXt1x3TZMukmA-eSnAyESy08I14n20boppSsknHOB-Y" + }, + { + "CreatedAt": "2024-08-14 22:50:44", + "ExpiredAt": "2024-12-31 16:50:43", + "Key": "ry0Suo0BrypSMzbq0C_TjkEcgrFHHj6UBZGmC2-KI2o" + } + ], + "message": null, + "status": true +} +``` + +If API key function is disabled + +```json +{ + "data": null, + "message": "Dashboard API Keys function is disabled", + "status": false +} +``` + +
### Endpoint @@ -345,6 +603,10 @@ Description `200 - OK` ```json - +{ + "data": true, + "message": null, + "status": true +} ``` diff --git a/src/dashboard.py b/src/dashboard.py index f6fb739..309f917 100644 --- a/src/dashboard.py +++ b/src/dashboard.py @@ -1553,14 +1553,14 @@ def API_getDashboardConfiguration(): return ResponseObject(data=DashboardConfig.toJson()) -@app.route(f'{APP_PREFIX}/api/updateDashboardConfiguration', methods=["POST"]) -def API_updateDashboardConfiguration(): - data = request.get_json() - for section in data['DashboardConfiguration'].keys(): - for key in data['DashboardConfiguration'][section].keys(): - if not DashboardConfig.SetConfig(section, key, data['DashboardConfiguration'][section][key])[0]: - return ResponseObject(False, "Section or value is invalid.") - return ResponseObject() +# @app.route(f'{APP_PREFIX}/api/updateDashboardConfiguration', methods=["POST"]) +# def API_updateDashboardConfiguration(): +# data = request.get_json() +# for section in data['DashboardConfiguration'].keys(): +# for key in data['DashboardConfiguration'][section].keys(): +# if not DashboardConfig.SetConfig(section, key, data['DashboardConfiguration'][section][key])[0]: +# return ResponseObject(False, "Section or value is invalid.") +# return ResponseObject() @app.route(f'{APP_PREFIX}/api/updateDashboardConfigurationItem', methods=["POST"]) @@ -1581,7 +1581,7 @@ def API_updateDashboardConfigurationItem(): def API_getDashboardAPIKeys(): if DashboardConfig.GetConfig('Server', 'dashboard_api_key'): return ResponseObject(data=DashboardConfig.DashboardAPIKeys) - return ResponseObject(False, "Dashboard API Keys function is disbaled") + return ResponseObject(False, "Dashboard API Keys function is disabled") @app.route(f'{APP_PREFIX}/api/newDashboardAPIKey', methods=['POST']) def API_newDashboardAPIKey(): diff --git a/src/static/app/src/stores/DashboardConfigurationStore.js b/src/static/app/src/stores/DashboardConfigurationStore.js index ca069f4..bac16bf 100644 --- a/src/static/app/src/stores/DashboardConfigurationStore.js +++ b/src/static/app/src/stores/DashboardConfigurationStore.js @@ -63,13 +63,13 @@ export const DashboardConfigurationStore = defineStore('DashboardConfigurationSt if (res.status) this.Configuration = res.data }); }, - async updateConfiguration(){ - await fetchPost("/api/updateDashboardConfiguration", { - DashboardConfiguration: this.Configuration - }, (res) => { - console.log(res) - }) - }, + // async updateConfiguration(){ + // await fetchPost("/api/updateDashboardConfiguration", { + // DashboardConfiguration: this.Configuration + // }, (res) => { + // console.log(res) + // }) + // }, async signOut(){ await fetchGet("/api/signout", {}, (res) => { this.removeActiveCrossServer();