mirror of
https://github.com/donaldzou/WGDashboard.git
synced 2024-11-22 15:20:09 +01:00
Update README.md
This commit is contained in:
parent
47efb644b7
commit
480406d579
247
README.md
247
README.md
@ -22,7 +22,7 @@
|
|||||||
- **Docker Solution**: We now have 2 docker solutions! Thanks to @DaanSelen & @shuricksumy for providing them. For more information, please see the Docker section below.
|
- **Docker Solution**: We now have 2 docker solutions! Thanks to @DaanSelen & @shuricksumy for providing them. For more information, please see the Docker section below.
|
||||||
- **Peer Job Scheduler**: Now you can schedule jobs for each peer to either **restrict** or **delete** the peer if the peer's total / upload / download data usage exceeded a limit, or you can set a specific datetime to restrict or delete the peer.
|
- **Peer Job Scheduler**: Now you can schedule jobs for each peer to either **restrict** or **delete** the peer if the peer's total / upload / download data usage exceeded a limit, or you can set a specific datetime to restrict or delete the peer.
|
||||||
- **Share Peer's QR Code with Public Link**: You can share a peer's QR code and `.conf` file without the need to loging in.
|
- **Share Peer's QR Code with Public Link**: You can share a peer's QR code and `.conf` file without the need to loging in.
|
||||||
- **API Key for WGDashboard's REST API**: You can now request all the api endpoint used in the dashboard. For more details please review the API Documentation below.
|
- **WGDashboard's REST API**: You can now request all the api endpoint used in the dashboard. For more details please review the API Documentation.
|
||||||
- **Logging**: Dashboard will now log all activity on the dashboard and API requests.
|
- **Logging**: Dashboard will now log all activity on the dashboard and API requests.
|
||||||
- **Time-Based One-Time Password (TOTP)**: You can enable this function to add one more layer of security, and generate the TOTP with your choice of authenticator.
|
- **Time-Based One-Time Password (TOTP)**: You can enable this function to add one more layer of security, and generate the TOTP with your choice of authenticator.
|
||||||
- **Designs**
|
- **Designs**
|
||||||
@ -31,7 +31,7 @@
|
|||||||
- **Enforce Python Virtual Environment**: I noticed newer Python version (3.12) does not allow to install packages globally, and plus I think is a good idea to use venv.
|
- **Enforce Python Virtual Environment**: I noticed newer Python version (3.12) does not allow to install packages globally, and plus I think is a good idea to use venv.
|
||||||
|
|
||||||
- **🧐 Other Changes**
|
- **🧐 Other Changes**
|
||||||
- **Deprecated jQuery from the project, and migrated and rewrote the whole front-end with Vue.js. This allow the dashboard is future proofed, and potential cross server access with a desktop app.**
|
- **Deprecated jQuery from the project, and migrated and rewrote the whole front-end with Vue.js. This allows the dashboard is future proofed, and potential cross server access with a desktop app.**
|
||||||
- Rewrote the backend into a REST API structure
|
- Rewrote the backend into a REST API structure
|
||||||
- Improved SQL query efficient
|
- Improved SQL query efficient
|
||||||
- Removed all templates, except for `index.html` where it will load the Vue.js app.
|
- Removed all templates, except for `index.html` where it will load the Vue.js app.
|
||||||
@ -60,9 +60,11 @@
|
|||||||
- [Dashboard Configuration file](#dashboard-configuration-file)
|
- [Dashboard Configuration file](#dashboard-configuration-file)
|
||||||
- [Generating QR code and peer configuration file (.conf)](#generating-qr-code-and-peer-configuration-file-conf)
|
- [Generating QR code and peer configuration file (.conf)](#generating-qr-code-and-peer-configuration-file-conf)
|
||||||
- [❓ How to update the dashboard?](#-how-to-update-the-dashboard)
|
- [❓ How to update the dashboard?](#-how-to-update-the-dashboard)
|
||||||
|
- [🐬 Docker Solutions](#-docker-solutions)
|
||||||
|
- [📖 API Document](./docs/api-documents.md)
|
||||||
- [🥘 Experimental Functions](#-experimental-functions)
|
- [🥘 Experimental Functions](#-experimental-functions)
|
||||||
- [🔍 Screenshot](#-screenshot)
|
- [🔍 Screenshot](#-screenshot)
|
||||||
- [⏰ Changelog](#--changelog)
|
- [⏰ Changelog](./docs/api-documents.md)
|
||||||
- [🛒 Dependencies](#-dependencies)
|
- [🛒 Dependencies](#-dependencies)
|
||||||
- [✨ Contributors](#-contributors)
|
- [✨ Contributors](#-contributors)
|
||||||
|
|
||||||
@ -288,28 +290,29 @@ In the `src` folder, it contained a file called `wg-dashboard.service`, we can u
|
|||||||
|
|
||||||
Since version 2.0, WGDashboard will be using a configuration file called `wg-dashboard.ini`, (It will generate automatically after first time running the dashboard). More options will include in future versions, and for now it included the following configurations:
|
Since version 2.0, WGDashboard will be using a configuration file called `wg-dashboard.ini`, (It will generate automatically after first time running the dashboard). More options will include in future versions, and for now it included the following configurations:
|
||||||
|
|
||||||
| | Description | Default | Edit Available |
|
| | Description | Default | Edit Available |
|
||||||
| ---------------------------- | ------------------------------------------------------------ | ---------------------------------------------------- | -------------- |
|
|------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------|----------------|
|
||||||
| **`[Account]`** | *Configuration on account* | | |
|
| **`[Account]`** | *Configuration on account* | | |
|
||||||
| `username` | Dashboard login username | `admin` | Yes |
|
| `username` | Dashboard login username | `admin` | Yes |
|
||||||
| `password` | Password, will be hash with SHA256 | `admin` hashed in SHA256 | Yes |
|
| `password` | Password, will be hash with SHA256 | `admin` hashed in SHA256 | Yes |
|
||||||
| | | | |
|
| | | | |
|
||||||
| **`[Server]`** | *Configuration on dashboard* | | |
|
| **`[Server]`** | *Configuration on dashboard* | | |
|
||||||
| `wg_conf_path` | The path of all the Wireguard configurations | `/etc/wireguard` | Yes |
|
| `wg_conf_path` | The path of all the Wireguard configurations | `/etc/wireguard` | Yes |
|
||||||
| `app_ip` | IP address the dashboard will run with | `0.0.0.0` | Yes |
|
| `app_ip` | IP address the dashboard will run with | `0.0.0.0` | Yes |
|
||||||
| `app_port` | Port the the dashboard will run with | `10086` | Yes |
|
| `app_port` | Port the the dashboard will run with | `10086` | Yes |
|
||||||
| `auth_req` | Does the dashboard need authentication to access, if `auth_req = false` , user will not be access the **Setting** tab due to security consideration. **User can only edit the file directly in system**. | `true` | **No** |
|
| `auth_req` | Does the dashboard need authentication to access, if `auth_req = false` , user will not be access the **Setting** tab due to security consideration. **User can only edit the file directly in system**. | `true` | **No** |
|
||||||
| `version` | Dashboard Version | `v3.0.5` | **No** |
|
| `version` | Dashboard Version | `v4.0` | **No** |
|
||||||
| `dashboard_refresh_interval` | How frequent the dashboard will refresh on the configuration page | `60000ms` | Yes |
|
| `dashboard_refresh_interval` | How frequent the dashboard will refresh on the configuration page | `60000ms` | Yes |
|
||||||
| `dashboard_sort` | How configuration is sorting | `status` | Yes |
|
| `dashboard_sort` | How configuration is sorting | `status` | Yes |
|
||||||
| | | | |
|
| `dashboard_theme` | Dashboard Theme | `dark` | Yes |
|
||||||
| **`[Peers]`** | *Default Settings on a new peer* | | |
|
| | | | |
|
||||||
| `peer_global_dns` | DNS Server | `1.1.1.1` | Yes |
|
| **`[Peers]`** | *Default Settings on a new peer* | | |
|
||||||
| `peer_endpoint_allowed_ip` | Endpoint Allowed IP | `0.0.0.0/0` | Yes |
|
| `peer_global_dns` | DNS Server | `1.1.1.1` | Yes |
|
||||||
| `peer_display_mode` | How peer will display | `grid` | Yes |
|
| `peer_endpoint_allowed_ip` | Endpoint Allowed IP | `0.0.0.0/0` | Yes |
|
||||||
| `remote_endpoint` | Remote Endpoint (i.e where your peers will connect to) | *depends on your server's default network interface* | Yes |
|
| `peer_display_mode` | How peer will display | `grid` | Yes |
|
||||||
| `peer_mtu` | Maximum Transmit Unit | `1420` | |
|
| `remote_endpoint` | Remote Endpoint (i.e where your peers will connect to) | *depends on your server's default network interface* | Yes |
|
||||||
| `peer_keep_alive` | Keep Alive | `21` | Yes |
|
| `peer_mtu` | Maximum Transmit Unit | `1420` | |
|
||||||
|
| `peer_keep_alive` | Keep Alive | `21` | Yes |
|
||||||
|
|
||||||
#### Generating QR code and peer configuration file (.conf)
|
#### Generating QR code and peer configuration file (.conf)
|
||||||
|
|
||||||
@ -367,178 +370,48 @@ Endpoint = 0.0.0.0:51820
|
|||||||
|
|
||||||
Starting with `v3.0`, you can simply do `sudo ./wgd.sh update` !! (I hope)
|
Starting with `v3.0`, you can simply do `sudo ./wgd.sh update` !! (I hope)
|
||||||
|
|
||||||
|
## 🐬 Docker Solutions
|
||||||
|
|
||||||
|
Current, we have 2 beloved contributors provided solutions for hosting WGDashboard with Docker
|
||||||
|
|
||||||
|
### Solution 1 from @DaanSelen
|
||||||
|
|
||||||
|
Please visit [Docker-explain.md](blob/main/docker/Docker-explain.md)
|
||||||
|
|
||||||
|
### Solution 2 from @shuricksumy
|
||||||
|
|
||||||
|
Please visit [shuricksumy/docker-wgdashboard](https://github.com/shuricksumy/docker-wgdashboard)
|
||||||
|
|
||||||
|
> For questions or issues related to Docker, please visit #272
|
||||||
|
|
||||||
|
|
||||||
## 🥘 Experimental Functions
|
## 🥘 Experimental Functions
|
||||||
|
|
||||||
### Cross-Server Access
|
### Cross-Server Access
|
||||||
|
|
||||||
Starting with `v4.0`, you can access WGDashboards on other server through one WGDashboard with API Keys
|
Starting with `v4.0`, you can access WGDashboards on other server through one WGDashboard with API Keys
|
||||||
|
|
||||||
|
![Cross Server Example](https://donaldzou.nyc3.cdn.digitaloceanspaces.com/wgdashboard-images/cross-server.gif)
|
||||||
|
|
||||||
|
### Desktop App
|
||||||
|
|
||||||
|
Since the major changes for `v4.0` is to move the whole front-end code to Vue.js. And with this change, we can take the
|
||||||
|
advantage of combining ElectronJS and Vue.js to create a Desktop version of WGDashboard. Currently, we provide an Universal macOS app and a Windows app.
|
||||||
|
|
||||||
|
To download the app, please visit the [latest release](https://github.com/donaldzou/WGDashboard/releases).
|
||||||
|
|
||||||
|
![ElectronJS App Demo](https://donaldzou.nyc3.cdn.digitaloceanspaces.com/wgdashboard-images/electronjs-app.gif)
|
||||||
|
|
||||||
|
|
||||||
## 🔍 Screenshot
|
## 🔍 Screenshot
|
||||||
|
|
||||||
![Sign In Page](img/SignIn.png)
|
![Sign In](https://donaldzou.nyc3.cdn.digitaloceanspaces.com/wgdashboard-images/sign-in.png)
|
||||||
|
![Cross Server](https://donaldzou.nyc3.cdn.digitaloceanspaces.com/wgdashboard-images/cross-server.png)
|
||||||
![Index Image](img/HomePage.png)
|
![Index](https://donaldzou.nyc3.cdn.digitaloceanspaces.com/wgdashboard-images/index.png)
|
||||||
|
![New Configuration](https://donaldzou.nyc3.cdn.digitaloceanspaces.com/wgdashboard-images/new-configuration.png)
|
||||||
![Configuration](img/Configuration.png)
|
![Settings](https://donaldzou.nyc3.cdn.digitaloceanspaces.com/wgdashboard-images/settings.png)
|
||||||
|
![Light-Dark Mode](https://donaldzou.nyc3.cdn.digitaloceanspaces.com/wgdashboard-images/light-dark.png)
|
||||||
![Add Peer](img/AddPeer.png)
|
![Configuration](https://donaldzou.nyc3.cdn.digitaloceanspaces.com/wgdashboard-images/configuration.png)
|
||||||
|
![Add Peers](https://donaldzou.nyc3.cdn.digitaloceanspaces.com/wgdashboard-images/add-peers.png)
|
||||||
![Edit Peer](img/EditPeer.png)
|
![Ping](https://donaldzou.nyc3.cdn.digitaloceanspaces.com/wgdashboard-images/ping.png)
|
||||||
|
![Traceroute](https://donaldzou.nyc3.cdn.digitaloceanspaces.com/wgdashboard-images/traceroute.png)
|
||||||
![Delete Peer](img/DeleteBulk.png)
|
|
||||||
|
|
||||||
![Dashboard Setting](img/DashboardSetting.png)
|
|
||||||
|
|
||||||
![Ping](img/Ping.png)
|
|
||||||
|
|
||||||
![Traceroute](img/Traceroute.png)
|
|
||||||
|
|
||||||
## ⏰ Changelog
|
|
||||||
|
|
||||||
#### 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
|
|
||||||
|
|
||||||
## 🛒 Dependencies
|
|
||||||
|
|
||||||
- CSS/JS
|
|
||||||
- [Bootstrap](https://getbootstrap.com/docs/4.6/getting-started/introduction/) `v4.6.0`
|
|
||||||
- [Bootstrap Icon](https://icons.getbootstrap.com) `v1.4.0`
|
|
||||||
- [jQuery](https://jquery.com) `v3.5.1`
|
|
||||||
- Python
|
|
||||||
- [Flask](https://pypi.org/project/Flask/) `v2.0.1`
|
|
||||||
- [ifcfg](https://pypi.org/project/ifcfg/) `v0.21`
|
|
||||||
- [icmplib](https://pypi.org/project/icmplib/) `v2.1.1`
|
|
||||||
- [flask-qrcode](https://pypi.org/project/Flask-QRcode/) `v3.0.0`
|
|
||||||
|
|
||||||
## ✨ Contributors
|
|
||||||
|
|
||||||
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
||||||
[![All Contributors](https://img.shields.io/badge/all_contributors-5-orange.svg?style=flat-square)](#contributors-)
|
|
||||||
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
||||||
|
|
||||||
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
|
||||||
|
|
||||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
|
||||||
<!-- prettier-ignore-start -->
|
|
||||||
<!-- markdownlint-disable -->
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<td align="center"><a href="https://github.com/antonioag95"><img src="https://avatars.githubusercontent.com/u/30556866?v=4?s=100" width="100px;" alt=""/><br /><sub><b>antonioag95</b></sub></a><br /><a href="https://github.com/donaldzou/WGDashboard/commits?author=antonioag95" title="Tests">⚠️</a> <a href="https://github.com/donaldzou/WGDashboard/commits?author=antonioag95" title="Code">💻</a></td>
|
|
||||||
<td align="center"><a href="https://github.com/tonjo"><img src="https://avatars.githubusercontent.com/u/4726289?v=4?s=100" width="100px;" alt=""/><br /><sub><b>tonjo</b></sub></a><br /><a href="https://github.com/donaldzou/WGDashboard/commits?author=tonjo" title="Code">💻</a></td>
|
|
||||||
<td align="center"><a href="https://github.com/reafian"><img src="https://avatars.githubusercontent.com/u/11992416?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Richard Newton</b></sub></a><br /><a href="https://github.com/donaldzou/WGDashboard/commits?author=reafian" title="Code">💻</a></td>
|
|
||||||
<td align="center"><a href="http://www.davejlong.com"><img src="https://avatars.githubusercontent.com/u/175317?v=4?s=100" width="100px;" alt=""/><br /><sub><b>David Long</b></sub></a><br /><a href="https://github.com/donaldzou/WGDashboard/commits?author=davejlong" title="Code">💻</a></td>
|
|
||||||
<td align="center"><a href="http://www.std-soft.com"><img src="https://avatars.githubusercontent.com/u/5978293?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Markus Neubauer</b></sub></a><br /><a href="https://github.com/donaldzou/WGDashboard/commits?author=marneu" title="Code">💻</a></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<!-- markdownlint-restore -->
|
|
||||||
<!-- prettier-ignore-end -->
|
|
||||||
|
|
||||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
|
||||||
|
|
||||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
|
Loading…
Reference in New Issue
Block a user