Skip to content

Commit

Permalink
Add TND Servers to D-Bus Properties
Browse files Browse the repository at this point in the history
Signed-off-by: hwipl <[email protected]>
  • Loading branch information
hwipl committed Aug 13, 2024
1 parent bc958cc commit da8e080
Show file tree
Hide file tree
Showing 8 changed files with 55 additions and 7 deletions.
1 change: 1 addition & 0 deletions internal/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ func printStatus(status *vpnstatus.Status) error {
fmt.Printf("TrafPol State: %s\n", status.TrafPolState)
fmt.Printf("Allowed Hosts: %s\n", status.AllowedHosts)
fmt.Printf("TND State: %s\n", status.TNDState)
fmt.Printf("TND Servers: %s\n", status.TNDServers)

if status.VPNConfig == nil {
fmt.Printf("VPN Config:\n")
Expand Down
28 changes: 21 additions & 7 deletions internal/daemon/daemon.go
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,19 @@ func (d *Daemon) setStatusTNDState(state vpnstatus.TNDState) {
d.dbus.SetProperty(dbusapi.PropertyTNDState, state)
}

// setStatusTNDServers sets the TND servers in status.
func (d *Daemon) setStatusTNDServers(servers []string) {
if slices.Equal(d.status.TNDServers, servers) {
// TND servers not changed
return
}

// TND servers changed
log.WithField("TNDServers", servers).Info("Daemon changed TNDServers status")
d.status.TNDServers = servers
d.dbus.SetProperty(dbusapi.PropertyTNDServers, servers)
}

// setStatusVPNConfig sets the VPN config in status.
func (d *Daemon) setStatusVPNConfig(config *vpnconfig.Config) {
if d.status.VPNConfig.Equal(config) {
Expand Down Expand Up @@ -601,12 +614,6 @@ func (d *Daemon) getProfileAllowedHosts() (hosts []string) {
return
}

// initTNDServers sets the TND servers from the xml profile.
func (d *Daemon) initTNDServers() {
servers := d.profile.GetTNDHTTPSServers()
d.tnd.SetServers(servers)
}

// setTNDDialer sets a custom dialer for TND.
func (d *Daemon) setTNDDialer() {
// get mark to be set on socket
Expand Down Expand Up @@ -652,14 +659,20 @@ func (d *Daemon) startTND() error {
}
log.Info("Daemon starting TND")
d.tnd = tnd.NewDetector(d.config.TND)
d.initTNDServers()
servers := d.profile.GetTNDHTTPSServers()
d.tnd.SetServers(servers)
d.setTNDDialer()
if err := d.tnd.Start(); err != nil {
return fmt.Errorf("Daemon could not start TND: %w", err)
}

// update tnd status
var s []string
for k, v := range servers {
s = append(s, fmt.Sprintf("%s:%s", k, v))
}
d.setStatusTNDState(vpnstatus.TNDStateActive)
d.setStatusTNDServers(s)

return nil
}
Expand All @@ -675,6 +688,7 @@ func (d *Daemon) stopTND() {

// update tnd status
d.setStatusTNDState(vpnstatus.TNDStateInactive)
d.setStatusTNDServers(nil)
}

// checkTND checks if TND should be running and starts or stops it.
Expand Down
13 changes: 13 additions & 0 deletions internal/dbusapi/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ const (
PropertyTrafPolState = "TrafPolState"
PropertyAllowedHosts = "AllowedHosts"
PropertyTNDState = "TNDState"
PropertyTNDServers = "TNDServers"
PropertyVPNConfig = "VPNConfig"
)

Expand Down Expand Up @@ -109,6 +110,11 @@ const (
TNDStateActive
)

// Property "TND Servers" values.
var (
TNDServersInvalid []string
)

// Property "VPNConfig" values.
const (
VPNConfigInvalid = ""
Expand Down Expand Up @@ -259,6 +265,7 @@ func (s *Service) start() {
s.props.SetMust(Interface, PropertyTrafPolState, TrafPolStateUnknown)
s.props.SetMust(Interface, PropertyAllowedHosts, AllowedHostsInvalid)
s.props.SetMust(Interface, PropertyTNDState, TNDStateUnknown)
s.props.SetMust(Interface, PropertyTNDServers, TNDServersInvalid)
s.props.SetMust(Interface, PropertyVPNConfig, VPNConfigInvalid)
}

Expand Down Expand Up @@ -387,6 +394,12 @@ func (s *Service) Start() error {
Emit: prop.EmitTrue,
Callback: nil,
},
PropertyTNDServers: {
Value: TNDServersInvalid,
Writable: false,
Emit: prop.EmitTrue,
Callback: nil,
},
PropertyVPNConfig: {
Value: VPNConfigInvalid,
Writable: false,
Expand Down
4 changes: 4 additions & 0 deletions pkg/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,8 @@ func updateStatusFromProperties(status *vpnstatus.Status, props map[string]dbus.
err = v.Store(&dest.AllowedHosts)
case dbusapi.PropertyTNDState:
err = v.Store(&dest.TNDState)
case dbusapi.PropertyTNDServers:
err = v.Store(&dest.TNDServers)
case dbusapi.PropertyVPNConfig:
s := dbusapi.VPNConfigInvalid
if err := v.Store(&s); err != nil {
Expand Down Expand Up @@ -282,6 +284,8 @@ func handlePropertiesChanged(s *dbus.Signal, status *vpnstatus.Status) *vpnstatu
status.AllowedHosts = dbusapi.AllowedHostsInvalid
case dbusapi.PropertyTNDState:
status.TNDState = vpnstatus.TNDStateUnknown
case dbusapi.PropertyTNDServers:
status.TNDServers = dbusapi.TNDServersInvalid
case dbusapi.PropertyVPNConfig:
status.VPNConfig = nil
}
Expand Down
2 changes: 2 additions & 0 deletions pkg/client/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ func TestDBusClientQuery(t *testing.T) {
dbusapi.PropertyTrafPolState: dbus.MakeVariant(dbusapi.TrafPolStateUnknown),
dbusapi.PropertyAllowedHosts: dbus.MakeVariant(dbusapi.AllowedHostsInvalid),
dbusapi.PropertyTNDState: dbus.MakeVariant(dbusapi.TNDStateUnknown),
dbusapi.PropertyTNDServers: dbus.MakeVariant(dbusapi.TNDServersInvalid),
dbusapi.PropertyVPNConfig: dbus.MakeVariant(dbusapi.VPNConfigInvalid),
},
{
Expand Down Expand Up @@ -216,6 +217,7 @@ func TestDBusClientSubscribe(t *testing.T) {
dbusapi.PropertyTrafPolState,
dbusapi.PropertyAllowedHosts,
dbusapi.PropertyTNDState,
dbusapi.PropertyTNDServers,
dbusapi.PropertyVPNConfig,
}},
},
Expand Down
3 changes: 3 additions & 0 deletions pkg/vpnstatus/status.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ type Status struct {
TrafPolState TrafPolState
AllowedHosts []string
TNDState TNDState
TNDServers []string
VPNConfig *vpnconfig.Config
}

Expand All @@ -165,6 +166,7 @@ func (s *Status) Copy() *Status {
if s == nil {
return nil
}

return &Status{
TrustedNetwork: s.TrustedNetwork,
ConnectionState: s.ConnectionState,
Expand All @@ -178,6 +180,7 @@ func (s *Status) Copy() *Status {
TrafPolState: s.TrafPolState,
AllowedHosts: append(s.AllowedHosts[:0:0], s.AllowedHosts...),
TNDState: s.TNDState,
TNDServers: append(s.TNDServers[:0:0], s.TNDServers...),
VPNConfig: s.VPNConfig.Copy(),
}
}
Expand Down
1 change: 1 addition & 0 deletions pkg/vpnstatus/status_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ func TestStatusCopy(t *testing.T) {
TrafPolState: TrafPolStateActive,
AllowedHosts: []string{"test.example.com"},
TNDState: TNDStateActive,
TNDServers: []string{"tnd1.local:abcdef..."},
VPNConfig: vpnconfig.New(),
},
} {
Expand Down
10 changes: 10 additions & 0 deletions tools/dbusclient/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ func main() {
trafPolState := dbusapi.TrafPolStateUnknown
allowedHosts := dbusapi.AllowedHostsInvalid
tndState := dbusapi.TNDStateUnknown
tndServers := dbusapi.TNDServersInvalid
vpnConfig := dbusapi.VPNConfigInvalid

getProperty := func(name string, val any) {
Expand All @@ -63,6 +64,7 @@ func main() {
getProperty(dbusapi.PropertyTrafPolState, &trafPolState)
getProperty(dbusapi.PropertyAllowedHosts, &allowedHosts)
getProperty(dbusapi.PropertyTNDState, &tndState)
getProperty(dbusapi.PropertyTNDServers, &tndServers)
getProperty(dbusapi.PropertyVPNConfig, &vpnConfig)

log.Println("TrustedNetwork:", trustedNetwork)
Expand All @@ -77,6 +79,7 @@ func main() {
log.Println("TrafPolState:", trafPolState)
log.Println("AllowedHosts:", allowedHosts)
log.Println("TNDState:", tndState)
log.Println("TNDServers:", tndServers)
log.Println("VPNConfig:", vpnConfig)

// handle signals
Expand Down Expand Up @@ -165,6 +168,11 @@ func main() {
log.Fatal(err)
}
fmt.Println(tndState)
case dbusapi.PropertyTNDServers:
if err := value.Store(&tndServers); err != nil {
log.Fatal(err)
}
fmt.Println(tndServers)
case dbusapi.PropertyVPNConfig:
if err := value.Store(&vpnConfig); err != nil {
log.Fatal(err)
Expand Down Expand Up @@ -206,6 +214,8 @@ func main() {
allowedHosts = dbusapi.AllowedHostsInvalid
case dbusapi.PropertyTNDState:
tndState = dbusapi.TNDStateUnknown
case dbusapi.PropertyTNDServers:
tndServers = dbusapi.TNDServersInvalid
case dbusapi.PropertyVPNConfig:
vpnConfig = dbusapi.VPNConfigInvalid
}
Expand Down

0 comments on commit da8e080

Please sign in to comment.