Blob Blame History Raw
From f0e4beea7c96478661dd1e3088392400f7cec66e Mon Sep 17 00:00:00 2001
From: Eric Garver <eric@garver.life>
Date: Wed, 26 Jun 2019 15:07:16 -0400
Subject: [PATCH 18/20] fix: client: service: use dict based dbus APIs

Fixes: 1fc208bf9317 ("feat: service includes")
(cherry picked from commit 632380e6efcdfd2282216002bd92f8f6d96467b9)
---
 src/firewall/client.py | 51 ++++++++++++++++++++++++++++++++++--------
 1 file changed, 42 insertions(+), 9 deletions(-)

diff --git a/src/firewall/client.py b/src/firewall/client.py
index 242c3a0ab0f4..3c4ea5c63559 100644
--- a/src/firewall/client.py
+++ b/src/firewall/client.py
@@ -818,15 +818,46 @@ class FirewallClientConfigZone(object):
 class FirewallClientServiceSettings(object):
     @handle_exceptions
     def __init__(self, settings=None):
+        self.settings = ["", "", "", [], [], {}, [], [], []]
+        self.settings_name = ["version", "short", "description", "ports",
+                              "modules", "destination", "protocols",
+                              "source_ports", "includes"]
+        self.settings_dbus_type = ["s", "s", "s", "(ss)",
+                                   "s", "ss", "s",
+                                   "(ss)", "s"]
         if settings:
-            self.settings = settings
-        else:
-            self.settings = ["", "", "", [], [], {}, [], [], []]
+            if type(settings) is list:
+                for i,v in enumerate(settings):
+                    self.settings[i] = settings[i]
+            elif type(settings) is dict:
+                self.setSettingsDict(settings)
 
     @handle_exceptions
     def __repr__(self):
         return '%s(%r)' % (self.__class__, self.settings)
 
+    @handle_exceptions
+    def getSettingsDict(self):
+        settings = {}
+        for key,value in zip(self.settings_name, self.settings):
+            settings[key] = value
+        return settings
+    @handle_exceptions
+    def setSettingsDict(self, settings):
+        for key in settings:
+            self.settings[self.settings_name.index(key)] = settings[key]
+    @handle_exceptions
+    def getSettingsDbusDict(self):
+        settings = {}
+        for key,value,sig in zip(self.settings_name, self.settings, self.settings_dbus_type):
+            if type(value) is list:
+                settings[key] = dbus.Array(value, signature=sig)
+            elif type(value) is dict:
+                settings[key] = dbus.Dictionary(value, signature=sig)
+            else:
+                settings[key] = value
+        return settings
+
     @handle_exceptions
     def getVersion(self):
         return self.settings[0]
@@ -1467,13 +1498,13 @@ class FirewallClientConfigService(object):
     @slip.dbus.polkit.enable_proxy
     @handle_exceptions
     def getSettings(self):
-        return FirewallClientServiceSettings(list(dbus_to_python(\
-                    self.fw_service.getSettings())))
+        return FirewallClientServiceSettings(dbus_to_python(
+                    self.fw_service.getSettings2()))
 
     @slip.dbus.polkit.enable_proxy
     @handle_exceptions
     def update(self, settings):
-        self.fw_service.update(tuple(settings.settings))
+        self.fw_service.update2(settings.getSettingsDbusDict())
 
     @slip.dbus.polkit.enable_proxy
     @handle_exceptions
@@ -2431,7 +2462,9 @@ class FirewallClientConfig(object):
     @handle_exceptions
     def addService(self, name, settings):
         if isinstance(settings, FirewallClientServiceSettings):
-            path = self.fw_config.addService(name, tuple(settings.settings))
+            path = self.fw_config.addService2(name, settings.getSettingsDbusDict())
+        elif type(settings) is dict:
+            path = self.fw_config.addService2(name, settings)
         else:
             path = self.fw_config.addService(name, tuple(settings))
         return FirewallClientConfigService(self.bus, path)
@@ -2899,8 +2932,8 @@ class FirewallClient(object):
     @slip.dbus.polkit.enable_proxy
     @handle_exceptions
     def getServiceSettings(self, service):
-        return FirewallClientServiceSettings(list(dbus_to_python(\
-                    self.fw.getServiceSettings(service))))
+        return FirewallClientServiceSettings(dbus_to_python(
+                    self.fw.getServiceSettings2(service)))
 
     @slip.dbus.polkit.enable_proxy
     @handle_exceptions
-- 
2.20.1