def switched(meta, builder, verifier, lets_connect): # type: (Metadata, Gtk.builder, str, bool) -> None switch = builder.get_object('connect-switch') state = switch.get_active() logger.info(u"switch activated, old state {}".format(state)) if not state: logger.info(u"setting switch ON") GLib.idle_add(lambda: switch.set_active(True)) activate_connection(meta=meta, builder=builder, verifier=verifier, lets_connect=lets_connect) else: notification = init_notify(lets_connect) notify(notification, u"eduVPN disconnecting...", u"Disconnecting from {}".format(meta.display_name)) logger.info(u"setting switch OFF") GLib.idle_add(lambda: switch.set_active(False)) try: disconnect_provider(meta.uuid) except Exception as e: window = builder.get_object('eduvpn-window') error_helper(window, u"can't disconnect", "{}: {}".format(type(e).__name__, str(e))) GLib.idle_add(lambda: switch.set_active(True)) raise
def activate_connection( meta, builder, verifier, lets_connect): # type: (Metadata, Gtk.builder, str, bool) -> None """do the actual connecting action""" logger.info("Connecting to {}".format(meta.display_name)) disconnect_all() _, name = get_brand(lets_connect) notification = init_notify(lets_connect) notify(notification, "{} connecting...".format(name), "Connecting to '{}'".format(meta.display_name)) try: if not meta.token: logger.error("metadata for {} doesn't contain oauth2 token".format( meta.uuid)) connect_provider(meta.uuid) else: oauth = oauth_from_token(meta=meta, lets_connect=lets_connect) thread_helper(lambda: _auth_check( oauth, meta, verifier, builder, lets_connect=lets_connect)) except Exception as e: switch = builder.get_object('connect-switch') GLib.idle_add(switch.set_active, False) window = builder.get_object('eduvpn-window') error_helper(window, "can't enable connection", "{}: {}".format(type(e).__name__, str(e))) raise
def delete_profile(builder, lets_connect): # type: (Gtk.builder, bool) -> None """called when the user presses the - button""" logger.info("delete provider clicked") meta = metadata_of_selected(builder) if not meta: logger.info("nothing selected") return window = builder.get_object('eduvpn-window') dialog = Gtk.MessageDialog( window, Gtk.DialogFlags.MODAL, Gtk.MessageType.WARNING, Gtk.ButtonsType.YES_NO, "Are you sure you want to remove '{}'?".format(meta.display_name)) dialog.format_secondary_text("This action can't be undone.") response = dialog.run() if response == Gtk.ResponseType.YES: logger.info("deleting provider config") try: delete_provider(meta.uuid) notification = init_notify(lets_connect) notify(notification, "eduVPN provider deleted", "Deleted '{}'".format(meta.display_name)) except Exception as e: error_helper(window, "can't delete profile", str(e)) dialog.hide() raise GLib.idle_add( lambda: refresh_start(builder, lets_connect=lets_connect)) elif response == Gtk.ResponseType.NO: logger.info("not deleting provider config") dialog.hide()
def vpn_change(builder, lets_connect, state=0, reason=0): # type: (Gtk.builder, bool, Optional[int], Optional[int]) -> None logger.info(u"VPN status change") switch = builder.get_object('connect-switch') ipv4_label = builder.get_object('ipv4-label') ipv6_label = builder.get_object('ipv6-label') # get the currently selected uuid meta = metadata_of_selected(builder=builder) if not meta: logger.info(u"VPN status changed but no profile selected") return notification = init_notify(lets_connect) selected_uuid_active = False for active in list_active(): try: if active.Uuid == meta.uuid: selected_uuid_active = True if active.State == 2: # activated logger.info(u"setting ip for {}".format(meta.uuid)) logger.info(u"setting switch ON") switch.set_active(True) GLib.idle_add(lambda: ipv4_label.set_text( active.Ip4Config.AddressData[0]['address'])) GLib.idle_add(lambda: ipv6_label.set_text( active.Ip6Config.AddressData[0]['address'])) notify(notification, u"eduVPN connected", u"Connected to '{}'".format(meta.display_name)) elif active.State == 1: # activating logger.info(u"setting switch ON") switch.set_active(True) notify(notification, u"eduVPN connecting...", u"Activating '{}'".format(meta.display_name)) else: logger.info(u"clearing ip for '{}'".format(meta.uuid)) logger.info(u"setting switch OFF") switch.set_active(False) GLib.idle_add(lambda: ipv4_label.set_text("")) GLib.idle_add(lambda: ipv6_label.set_text("")) break except Exception as e: logger.warning( u"probably race condition in network manager: {}".format(e)) raise if not selected_uuid_active: logger.info(u"Our selected profile not active {}".format(meta.uuid)) notify(notification, u"eduVPN Disconnected", u"Disconnected from '{}'".format(meta.display_name)) logger.info(u"setting switch OFF") switch.set_active(False) GLib.idle_add(lambda: ipv4_label.set_text("-")) GLib.idle_add(lambda: ipv6_label.set_text("-"))
def _background(meta, dialog, builder, config_dict, lets_connect): try: uuid = store_provider(meta, config_dict) monitor_vpn(uuid=uuid, callback=lambda *args, **kwargs: vpn_change(builder=builder, lets_connect=lets_connect)) notification = init_notify(lets_connect) GLib.idle_add(lambda: notify(notification, "eduVPN provider added", "added provider '{}'".format(meta.display_name))) except Exception as e: error = e GLib.idle_add(lambda: error_helper(dialog, "can't store configuration", "{}: {}".format(type(error).__name__, str(error)))) GLib.idle_add(lambda: dialog.hide()) raise else: GLib.idle_add(lambda: dialog.hide()) GLib.idle_add(lambda: refresh_start(builder, lets_connect=lets_connect))
def test_notify(self): notifier = init_notify(False) notify(notifier, 'test')