Skip to content

Commit

Permalink
Merge pull request #109 from telekom-mms/feature/add-server-ip-to-dbu…
Browse files Browse the repository at this point in the history
…s-properties

Add IP of current VPN server to DBus properties
  • Loading branch information
hwipl committed Jul 26, 2024
2 parents 710a5c7 + d1abd0f commit 7d090ae
Show file tree
Hide file tree
Showing 8 changed files with 53 additions and 2 deletions.
1 change: 1 addition & 0 deletions internal/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ func printStatus(status *vpnstatus.Status) error {
fmt.Printf("IP: %s\n", status.IP)
fmt.Printf("Device: %s\n", status.Device)
fmt.Printf("Current Server: %s\n", status.Server)
fmt.Printf("Server IP: %s\n", status.ServerIP)

if status.ConnectedAt <= 0 {
fmt.Printf("Connected At:\n")
Expand Down
22 changes: 20 additions & 2 deletions internal/daemon/daemon.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,19 @@ func (d *Daemon) setStatusServer(server string) {
d.dbus.SetProperty(dbusapi.PropertyServer, server)
}

// setStatusServerIP sets the current server IP in status.
func (d *Daemon) setStatusServerIP(serverIP string) {
if d.status.ServerIP == serverIP {
// connected server IP not changed
return
}

// connected server IP changed
log.WithField("ServerIP", serverIP).Info("Daemon changed Server IP status")
d.status.ServerIP = serverIP
d.dbus.SetProperty(dbusapi.PropertyServerIP, serverIP)
}

// setStatusConnectedAt sets the connection time in status.
func (d *Daemon) setStatusConnectedAt(connectedAt int64) {
if d.status.ConnectedAt == connectedAt {
Expand Down Expand Up @@ -227,13 +240,16 @@ func (d *Daemon) connectVPN(login *logininfo.LoginInfo) {
return
}

// set server address
d.serverIP = net.ParseIP(strings.Trim(login.Host, "[]"))

// update status
d.setStatusOCRunning(true)
d.setStatusServer(login.Server)
d.setStatusServerIP(d.serverIP.String())
d.setStatusConnectionState(vpnstatus.ConnectionStateConnecting)

// set server address and add it to allowed addrs in trafpol
d.serverIP = net.ParseIP(strings.Trim(login.Host, "[]"))
// add server address to allowed addrs in trafpol
if d.trafpol != nil && d.serverIP != nil {
d.serverIPAllowed = d.trafpol.AddAllowedAddr(d.serverIP)
}
Expand Down Expand Up @@ -338,6 +354,7 @@ func (d *Daemon) updateVPNConfigDown() {
d.setStatusVPNConfig(nil)
d.setStatusConnectionState(vpnstatus.ConnectionStateDisconnected)
d.setStatusServer("")
d.setStatusServerIP("")
d.setStatusConnectedAt(0)
d.setStatusIP("")
d.setStatusDevice("")
Expand Down Expand Up @@ -447,6 +464,7 @@ func (d *Daemon) handleRunnerDisconnect() {
d.setStatusOCRunning(false)
d.setStatusConnectionState(vpnstatus.ConnectionStateDisconnected)
d.setStatusServer("")
d.setStatusServerIP("")
d.setStatusConnectedAt(0)

// make sure the vpn config is not active any more
Expand Down
13 changes: 13 additions & 0 deletions internal/dbusapi/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ const (
PropertyIP = "IP"
PropertyDevice = "Device"
PropertyServer = "Server"
PropertyServerIP = "ServerIP"
PropertyConnectedAt = "ConnectedAt"
PropertyServers = "Servers"
PropertyOCRunning = "OCRunning"
Expand Down Expand Up @@ -64,6 +65,11 @@ const (
ServerInvalid = ""
)

// Property "ServerIP" values.
const (
ServerIPInvalid = ""
)

// Property "Connected At" values.
const (
ConnectedAtInvalid int64 = -1
Expand Down Expand Up @@ -224,6 +230,7 @@ func (s *Service) start() {
s.props.SetMust(Interface, PropertyIP, IPInvalid)
s.props.SetMust(Interface, PropertyDevice, DeviceInvalid)
s.props.SetMust(Interface, PropertyServer, ServerInvalid)
s.props.SetMust(Interface, PropertyServerIP, ServerIPInvalid)
s.props.SetMust(Interface, PropertyConnectedAt, ConnectedAtInvalid)
s.props.SetMust(Interface, PropertyServers, ServersInvalid)
s.props.SetMust(Interface, PropertyOCRunning, OCRunningUnknown)
Expand Down Expand Up @@ -313,6 +320,12 @@ func (s *Service) Start() error {
Emit: prop.EmitTrue,
Callback: nil,
},
PropertyServerIP: {
Value: ServerIPInvalid,
Writable: false,
Emit: prop.EmitTrue,
Callback: nil,
},
PropertyConnectedAt: {
Value: ConnectedAtInvalid,
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 @@ -146,6 +146,8 @@ func updateStatusFromProperties(status *vpnstatus.Status, props map[string]dbus.
err = v.Store(&dest.Device)
case dbusapi.PropertyServer:
err = v.Store(&dest.Server)
case dbusapi.PropertyServerIP:
err = v.Store(&dest.ServerIP)
case dbusapi.PropertyConnectedAt:
err = v.Store(&dest.ConnectedAt)
case dbusapi.PropertyServers:
Expand Down Expand Up @@ -260,6 +262,8 @@ func handlePropertiesChanged(s *dbus.Signal, status *vpnstatus.Status) *vpnstatu
status.Device = dbusapi.DeviceInvalid
case dbusapi.PropertyServer:
status.Server = dbusapi.ServerInvalid
case dbusapi.PropertyServerIP:
status.ServerIP = dbusapi.ServerIPInvalid
case dbusapi.PropertyConnectedAt:
status.ConnectedAt = dbusapi.ConnectedAtInvalid
case dbusapi.PropertyServers:
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 @@ -95,6 +95,7 @@ func TestDBusClientQuery(t *testing.T) {
dbusapi.PropertyIP: dbus.MakeVariant(dbusapi.IPInvalid),
dbusapi.PropertyDevice: dbus.MakeVariant(dbusapi.DeviceInvalid),
dbusapi.PropertyServer: dbus.MakeVariant(dbusapi.ServerInvalid),
dbusapi.PropertyServerIP: dbus.MakeVariant(dbusapi.ServerIPInvalid),
dbusapi.PropertyConnectedAt: dbus.MakeVariant(dbusapi.ConnectedAtInvalid),
dbusapi.PropertyServers: dbus.MakeVariant(dbusapi.ServersInvalid),
dbusapi.PropertyOCRunning: dbus.MakeVariant(dbusapi.OCRunningUnknown),
Expand Down Expand Up @@ -205,6 +206,7 @@ func TestDBusClientSubscribe(t *testing.T) {
dbusapi.PropertyIP,
dbusapi.PropertyDevice,
dbusapi.PropertyServer,
dbusapi.PropertyServerIP,
dbusapi.PropertyConnectedAt,
dbusapi.PropertyServers,
dbusapi.PropertyOCRunning,
Expand Down
2 changes: 2 additions & 0 deletions pkg/vpnstatus/status.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ type Status struct {
IP string
Device string
Server string
ServerIP string
ConnectedAt int64
Servers []string
OCRunning OCRunning
Expand All @@ -121,6 +122,7 @@ func (s *Status) Copy() *Status {
IP: s.IP,
Device: s.Device,
Server: s.Server,
ServerIP: s.ServerIP,
ConnectedAt: s.ConnectedAt,
Servers: append(s.Servers[:0:0], s.Servers...),
OCRunning: s.OCRunning,
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 @@ -131,6 +131,7 @@ func TestStatusCopy(t *testing.T) {
ConnectionState: ConnectionStateConnected,
IP: "192.168.1.1",
Server: "test server 1",
ServerIP: "10.0.0.1",
ConnectedAt: 1700000000,
Servers: []string{"test server 1", "test server 2"},
OCRunning: OCRunningRunning,
Expand Down
10 changes: 10 additions & 0 deletions tools/dbusclient/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ func main() {
ip := dbusapi.IPInvalid
device := dbusapi.DeviceInvalid
server := dbusapi.ServerInvalid
serverIP := dbusapi.ServerInvalid
connectedAt := dbusapi.ConnectedAtInvalid
servers := dbusapi.ServersInvalid
ocRunning := dbusapi.OCRunningUnknown
Expand All @@ -52,6 +53,7 @@ func main() {
getProperty(dbusapi.PropertyIP, &ip)
getProperty(dbusapi.PropertyDevice, &device)
getProperty(dbusapi.PropertyServer, &server)
getProperty(dbusapi.PropertyServerIP, &serverIP)
getProperty(dbusapi.PropertyConnectedAt, &connectedAt)
getProperty(dbusapi.PropertyServers, &servers)
getProperty(dbusapi.PropertyOCRunning, &ocRunning)
Expand All @@ -62,6 +64,7 @@ func main() {
log.Println("IP:", ip)
log.Println("Device:", device)
log.Println("Server:", server)
log.Println("ServerIP:", serverIP)
log.Println("ConnectedAt:", connectedAt)
log.Println("Servers:", servers)
log.Println("OCRunning:", ocRunning)
Expand Down Expand Up @@ -118,6 +121,11 @@ func main() {
log.Fatal(err)
}
fmt.Println(server)
case dbusapi.PropertyServerIP:
if err := value.Store(&serverIP); err != nil {
log.Fatal(err)
}
fmt.Println(serverIP)
case dbusapi.PropertyConnectedAt:
if err := value.Store(&connectedAt); err != nil {
log.Fatal(err)
Expand Down Expand Up @@ -160,6 +168,8 @@ func main() {
device = dbusapi.DeviceInvalid
case dbusapi.PropertyServer:
device = dbusapi.ServerInvalid
case dbusapi.PropertyServerIP:
device = dbusapi.ServerIPInvalid
case dbusapi.PropertyConnectedAt:
connectedAt = dbusapi.ConnectedAtInvalid
case dbusapi.PropertyServers:
Expand Down

0 comments on commit 7d090ae

Please sign in to comment.