This repository has been archived on 2025-03-19. You can view files and clone it, but cannot push or open issues or pull requests.
waybar-nmvpn/pkg/nmvpn/nmvpn.go
Jim Ramsay e10016d701 First cut at nmvpn plugin
Signed-off-by: Jim Ramsay <i.am@jimramsay.com>
2022-08-01 15:06:59 -04:00

59 lines
1 KiB
Go

package nmvpn
import (
gonm "github.com/Wifx/gonetworkmanager"
)
type Vpn struct {
Name string
Uuid string
Active bool
}
func GetVPNs() ([]Vpn, error) {
settings, err := gonm.NewSettings()
if err != nil {
return nil, err
}
connections, err := settings.ListConnections()
if err != nil {
return nil, err
}
vpns := make([]Vpn, 0, len(connections))
for _, c := range connections {
s, err := c.GetSettings()
if err != nil {
return nil, err
}
ctype := s["connection"]["type"].(string)
if ctype == "vpn" {
vpn := Vpn{
Name: s["connection"]["id"].(string),
Uuid: s["connection"]["uuid"].(string),
}
vpns = append(vpns, vpn)
}
}
if len(vpns) > 0 {
nm, err := gonm.NewNetworkManager()
if err != nil {
return nil, err
}
actives, err := nm.GetPropertyActiveConnections()
for _, a := range actives {
uuid, err := a.GetPropertyUUID()
if err != nil {
return nil, err
}
for i, v := range vpns {
if uuid == v.Uuid {
vpns[i].Active = true
}
}
}
}
return vpns, nil
}