Skip to content

Commit

Permalink
Merge pull request #19 from T-Systems-MMS/feature/add-dbus-interface
Browse files Browse the repository at this point in the history
Feature/add dbus interface
  • Loading branch information
hwipl authored May 17, 2023
2 parents 4f40a1d + f6a28cf commit 08623ea
Show file tree
Hide file tree
Showing 6 changed files with 770 additions and 0 deletions.
40 changes: 40 additions & 0 deletions configs/dbus/com.telekom_mms.oc_daemon.Daemon.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?xml version="1.0"?> <!--*-nxml-*-->
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"https://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">

<busconfig>

<policy user="root">
<allow own="com.telekom_mms.oc_daemon.Daemon"/>
<allow send_destination="com.telekom_mms.oc_daemon.Daemon"/>
<allow receive_sender="com.telekom_mms.oc_daemon.Daemon"/>
</policy>

<policy group="dialout">
<allow send_destination="com.telekom_mms.oc_daemon.Daemon"
send_interface="com.telekom_mms.oc_daemon.Daemon"
send_member="Connect"/>

<allow send_destination="com.telekom_mms.oc_daemon.Daemon"
send_interface="com.telekom_mms.oc_daemon.Daemon"
send_member="Disconnect"/>
</policy>

<policy context="default">
<deny send_destination="com.telekom_mms.oc_daemon.Daemon"/>

<allow send_destination="com.telekom_mms.oc_daemon.Daemon"
send_interface="org.freedesktop.DBus.Introspectable"/>

<allow send_destination="com.telekom_mms.oc_daemon.Daemon"
send_interface="org.freedesktop.DBus.Properties"
send_member="Get"/>

<allow send_destination="com.telekom_mms.oc_daemon.Daemon"
send_interface="org.freedesktop.DBus.Properties"
send_member="GetAll"/>

<allow receive_sender="com.telekom_mms.oc_daemon.Daemon"/>
</policy>

</busconfig>
5 changes: 5 additions & 0 deletions configs/dbus/com.telekom_mms.oc_daemon.Daemon.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[D-BUS Service]
Name=com.telekom_mms.oc_daemon.Daemon
Exec=/bin/false
# alias for systemd service, do not use?
# SystemdService=dbus-com.telekom_mms.oc_daemon.Daemon.service
49 changes: 49 additions & 0 deletions internal/daemon/daemon.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"time"

"github.com/T-Systems-MMS/oc-daemon/internal/api"
"github.com/T-Systems-MMS/oc-daemon/internal/dbusapi"
"github.com/T-Systems-MMS/oc-daemon/internal/dnsproxy"
"github.com/T-Systems-MMS/oc-daemon/internal/ocrunner"
"github.com/T-Systems-MMS/oc-daemon/internal/sleepmon"
Expand Down Expand Up @@ -46,6 +47,7 @@ var (
// Daemon is used to run the daemon
type Daemon struct {
server *api.Server
dbus *dbusapi.Service

dns *dnsproxy.Proxy
tnd *trustnet.TND
Expand Down Expand Up @@ -90,6 +92,7 @@ func (d *Daemon) setStatusTrustedNetwork(trusted bool) {

// status changed
d.status.TrustedNetwork = trustedNetwork
d.dbus.SetProperty(dbusapi.PropertyTrustedNetwork, trustedNetwork)
}

// setStatusConnectionState sets the connection state in status
Expand All @@ -101,6 +104,7 @@ func (d *Daemon) setStatusConnectionState(connectionState vpnstatus.ConnectionSt

// state changed
d.status.ConnectionState = connectionState
d.dbus.SetProperty(dbusapi.PropertyConnectionState, connectionState)
}

// setStatusIP sets the IP in status
Expand All @@ -112,6 +116,7 @@ func (d *Daemon) setStatusIP(ip string) {

// ip changed
d.status.IP = ip
d.dbus.SetProperty(dbusapi.PropertyIP, ip)
}

// setStatusDevice sets the device in status
Expand All @@ -123,6 +128,7 @@ func (d *Daemon) setStatusDevice(device string) {

// device changed
d.status.Device = device
d.dbus.SetProperty(dbusapi.PropertyDevice, device)
}

// setStatusConnectedAt sets the connection time in status
Expand All @@ -134,6 +140,7 @@ func (d *Daemon) setStatusConnectedAt(connectedAt int64) {

// connection time changed
d.status.ConnectedAt = connectedAt
d.dbus.SetProperty(dbusapi.PropertyConnectedAt, connectedAt)
}

// setStatusServers sets the vpn servers in status
Expand All @@ -145,6 +152,7 @@ func (d *Daemon) setStatusServers(servers []string) {

// servers changed
d.status.Servers = servers
d.dbus.SetProperty(dbusapi.PropertyServers, servers)
}

// setStatusOCRunning sets the openconnect running state in status
Expand Down Expand Up @@ -409,6 +417,37 @@ func (d *Daemon) handleClientRequest(request *api.Request) {
}
}

// handleDBusRequest handles a D-Bus API client request
func (d *Daemon) handleDBusRequest(request *dbusapi.Request) {
defer request.Close()
log.Debug("Daemon handling D-Bus client request")

switch request.Name {
case dbusapi.RequestConnect:
// create login info
cookie := request.Parameters[0].(string)
host := request.Parameters[1].(string)
connectURL := request.Parameters[2].(string)
fingerprint := request.Parameters[3].(string)
resolve := request.Parameters[4].(string)

login := &ocrunner.LoginInfo{
Cookie: cookie,
Host: host,
ConnectURL: connectURL,
Fingerprint: fingerprint,
Resolve: resolve,
}

// connect VPN
d.connectVPN(login)

case dbusapi.RequestDisconnect:
// diconnect VPN
d.disconnectVPN()
}
}

// handleDNSReport handles a DNS report
func (d *Daemon) handleDNSReport(r *dnsproxy.Report) {
log.WithField("report", r).Debug("Daemon handling DNS report")
Expand Down Expand Up @@ -689,6 +728,12 @@ func (d *Daemon) start() {
d.server.Start()
defer d.server.Stop()

// start dbus api service
d.dbus.Start()
defer d.dbus.Stop()
d.setStatusConnectionState(vpnstatus.ConnectionStateDisconnected)
d.setStatusServers(d.profile.GetVPNServers())

// start xml profile watching
d.profile.Start()
defer d.profile.Stop()
Expand All @@ -699,6 +744,9 @@ func (d *Daemon) start() {
case req := <-d.server.Requests():
d.handleClientRequest(req)

case req := <-d.dbus.Requests():
d.handleDBusRequest(req)

case r := <-d.dns.Reports():
d.handleDNSReport(r)

Expand Down Expand Up @@ -740,6 +788,7 @@ func NewDaemon() *Daemon {

return &Daemon{
server: api.NewServer(sockFile),
dbus: dbusapi.NewService(),

sleepmon: sleepmon.NewSleepMon(),

Expand Down
Loading

0 comments on commit 08623ea

Please sign in to comment.