Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add TND Servers to D-Bus Properties #116

Merged
merged 1 commit into from
Aug 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading