Blame SOURCES/0018-fix-client-service-use-dict-based-dbus-APIs.patch

8a3219
From f0e4beea7c96478661dd1e3088392400f7cec66e Mon Sep 17 00:00:00 2001
8a3219
From: Eric Garver <eric@garver.life>
8a3219
Date: Wed, 26 Jun 2019 15:07:16 -0400
8a3219
Subject: [PATCH 18/20] fix: client: service: use dict based dbus APIs
8a3219
8a3219
Fixes: 1fc208bf9317 ("feat: service includes")
8a3219
(cherry picked from commit 632380e6efcdfd2282216002bd92f8f6d96467b9)
8a3219
---
8a3219
 src/firewall/client.py | 51 ++++++++++++++++++++++++++++++++++--------
8a3219
 1 file changed, 42 insertions(+), 9 deletions(-)
8a3219
8a3219
diff --git a/src/firewall/client.py b/src/firewall/client.py
8a3219
index 242c3a0ab0f4..3c4ea5c63559 100644
8a3219
--- a/src/firewall/client.py
8a3219
+++ b/src/firewall/client.py
8a3219
@@ -818,15 +818,46 @@ class FirewallClientConfigZone(object):
8a3219
 class FirewallClientServiceSettings(object):
8a3219
     @handle_exceptions
8a3219
     def __init__(self, settings=None):
8a3219
+        self.settings = ["", "", "", [], [], {}, [], [], []]
8a3219
+        self.settings_name = ["version", "short", "description", "ports",
8a3219
+                              "modules", "destination", "protocols",
8a3219
+                              "source_ports", "includes"]
8a3219
+        self.settings_dbus_type = ["s", "s", "s", "(ss)",
8a3219
+                                   "s", "ss", "s",
8a3219
+                                   "(ss)", "s"]
8a3219
         if settings:
8a3219
-            self.settings = settings
8a3219
-        else:
8a3219
-            self.settings = ["", "", "", [], [], {}, [], [], []]
8a3219
+            if type(settings) is list:
8a3219
+                for i,v in enumerate(settings):
8a3219
+                    self.settings[i] = settings[i]
8a3219
+            elif type(settings) is dict:
8a3219
+                self.setSettingsDict(settings)
8a3219
 
8a3219
     @handle_exceptions
8a3219
     def __repr__(self):
8a3219
         return '%s(%r)' % (self.__class__, self.settings)
8a3219
 
8a3219
+    @handle_exceptions
8a3219
+    def getSettingsDict(self):
8a3219
+        settings = {}
8a3219
+        for key,value in zip(self.settings_name, self.settings):
8a3219
+            settings[key] = value
8a3219
+        return settings
8a3219
+    @handle_exceptions
8a3219
+    def setSettingsDict(self, settings):
8a3219
+        for key in settings:
8a3219
+            self.settings[self.settings_name.index(key)] = settings[key]
8a3219
+    @handle_exceptions
8a3219
+    def getSettingsDbusDict(self):
8a3219
+        settings = {}
8a3219
+        for key,value,sig in zip(self.settings_name, self.settings, self.settings_dbus_type):
8a3219
+            if type(value) is list:
8a3219
+                settings[key] = dbus.Array(value, signature=sig)
8a3219
+            elif type(value) is dict:
8a3219
+                settings[key] = dbus.Dictionary(value, signature=sig)
8a3219
+            else:
8a3219
+                settings[key] = value
8a3219
+        return settings
8a3219
+
8a3219
     @handle_exceptions
8a3219
     def getVersion(self):
8a3219
         return self.settings[0]
8a3219
@@ -1467,13 +1498,13 @@ class FirewallClientConfigService(object):
8a3219
     @slip.dbus.polkit.enable_proxy
8a3219
     @handle_exceptions
8a3219
     def getSettings(self):
8a3219
-        return FirewallClientServiceSettings(list(dbus_to_python(\
8a3219
-                    self.fw_service.getSettings())))
8a3219
+        return FirewallClientServiceSettings(dbus_to_python(
8a3219
+                    self.fw_service.getSettings2()))
8a3219
 
8a3219
     @slip.dbus.polkit.enable_proxy
8a3219
     @handle_exceptions
8a3219
     def update(self, settings):
8a3219
-        self.fw_service.update(tuple(settings.settings))
8a3219
+        self.fw_service.update2(settings.getSettingsDbusDict())
8a3219
 
8a3219
     @slip.dbus.polkit.enable_proxy
8a3219
     @handle_exceptions
8a3219
@@ -2431,7 +2462,9 @@ class FirewallClientConfig(object):
8a3219
     @handle_exceptions
8a3219
     def addService(self, name, settings):
8a3219
         if isinstance(settings, FirewallClientServiceSettings):
8a3219
-            path = self.fw_config.addService(name, tuple(settings.settings))
8a3219
+            path = self.fw_config.addService2(name, settings.getSettingsDbusDict())
8a3219
+        elif type(settings) is dict:
8a3219
+            path = self.fw_config.addService2(name, settings)
8a3219
         else:
8a3219
             path = self.fw_config.addService(name, tuple(settings))
8a3219
         return FirewallClientConfigService(self.bus, path)
8a3219
@@ -2899,8 +2932,8 @@ class FirewallClient(object):
8a3219
     @slip.dbus.polkit.enable_proxy
8a3219
     @handle_exceptions
8a3219
     def getServiceSettings(self, service):
8a3219
-        return FirewallClientServiceSettings(list(dbus_to_python(\
8a3219
-                    self.fw.getServiceSettings(service))))
8a3219
+        return FirewallClientServiceSettings(dbus_to_python(
8a3219
+                    self.fw.getServiceSettings2(service)))
8a3219
 
8a3219
     @slip.dbus.polkit.enable_proxy
8a3219
     @handle_exceptions
8a3219
-- 
8a3219
2.20.1
8a3219