From 6ff286f9b4078d0e57aab561a0342b1cc5e9c233 Mon Sep 17 00:00:00 2001 From: Donald Zou Date: Thu, 7 Nov 2024 14:54:42 +0800 Subject: [PATCH] Refactor --- docs/api-documents.md | 612 --------------------------------------- docs/changelogs.md | 105 ------- src/templates/index.html | 22 -- 3 files changed, 739 deletions(-) delete mode 100644 docs/api-documents.md delete mode 100644 docs/changelogs.md delete mode 100644 src/templates/index.html diff --git a/docs/api-documents.md b/docs/api-documents.md deleted file mode 100644 index ad68293..0000000 --- a/docs/api-documents.md +++ /dev/null @@ -1,612 +0,0 @@ -# 📖 API Document for WGDashboard - -**Version: v4.0** - -**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? - -### 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. - -
- -### 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 -} -``` -
- -### 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 -} -``` - -
- -### Sign Out - -To remove the current session on server side - -#### Request - -`GET /api/signout` - -#### Response - -`200 - OK` - -```json -{ - "data": null, - "message": null, - "status": true -} -``` -
- -### 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 -} -``` -
- -### 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 -} -``` -
- -### 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 -} -``` - -
- -### 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 - -Description - -#### Request - -`GET` - -#### Response - -`200 - OK` - -```json -{ - "data": true, - "message": null, - "status": true -} -``` - diff --git a/docs/changelogs.md b/docs/changelogs.md deleted file mode 100644 index cb98d36..0000000 --- a/docs/changelogs.md +++ /dev/null @@ -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 \ No newline at end of file diff --git a/src/templates/index.html b/src/templates/index.html deleted file mode 100644 index 1becd16..0000000 --- a/src/templates/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - WGDashboard - - - - - - - - - - - - - -
- - \ No newline at end of file