From f0e4beea7c96478661dd1e3088392400f7cec66e Mon Sep 17 00:00:00 2001 From: Eric Garver 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