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

Feature/add dbus interface #19

Merged
merged 4 commits into from
May 17, 2023
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
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