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();