mirror of
https://github.com/ngoduykhanh/wireguard-ui.git
synced 2025-06-06 00:37:24 +03:00
Updates golang image version
This commit is contained in:
parent
8b1441c232
commit
360259cd74
8 changed files with 377 additions and 12 deletions
|
@ -5,6 +5,7 @@ import (
|
|||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
|
@ -14,6 +15,7 @@ import (
|
|||
"github.com/labstack/echo/v4"
|
||||
"github.com/labstack/gommon/log"
|
||||
"github.com/rs/xid"
|
||||
"golang.zx2c4.com/wireguard/wgctrl"
|
||||
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
||||
|
||||
"github.com/ngoduykhanh/wireguard-ui/emailer"
|
||||
|
@ -452,6 +454,93 @@ func GlobalSettings(db store.IStore) echo.HandlerFunc {
|
|||
}
|
||||
}
|
||||
|
||||
// Status handler
|
||||
func Status(db store.IStore) echo.HandlerFunc {
|
||||
type PeerVM struct {
|
||||
Name string
|
||||
Email string
|
||||
PublicKey string
|
||||
ReceivedBytes int64
|
||||
TransmitBytes int64
|
||||
LastHandshakeTime time.Time
|
||||
LastHandshakeRel time.Duration
|
||||
Connected bool
|
||||
}
|
||||
|
||||
type DeviceVM struct {
|
||||
Name string
|
||||
Peers []PeerVM
|
||||
}
|
||||
return func(c echo.Context) error {
|
||||
|
||||
wgclient, err := wgctrl.New()
|
||||
if err != nil {
|
||||
return c.Render(http.StatusInternalServerError, "status.html", map[string]interface{}{
|
||||
"baseData": model.BaseData{Active: "status", CurrentUser: currentUser(c)},
|
||||
"error": err.Error(),
|
||||
"devices": nil,
|
||||
})
|
||||
}
|
||||
|
||||
devices, err := wgclient.Devices()
|
||||
if err != nil {
|
||||
return c.Render(http.StatusInternalServerError, "status.html", map[string]interface{}{
|
||||
"baseData": model.BaseData{Active: "status", CurrentUser: currentUser(c)},
|
||||
"error": err.Error(),
|
||||
"devices": nil,
|
||||
})
|
||||
}
|
||||
|
||||
devicesVm := make([]DeviceVM, 0, len(devices))
|
||||
if len(devices) > 0 {
|
||||
m := make(map[string]*model.Client)
|
||||
clients, err := db.GetClients(false)
|
||||
if err != nil {
|
||||
return c.Render(http.StatusInternalServerError, "status.html", map[string]interface{}{
|
||||
"baseData": model.BaseData{Active: "status", CurrentUser: currentUser(c)},
|
||||
"error": err.Error(),
|
||||
"devices": nil,
|
||||
})
|
||||
}
|
||||
for i := range clients {
|
||||
if clients[i].Client != nil {
|
||||
m[clients[i].Client.PublicKey] = clients[i].Client
|
||||
}
|
||||
}
|
||||
|
||||
conv := map[bool]int{true: 1, false: 0}
|
||||
for i := range devices {
|
||||
devVm := DeviceVM{Name: devices[i].Name}
|
||||
for j := range devices[i].Peers {
|
||||
pVm := PeerVM{
|
||||
PublicKey: devices[i].Peers[j].PublicKey.String(),
|
||||
ReceivedBytes: devices[i].Peers[j].ReceiveBytes,
|
||||
TransmitBytes: devices[i].Peers[j].TransmitBytes,
|
||||
LastHandshakeTime: devices[i].Peers[j].LastHandshakeTime,
|
||||
LastHandshakeRel: time.Since(devices[i].Peers[j].LastHandshakeTime),
|
||||
}
|
||||
pVm.Connected = pVm.LastHandshakeRel.Minutes() < 3.
|
||||
|
||||
if _client, ok := m[pVm.PublicKey]; ok {
|
||||
pVm.Name = _client.Name
|
||||
pVm.Email = _client.Email
|
||||
}
|
||||
devVm.Peers = append(devVm.Peers, pVm)
|
||||
}
|
||||
sort.SliceStable(devVm.Peers, func(i, j int) bool { return devVm.Peers[i].Name < devVm.Peers[j].Name })
|
||||
sort.SliceStable(devVm.Peers, func(i, j int) bool { return conv[devVm.Peers[i].Connected] > conv[devVm.Peers[j].Connected] })
|
||||
devicesVm = append(devicesVm, devVm)
|
||||
}
|
||||
}
|
||||
|
||||
return c.Render(http.StatusOK, "status.html", map[string]interface{}{
|
||||
"baseData": model.BaseData{Active: "status", CurrentUser: currentUser(c)},
|
||||
"devices": devicesVm,
|
||||
"error": "",
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// GlobalSettingSubmit handler to update the global settings
|
||||
func GlobalSettingSubmit(db store.IStore) echo.HandlerFunc {
|
||||
return func(c echo.Context) error {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue