mirror of
https://github.com/donaldzou/WGDashboard.git
synced 2024-11-22 07:10:09 +01:00
Refactor
This commit is contained in:
parent
b930461434
commit
6ff286f9b4
@ -1,612 +0,0 @@
|
|||||||
# 📖 API Document for WGDashboard
|
|
||||||
|
|
||||||
**Version: v4.0**
|
|
||||||
|
|
||||||
**Created by: Donald Zou**
|
|
||||||
|
|
||||||
<!-- 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 -->
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
## 🔑 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**.
|
|
||||||
|
|
||||||
### Use API Key
|
|
||||||
|
|
||||||
- Simply add `wg-dashboard-apikey` with the value of your API key into the HTTP Header.
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
fetch('http://server:10086/api/handshake', {
|
|
||||||
headers: {
|
|
||||||
'content-type': 'application/json',
|
|
||||||
'wg-dashboard-apikey': 'insert your api key here'
|
|
||||||
},
|
|
||||||
method: "GET"
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
## 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.
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
### 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
|
|
||||||
}
|
|
||||||
```
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
### 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"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
| Parameter | Type |
|
|
||||||
|------------|--------|
|
|
||||||
| `username` | string |
|
|
||||||
| `password` | string |
|
|
||||||
| `totp` | string |
|
|
||||||
|
|
||||||
|
|
||||||
#### 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
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
### Sign Out
|
|
||||||
|
|
||||||
To remove the current session on server side
|
|
||||||
|
|
||||||
#### Request
|
|
||||||
|
|
||||||
`GET /api/signout`
|
|
||||||
|
|
||||||
#### Response
|
|
||||||
|
|
||||||
`200 - OK`
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"data": null,
|
|
||||||
"message": null,
|
|
||||||
"status": true
|
|
||||||
}
|
|
||||||
```
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
### Get WireGuard Configurations
|
|
||||||
|
|
||||||
To get all WireGuard configurations in `/etc/wireguard`
|
|
||||||
|
|
||||||
#### Request
|
|
||||||
|
|
||||||
`GET /api/getWireguardConfigurations`
|
|
||||||
|
|
||||||
#### Response
|
|
||||||
|
|
||||||
`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
|
|
||||||
}
|
|
||||||
```
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
### 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
|
|
||||||
}
|
|
||||||
```
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
### 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
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
### 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
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
<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>
|
|
||||||
|
|
||||||
### Endpoint
|
|
||||||
|
|
||||||
Description
|
|
||||||
|
|
||||||
#### Request
|
|
||||||
|
|
||||||
`GET`
|
|
||||||
|
|
||||||
#### Response
|
|
||||||
|
|
||||||
`200 - OK`
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"data": true,
|
|
||||||
"message": null,
|
|
||||||
"status": true
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
@ -1,105 +0,0 @@
|
|||||||
# ⏰ Changelogs of WGDashboard
|
|
||||||
|
|
||||||
#### v3.0.0 - v3.0.6.2 - Jan 18, 2022
|
|
||||||
|
|
||||||
- 🎉 **New Features**
|
|
||||||
- **Moved from TinyDB to SQLite**: SQLite provide a better performance and loading speed when getting peers! Also avoided crashing the database due to **race condition**.
|
|
||||||
- **Added Gunicorn WSGI Server**: This could provide more stable on handling HTTP request, and more flexibility in the future (such as HTTPS support). **BIG THANKS to @pgalonza :heart:**
|
|
||||||
- **Add Peers by Bulk:** User can add peers by bulk, just simply set the amount and click add.
|
|
||||||
- **Delete Peers by Bulk**: User can delete peers by bulk, without deleting peers one by one.
|
|
||||||
- **Download Peers in Zip**: User can download all *downloadable* peers in a zip.
|
|
||||||
- **Added Pre-shared Key to peers:** Now each peer can add with a pre-shared key to enhance security. Previously added peers can add the pre-shared key through the peer setting button.
|
|
||||||
- **Redirect Back to Previous Page:** The dashboard will now redirect you back to your previous page if the current session got timed out and you need to sign in again.
|
|
||||||
- **Added Some [🥘 Experimental Functions](#-experimental-functions)**
|
|
||||||
|
|
||||||
- 🪚 **Bug Fixed**
|
|
||||||
- [IP Sorting range issues #99](https://github.com/donaldzou/WGDashboard/issues/99) [❤️ @barryboom]
|
|
||||||
- [INvalid character written to tunnel json file #108](https://github.com/donaldzou/WGDashboard/issues/108) [❤️ @ikidd]
|
|
||||||
- [Add IPv6 #91](https://github.com/donaldzou/WGDashboard/pull/91) [❤️ @pgalonza]
|
|
||||||
- [Added MTU and PersistentKeepalive to QR code and download files #112](https://github.com/donaldzou/WGDashboard/pull/112) [:heart: @reafian]
|
|
||||||
- **And many other bugs provided by our beloved users** :heart:
|
|
||||||
- **🧐 Other Changes**
|
|
||||||
- **Key generating moved to front-end**: No longer need to use the server's WireGuard to generate keys, thanks to the `wireguard.js` from the [official repository](https://git.zx2c4.com/wireguard-tools/tree/contrib/keygen-html/wireguard.js)!
|
|
||||||
- **Peer transfer calculation**: each peer will now show all transfer amount (previously was only showing transfer amount from the last configuration start-up).
|
|
||||||
- **UI adjustment on running peers**: peers will have a new style indicating that it is running.
|
|
||||||
- **`wgd.sh` finally can update itself**: So now user could update the whole dashboard from `wgd.sh`, with the `update` command.
|
|
||||||
- **Minified JS and CSS files**: Although only a small changes on the file size, but I think is still a good practice to save a bit of bandwidth ;)
|
|
||||||
|
|
||||||
*And many other small changes for performance and bug fixes! :laughing:*
|
|
||||||
|
|
||||||
#### v2.3.1 - Sep 8, 2021
|
|
||||||
|
|
||||||
- Updated dashboard's name to **WGDashboard**!!
|
|
||||||
|
|
||||||
#### v2.3 - Sep 8, 2021
|
|
||||||
|
|
||||||
- 🎉 **New Features**
|
|
||||||
- **Update directly from `wgd.sh`:** Now you can update WGDashboard directly from the bash script.
|
|
||||||
- **Displaying Peers:** You can switch the display mode between list and table in the configuration page.
|
|
||||||
- 🪚 **Bug Fixed**
|
|
||||||
- [Peer DNS Validation Fails #67](issues/67): Added DNS format check. [❤️ @realfian]
|
|
||||||
- [configparser.NoSectionError: No section: 'Interface' #66](issues/66): Changed permission requirement for `etc/wireguard` from `744` to `755`. [❤️ @ramalmaty]
|
|
||||||
- [Feature request: Interface not loading when information missing #73](issues/73): Fixed when Configuration Address and Listen Port is missing will crash the dashboard. [❤️ @js32]
|
|
||||||
- [Remote Peer, MTU and PersistentKeepalives added #70](pull/70): Added MTU, remote peer and Persistent Keepalive. [❤️ @realfian]
|
|
||||||
- [Fixes DNS check to support search domain #65](pull/65): Added allow input domain into DNS. [❤️@davejlong]
|
|
||||||
- **🧐 Other Changes**
|
|
||||||
- Moved Add Peer Button into the right bottom corner.
|
|
||||||
|
|
||||||
#### v2.2.1 - Aug 16, 2021
|
|
||||||
|
|
||||||
Bug Fixed:
|
|
||||||
- Added support for full subnet on Allowed IP
|
|
||||||
- Peer setting Save button
|
|
||||||
|
|
||||||
#### v2.2 - Aug 14, 2021
|
|
||||||
|
|
||||||
- 🎉 **New Features**
|
|
||||||
- **Add new peers**: Now you can add peers directly on dashboard, it will generate a pair of private key and public key. You can also set its DNS, endpoint allowed IPs. Both can set a default value in the setting page. [❤️ in [#44](https://github.com/donaldzou/wireguard-dashboard/issues/44)]
|
|
||||||
- **QR Code:** You can add the private key in peer setting of your existed peer to create a QR code. Or just create a new one, dashboard will now be able to auto generate a private key and public key ;) Don't worry, all keys will be generated on your machine, and **will delete all key files after they got generated**. [❤️ in [#29](https://github.com/donaldzou/wireguard-dashboard/issues/29)]
|
|
||||||
- **Peer configuration file download:** Same as QR code, you now can download the peer configuration file, so you don't need to manually input all the details on the peer machine! [❤️ in [#40](https://github.com/donaldzou/wireguard-dashboard/issues/40)]
|
|
||||||
- **Search peers**: You can now search peers by their name.
|
|
||||||
- **Autostart on boot:** Added a tutorial on how to start the dashboard to on boot! Please read the [tutorial below](#autostart-wireguard-dashboard-on-boot). [❤️ in [#29](https://github.com/donaldzou/wireguard-dashboard/issues/29)]
|
|
||||||
- **Click to copy**: You can now click and copy all peer's public key and configuration's public key.
|
|
||||||
- ....
|
|
||||||
- 🪚 **Bug Fixed**
|
|
||||||
- When there are comments in the wireguard config file, will cause the dashboard to crash.
|
|
||||||
- Used regex to search for config files.
|
|
||||||
- **🧐 Other Changes**
|
|
||||||
- Moved all external CSS and JavaScript file to local hosting (Except Bootstrap Icon, due to large amount of SVG files).
|
|
||||||
- Updated Python dependencies
|
|
||||||
- Flask: `v1.1.2 => v2.0.1`
|
|
||||||
- Jinja: `v2.10.1 => v3.0.1`
|
|
||||||
- icmplib: `v2.1.1 => v3.0.1`
|
|
||||||
- Updated CSS/JS dependencies
|
|
||||||
- Bootstrap: `v4.5.3 => v4.6.0`
|
|
||||||
- UI adjustment
|
|
||||||
- Adjusted how peers will display in larger screens, used to be 1 row per peer, now is 3 peers in 1 row.
|
|
||||||
|
|
||||||
#### v2.1 - Jul 2, 2021
|
|
||||||
|
|
||||||
- Added **Ping** and **Traceroute** tools!
|
|
||||||
- Adjusted the calculation of data usage on each peers
|
|
||||||
- Added refresh interval of the dashboard
|
|
||||||
- Bug fixed when no configuration on fresh install ([#23](https://github.com/donaldzou/wireguard-dashboard/issues/23))
|
|
||||||
- Fixed crash when too many peers ([#22](https://github.com/donaldzou/wireguard-dashboard/issues/22))
|
|
||||||
|
|
||||||
#### v2.0 - May 5, 2021
|
|
||||||
|
|
||||||
- Added login function to dashboard
|
|
||||||
- ***I'm not using the most ideal way to store the username and password, feel free to provide a better way to do this if you any good idea!***
|
|
||||||
- Added a config file to the dashboard
|
|
||||||
- Dashboard config can be change within the **Setting** tab on the side bar
|
|
||||||
- Adjusted UI
|
|
||||||
- And much more!
|
|
||||||
|
|
||||||
#### v1.1.2 - Apr 3, 2021
|
|
||||||
|
|
||||||
- Resolved issue [#3](https://github.com/donaldzou/wireguard-dashboard/issues/3).
|
|
||||||
|
|
||||||
#### v1.1.1 - Apr 2, 2021
|
|
||||||
|
|
||||||
- Able to add a friendly name to each peer. Thanks [#2](https://github.com/donaldzou/wireguard-dashboard/issues/2) !
|
|
||||||
|
|
||||||
#### v1.0 - Dec 27, 2020
|
|
||||||
|
|
||||||
- Added the function to remove peers
|
|
@ -1,22 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
||||||
<title>WGDashboard</title>
|
|
||||||
<link rel="manifest" href="{{ url_for('static',filename='json/manifest.json') }}">
|
|
||||||
<meta name="mobile-web-app-capable" content="yes">
|
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
||||||
<meta name="application-name" content="WGDashboard">
|
|
||||||
<meta name="apple-mobile-web-app-title" content="WGDashboard">
|
|
||||||
<meta name="msapplication-starturl" content="/">
|
|
||||||
<link rel="apple-touch-icon" sizes="192x192" href="{{ url_for('static',filename='img/192x192ios.png') }}">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
||||||
<link rel="icon" href="{{ url_for('static',filename='img/logo.png') }}"/>
|
|
||||||
<link rel="stylesheet" href="{{ url_for('static',filename='app/dist/assets/' + INDEXCSS) }}">
|
|
||||||
<script src="{{ url_for('static', filename='app/dist/assets/' + INDEXJS) }}" type="module"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="app" class="w-100 vh-100"></div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Loading…
Reference in New Issue
Block a user