Пример #1
0
def delete_profile(builder):
    """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.QUESTION,
        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)
            notify("eduVPN provider deleted",
                   "Deleted '{}'".format(meta.display_name))
        except Exception as e:
            error_helper(window, "can't delete profile", str(e))
            dialog.destroy()
            raise
        GLib.idle_add(lambda: update_providers(builder))
    elif response == Gtk.ResponseType.NO:
        logger.info("not deleting provider config")
    dialog.destroy()
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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()
Пример #5
0
def activate_connection(meta, builder):
    """do the actual connecting action"""
    logger.info("Connecting to {}".format(meta.display_name))
    notify("eduVPN connecting...", "Connecting to '{}'".format(meta.display_name))
    try:
        if not meta.token:
            logger.error("metadata for {} doesn't contain oauth2 token".format(meta.uuid))
        else:
            oauth = oauth_from_token(meta=meta)
            config = get_profile_config(oauth, meta.api_base_uri, meta.profile_id)
            meta.config = config
            update_config_provider(meta)

            if datetime.now() > datetime.fromtimestamp(meta.token['expires_at']):
                logger.info("key pair is expired")
                cert, key = create_keypair(oauth, meta.api_base_uri)
                update_keys_provider(meta.uuid, cert, key)

        connect_provider(meta.uuid)

    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
Пример #6
0
def _background(meta, oauth, dialog, builder):
    try:
        cert, key = create_keypair(oauth, meta.api_base_uri)
        meta.cert = cert
        meta.key = key
        meta.config = get_profile_config(oauth, meta.api_base_uri,
                                         meta.profile_id)
    except Exception as e:
        GLib.idle_add(
            lambda: error_helper(dialog, "can't finalize configuration",
                                 "{}: {}".format(type(e).__name__, str(e))))
        GLib.idle_add(lambda: dialog.hide())
        raise
    else:
        try:
            uuid = store_provider(meta)
            monitor_vpn(
                uuid=uuid,
                callback=lambda *args, **kwargs: vpn_change(builder=builder))
            GLib.idle_add(
                lambda: notify("eduVPN provider added", "added provider '{}'".
                               format(meta.display_name)))
        except Exception as e:
            GLib.idle_add(
                lambda: error_helper(dialog, "can't store configuration",
                                     "{} {}".format(type(e).__name__, str(e))))
            GLib.idle_add(lambda: dialog.hide())
            raise
        else:
            GLib.idle_add(lambda: dialog.hide())
            GLib.idle_add(lambda: update_providers(builder))
Пример #7
0
def switched(meta, builder):
    switch = builder.get_object('connect-switch')
    state = switch.get_active()
    logger.info("switch activated, old state {}".format(state))
    if not state:
        logger.info("setting switch ON")
        GLib.idle_add(lambda: switch.set_active(True))
        activate_connection(meta=meta, builder=builder)
    else:
        notify("eduVPN disconnecting...", "Disconnecting from {}".format(meta.display_name))
        logger.info("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, "can't disconnect", "{}: {}".format(type(e).__name__, str(e)))
            GLib.idle_add(lambda: switch.set_active(True))
            raise
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("-"))
Пример #9
0
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))
Пример #10
0
def vpn_change(builder):
    logger.info("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)

    selected_uuid_active = False
    for active in active_connections():
        try:
            if active.Uuid == meta.uuid:
                selected_uuid_active = True
                if active.State == 2:  # activated
                    logger.info("setting ip for {}".format(meta.uuid))
                    logger.info("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("eduVPN connected",
                           "Connected to '{}'".format(meta.display_name))
                elif active.State == 1:  # activating
                    logger.info("setting switch ON")
                    switch.set_active(True)
                    notify("eduVPN connecting...",
                           "Activating '{}'".format(meta.display_name))
                else:
                    logger.info("clearing ip for '{}'".format(meta.uuid))
                    logger.info("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(
                "probably race condition in network manager: {}".format(e))
            pass

    if not selected_uuid_active:
        logger.info("Our selected profile not active {}".format(meta.uuid))
        notify("eduVPN Disconnected",
               "Disconnected from '{}'".format(meta.display_name))
        logger.info("setting switch OFF")
        switch.set_active(False)
        GLib.idle_add(lambda: ipv4_label.set_text(""))
        GLib.idle_add(lambda: ipv6_label.set_text(""))
Пример #11
0
 def test_notify(self):
     notify('test')
 def test_notify(self):
     notifier = init_notify(False)
     notify(notifier, 'test')