Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSimon Schampijer <simon@schampijer.de>2008-10-29 13:17:07 (GMT)
committer Simon Schampijer <simon@schampijer.de>2008-10-29 13:17:07 (GMT)
commit1a6f58bf3649242292499e20ce0ffbcad5886b8f (patch)
treec0d57d3bc4f571a7101ef727d04b1156c6e9d309 /src
parentfe62b74c2e2efab69191fc42de9fc6f6dcd2b506 (diff)
Add intermediate object to report the secrets back from the dialog
Diffstat (limited to 'src')
-rw-r--r--src/jarabe/desktop/keydialog.py29
-rw-r--r--src/jarabe/desktop/meshbox.py7
-rw-r--r--src/jarabe/model/network.py31
3 files changed, 43 insertions, 24 deletions
diff --git a/src/jarabe/desktop/keydialog.py b/src/jarabe/desktop/keydialog.py
index ed9449e..ed50d55 100644
--- a/src/jarabe/desktop/keydialog.py
+++ b/src/jarabe/desktop/keydialog.py
@@ -87,12 +87,11 @@ class CanceledKeyRequestError(dbus.DBusException):
self._dbus_error_name = network.NM_SETTINGS_IFACE + '.CanceledError'
class KeyDialog(gtk.Dialog):
- def __init__(self, ssid, caps, async_cb, async_err_cb):
+ def __init__(self, ssid, caps, response):
gtk.Dialog.__init__(self, flags=gtk.DIALOG_MODAL)
self.set_title("Wireless Key Required")
- self._async_cb = async_cb
- self._async_err_cb = async_err_cb
+ self._response = response
self._entry = None
self._ssid = ssid
self._caps = caps
@@ -126,16 +125,16 @@ class KeyDialog(gtk.Dialog):
def create_security(self):
raise NotImplementedError
- def get_callbacks(self):
- return (self._async_cb, self._async_err_cb)
+ def get_response_object(self):
+ return self._response
WEP_PASSPHRASE = 1
WEP_HEX = 2
WEP_ASCII = 3
class WEPKeyDialog(KeyDialog):
- def __init__(self, ssid, caps, async_cb, async_err_cb):
- KeyDialog.__init__(self, ssid, caps, async_cb, async_err_cb)
+ def __init__(self, ssid, caps, response):
+ KeyDialog.__init__(self, ssid, caps, response)
# WEP key type
self.key_store = gtk.ListStore(str, int)
@@ -233,8 +232,8 @@ class WEPKeyDialog(KeyDialog):
self.set_response_sensitive(gtk.RESPONSE_OK, valid)
class WPAKeyDialog(KeyDialog):
- def __init__(self, ssid, caps, async_cb, async_err_cb):
- KeyDialog.__init__(self, ssid, caps, async_cb, async_err_cb)
+ def __init__(self, ssid, caps, response):
+ KeyDialog.__init__(self, ssid, caps, response)
self.add_key_entry()
self.store = gtk.ListStore(str, int)
@@ -313,13 +312,13 @@ class WPAKeyDialog(KeyDialog):
self.set_response_sensitive(gtk.RESPONSE_OK, valid)
return False
-def create(ssid, caps, async_cb, async_err_cb):
+def create(ssid, caps, response):
if (caps & NM_802_11_CAP_CIPHER_TKIP or caps & NM_802_11_CAP_CIPHER_CCMP) \
and (caps & NM_802_11_CAP_PROTO_WPA or \
caps & NM_802_11_CAP_PROTO_WPA2):
- key_dialog = WPAKeyDialog(ssid, caps, async_cb, async_err_cb)
+ key_dialog = WPAKeyDialog(ssid, caps, response)
else:
- key_dialog = WEPKeyDialog(ssid, caps, async_cb, async_err_cb)
+ key_dialog = WEPKeyDialog(ssid, caps, response)
key_dialog.connect("response", _key_dialog_response_cb)
key_dialog.connect("destroy", _key_dialog_destroy_cb)
@@ -329,18 +328,18 @@ def _key_dialog_destroy_cb(key_dialog, data=None):
_key_dialog_response_cb(key_dialog, gtk.RESPONSE_CANCEL)
def _key_dialog_response_cb(key_dialog, response_id):
- (async_cb, async_err_cb) = key_dialog.get_callbacks()
+ response = key_dialog.get_response_object()
security = None
if response_id == gtk.RESPONSE_OK:
security = key_dialog.create_security()
if response_id in [gtk.RESPONSE_CANCEL, gtk.RESPONSE_NONE]:
# key dialog dialog was canceled; send the error back to NM
- async_err_cb(CanceledKeyRequestError())
+ response.set_error(CanceledKeyRequestError())
elif response_id == gtk.RESPONSE_OK:
if not security:
raise RuntimeError("Invalid security arguments.")
- async_cb(security)
+ response.set_secrets(security)
else:
raise RuntimeError("Unhandled key dialog response %d" % response_id)
diff --git a/src/jarabe/desktop/meshbox.py b/src/jarabe/desktop/meshbox.py
index d5e3b04..3519dda 100644
--- a/src/jarabe/desktop/meshbox.py
+++ b/src/jarabe/desktop/meshbox.py
@@ -141,7 +141,6 @@ class AccessPointView(CanvasPulsingIcon):
self._update_state()
def _update_properties(self, props):
- logging.debug(props)
if 'Ssid' in props:
self._name = props['Ssid']
if 'Strength' in props:
@@ -273,8 +272,8 @@ class AccessPointView(CanvasPulsingIcon):
self._greyed_out = self._name.lower().find(query) == -1
self._update_state()
- def create_keydialog(self, reply, error):
- keydialog.create(self._name, self._wpa_flags, reply, error)
+ def create_keydialog(self, response):
+ keydialog.create(self._name, self._wpa_flags, response)
def disconnect(self):
self._bus.remove_signal_receiver(self.__ap_properties_changed_cb,
@@ -553,7 +552,7 @@ class NetworkManagerObserver(object):
ap_o = props.Get(_NM_ACTIVE_CONN_IFACE, 'SpecificObject')
ap_view = self._box.access_points[ap_o]
- ap_view.create_keydialog(kwargs['reply'], kwargs['error'])
+ ap_view.create_keydialog(kwargs['response'])
def __get_devices_reply_cb(self, devices_o):
for dev_o in devices_o:
diff --git a/src/jarabe/model/network.py b/src/jarabe/model/network.py
index 791a3ea..d311174 100644
--- a/src/jarabe/model/network.py
+++ b/src/jarabe/model/network.py
@@ -71,8 +71,23 @@ class NMSettings(dbus.service.Object):
def __secrets_request_cb(self, sender, **kwargs):
self.secrets_request.send(self, connection=sender,
- reply=kwargs['reply'],
- error=kwargs['error'])
+ response=kwargs['response'])
+
+class SecretsResponse(object):
+ ''' Intermediate object to report the secrets from the dialog
+ back to the connection object and which will inform NM
+ '''
+ def __init__(self, connection, reply_cb, error_cb):
+ self._connection = connection
+ self._reply_cb = reply_cb
+ self._error_cb = error_cb
+
+ def set_secrets(self, secrets):
+ self._connection.set_secrets(secrets)
+ self._reply_cb(secrets)
+
+ def set_error(self, error):
+ self._error_cb(error)
class NMSettingsConnection(dbus.service.Object):
def __init__(self, path, settings, secrets):
@@ -86,6 +101,9 @@ class NMSettingsConnection(dbus.service.Object):
self._settings = settings
self._secrets = secrets
+ def set_secrets(self, secrets):
+ self._secrets = secrets
+
@dbus.service.method(dbus_interface=NM_CONNECTION_IFACE,
in_signature='', out_signature='a{sa{sv}}')
def GetSettings(self):
@@ -95,13 +113,16 @@ class NMSettingsConnection(dbus.service.Object):
async_callbacks=('reply', 'error'),
in_signature='sasb', out_signature='a{sa{sv}}')
def GetSecrets(self, setting_name, hints, request_new, reply, error):
- logging.debug('Secrets requested for connection %s', self.path)
+ logging.debug('Secrets requested for connection %s request_new=%s'
+ % (self.path, request_new))
if request_new or self._secrets is None:
+ # request_new is for example the case when the pw on the AP changes
+ response = SecretsResponse(self, reply, error)
try:
- self.secrets_request.send(self, reply=reply, error=error)
+ self.secrets_request.send(self, response=response)
except Exception, e:
- logging.error(e)
+ logging.error('Error requesting the secrets via dialog: %s' % e)
else:
reply(self._secrets)