2024-08-15 12:48:27 +08:00
# 📖 API Document for WGDashboard
2024-08-04 05:03:39 +08:00
**Version: v4.0**
**Created by: Donald Zou**
2024-08-16 11:20:29 +08:00
<!-- TOC -->
* [📖 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 )
<!-- TOC -->
2024-08-04 05:03:39 +08:00
< hr >
2024-08-15 12:48:27 +08:00
## 🔑 How to use API Key?
### Create API Key
1. To request an API Key, simply login to your WGDashboard, go to **Settings** , scroll to the very bottom. Click the **switch** on the right to enable API Key.
2. Click the blur **Create** button, set an **expiry date** you want or **never expire** , then click **Done** .
2024-08-16 04:55:34 +08:00
### Use API Key
- Simply add `wg-dashboard-apikey` with the value of your API key into the HTTP Header.
2024-08-15 12:48:27 +08:00
```javascript
2024-08-16 04:55:34 +08:00
fetch('http://server:10086/api/handshake', {
2024-08-15 12:48:27 +08:00
headers: {
'content-type': 'application/json',
'wg-dashboard-apikey': 'insert your api key here'
2024-08-16 04:55:34 +08:00
},
method: "GET"
2024-08-15 12:48:27 +08:00
})
```
2024-08-16 04:55:34 +08:00
## API Endpoints
### Handshake to Server
This endpoint is designed for a simple handshake when using API key to connect. If `status` is `true` that means
#### Request
`GET /api/handshake`
#### Response
`200 - OK`
```json
{
"data": null,
"message": null,
"status": true
}
```
`401 - UNAUTHORIZED`
```json
{
"data": null,
"message": "Unauthorized access.",
"status": false
}
```
> Notice: this `401` response will return at all endpoint if your API Key or session is invalid.
2024-08-16 10:50:01 +08:00
< hr >
2024-08-16 04:55:34 +08:00
### Validate Authentication
This endpoint if needed for non-cross-server access. This will check if the cookie on the client side is still valid on the server side.
#### Request
`GET /api/validateAuthentication`
#### Response
`200 - OK`
Session is still valid
```json
{
"data": null,
"message": null,
"status": true
}
```
Session is invalid
```json
{
"data": null,
"message": "Invalid authentication.",
"status": false
}
```
2024-08-16 10:50:01 +08:00
< hr >
2024-08-16 04:55:34 +08:00
### Authenticate
This endpoint is dedicated for non-cross-server access. It is used to authenticate user's username, password and TOTP
#### Request
`POST /api/authenticate`
##### Body Parameters
```json
{
"username": "admin",
"password": "admin",
"totp": "123456"
}
```
2024-08-16 10:47:44 +08:00
| Parameter | Type |
|------------|--------|
| `username` | string |
| `password` | string |
| `totp` | string |
2024-08-16 04:55:34 +08:00
#### Response
`200 - OK`
If username, password and TOTP matched
```json
{
"data": null,
"message": null,
"status": true
}
```
If username, password or TOTP is not match
```json
{
"data": null,
"message": "Sorry, your username, password or OTP is incorrect.",
"status": false
}
```
2024-08-16 10:50:01 +08:00
< hr >
2024-08-16 10:47:44 +08:00
### Sign Out
To remove the current session on server side
#### Request
`GET /api/signout`
#### Response
`200 - OK`
```json
{
"data": null,
"message": null,
"status": true
}
```
2024-08-16 11:20:29 +08:00
< hr >
2024-08-16 10:47:44 +08:00
### Get WireGuard Configurations
To get all WireGuard configurations in `/etc/wireguard`
#### Request
`GET /api/getWireguardConfigurations`
#### Response
2024-08-16 04:55:34 +08:00
2024-08-16 10:47:44 +08:00
`200 - OK`
```json
{
"data": [
{
"Address": "10.200.200.1/24",
"ConnectedPeers": 0,
"DataUsage": {
"Receive": 0.1582,
"Sent": 2.1012999999999997,
"Total": 2.2595
},
"ListenPort": "51820",
"Name": "wg0",
"PostDown": "iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s1 -j MASQUERADE;",
"PostUp": "iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp0s1 -j MASQUERADE;",
"PreDown": "",
"PreUp": "",
"PrivateKey": "8DsSMli3okgUx5frKbFQ0fMW5ZMyqyxOdOW7+g21L18=",
"PublicKey": "GQlGi8QJ93hWY7L2xlJyh+7S6+ekER9xP11T92T0O0Q=",
"SaveConfig": true,
"Status": false
}
],
"message": null,
"status": true
}
```
2024-08-16 10:50:01 +08:00
< hr >
2024-08-16 10:47:44 +08:00
### Add WireGuard Configuration
Add a new WireGuard Configuration
#### Request
`POST /api/addWireguardConfiguration`
##### Body Parameters
```json
{
"ConfigurationName": "wg0",
"Address": "10.0.0.1/24",
"ListenPort": 51820,
"PrivateKey": "eJuuamCgakVs2xUZGHh/g7C6Oy89JGh7eE2jjEGbbFc=",
"PublicKey": "3Ruirgw9qNRwNpBepkiVjjSe82tY+lDZr6WaFC4wO2g=",
"PresharedKey": "GMMLKWdJlgsKVoR26BJPsNbDXyfILL+x1Nd6Ecmn4lg=",
"PreUp": "",
"PreDown": "iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s1 -j MASQUERADE;",
"PostUp": "iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp0s1 -j MASQUERADE;",
"PostDown": ""
}
```
| Parameter | Type |
|---------------------|--------|
| `ConfigurationName` | string |
| `Address` | string |
| `ListenPort` | int |
| `PrivateKey` | string |
| `PublicKey` | string |
| `PresharedKey` | string |
| `PreUp` | string |
| `PreDown` | string |
| `PostUp` | string |
| `PostDown` | string |
#### Response
`200 - OK`
If everything is good
```json
{
"data": null,
"message": null,
"status": true
}
```
If the new configuration's `ConfigurationName` is already existed
```json
{
"data": null,
"message": "Already have a configuration with the name \"wg0\"",
"status": false
}
```
If the new configuration's `ListenPort` is used by another configuration
```json
{
"data": null,
"message": "Already have a configuration with the port \"51820\"",
"status": false
}
```
If the new configuration's `Address` is used by another configuration
```json
{
"data": null,
"message": "Already have a configuration with the address \"10.0.0.1/24\"",
"status": false
}
```
2024-08-16 10:50:01 +08:00
< hr >
2024-08-16 10:47:44 +08:00
### Toggle WireGuard Configuration
To turn on/off of a WireGuard Configuration
#### Request
`GET /api/toggleWireguardConfiguration/?configurationName=`
##### Query String Parameter
| Parameter | Type |
|---------------------|--------|
| `configurationName` | string |
#### Response
`200 - OK`
If toggle is successful, server will return the current status in `status` : `true` or `false` indicating if the configuration is up or not.
```json
{
"data": true,
"message": null,
"status": true
}
```
If the `configurationName` provided does not exist
```json
{
"data": null,
"message": "Please provide a valid configuration name",
"status": false
}
```
2024-08-16 04:55:34 +08:00
2024-08-16 11:20:29 +08:00
< hr >
### Get WGDashboard Configuration
Get the WGDashboard Configuration, such as `dashboard_theme` ...
2024-08-16 04:55:34 +08:00
2024-08-16 11:20:29 +08:00
#### Request
`GET /api/getDashboardConfiguration`
#### Response
2024-08-16 04:55:34 +08:00
2024-08-16 11:20:29 +08:00
`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
}
```
< hr >
### 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
}
```
< hr >
### 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
}
```
< hr >
### 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
}
```
< hr >
2024-08-16 04:55:34 +08:00
### Endpoint
Description
#### Request
`GET`
#### Response
`200 - OK`
```json
2024-08-16 11:20:29 +08:00
{
"data": true,
"message": null,
"status": true
}
2024-08-16 04:55:34 +08:00
```