示例#1
0
def _background(meta, oauth, builder, config_dict, lets_connect):
    # type: (Metadata, str, Gtk.builder, dict, bool) -> None
    window = builder.get_object('eduvpn-window')

    try:
        info = user_info(oauth, meta.api_base_uri)
        meta.user_id = info['user_id']
    except Exception as e:
        error = e
        GLib.idle_add(lambda: error_helper(window, "Can't fetch user info", str(error)))
        raise

    if info['is_disabled']:
        GLib.idle_add(lambda: error_helper(window, "This account has been disabled", ""))

    if info['two_factor_enrolled']:
        # Multiple 2fa can be enrolled, but we only support one.
        meta.username = info['two_factor_enrolled_with'][0]
        GLib.idle_add(lambda: finalizing_step(meta=meta, builder=builder, config_dict=config_dict,
                                              lets_connect=lets_connect))
    else:
        if len(meta.two_factor_method) == 0:
            logger.info("no two factor auth enabled on server")
            GLib.idle_add(lambda: finalizing_step(meta=meta, builder=builder, config_dict=config_dict,
                                                  lets_connect=lets_connect))
        elif len(meta.two_factor_method) > 1:
            logger.info("Multi two factor methods available")
            GLib.idle_add(lambda: _choice_window(options=meta.two_factor_method, meta=meta, oauth=oauth,
                                                 builder=builder, config_dict=config_dict, lets_connect=lets_connect))
        else:
            GLib.idle_add(lambda: _enroll(oauth=oauth, meta=meta, builder=builder, config_dict=config_dict,
                                          lets_connect=lets_connect))
def choice_window(options, meta, oauth, builder):
    logger.info("presenting user with two-factor auth method dialog")
    two_dialog = builder.get_object('2fa-dialog')

    for i, option in enumerate(options):
        two_dialog.add_button(option, i)
    two_dialog.show()
    index = int(two_dialog.run())
    if index >= 0:
        meta.username = options[index]
        logger.info("user selected '{}'".format(meta.username))
        finalizing_step(oauth=oauth, meta=meta, builder=builder)
    two_dialog.destroy()
示例#3
0
def _background(meta, oauth, dialog, builder, lets_connect):
    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)
        ovpn_text = format_like_ovpn(meta.config, meta.cert, meta.key)
        config_dict = parse_ovpn(ovpn_text)
        if meta.two_factor:
            GLib.idle_add(lambda: two_auth_step(builder,
                                                oauth,
                                                meta,
                                                config_dict=config_dict,
                                                lets_connect=lets_connect))
        else:
            GLib.idle_add(lambda: finalizing_step(meta=meta,
                                                  builder=builder,
                                                  config_dict=config_dict,
                                                  lets_connect=lets_connect))
        GLib.idle_add(lambda: dialog.hide())

    except Exception as e:
        error = e
        GLib.idle_add(lambda: error_helper(
            dialog, "can't finalize configuration", "{}: {}".format(
                type(error).__name__, str(error))))
        GLib.idle_add(lambda: dialog.hide())
        raise
示例#4
0
def _enroll(builder, oauth, meta, config_dict, secret, key, lets_connect):
    # type : (Gtk.Builder, oauth, Metadata, config_dict, secret, key, bool) -> None
    dialog = builder.get_object('totp-enroll-dialog')
    error_label = builder.get_object('totp-error-label')
    cancel_button = builder.get_object('totp-cancel-button')
    submit_button = builder.get_object('totp-submit-button')

    try:
        two_factor_enroll_totp(oauth,
                               meta.api_base_uri,
                               secret=secret,
                               key=key)
    except Exception as e:
        error = e
        GLib.idle_add(lambda: error_label.set_markup(
            '<span color="red" size="large">{}</span>'.format(error)))
        GLib.idle_add(lambda: submit_button.set_sensitive(True))
        GLib.idle_add(lambda: cancel_button.set_sensitive(True))
        raise
    else:
        GLib.idle_add(lambda: finalizing_step(meta=meta,
                                              builder=builder,
                                              config_dict=config_dict,
                                              lets_connect=lets_connect))
        GLib.idle_add(lambda: dialog.hide())
def background(meta, oauth, builder):
    window = builder.get_object('eduvpn-window')

    try:
        info = user_info(oauth, meta.api_base_uri)
    except Exception as e:
        GLib.idle_add(
            lambda: error_helper(window, "Can't fetch user info", str(e)))
        raise

    if info['is_disabled']:
        GLib.idle_add(
            lambda: error_helper(window, "This account has been disabled", ""))

    if not info['two_factor_enrolled']:
        logger.info("no two factor auth enabled")
        GLib.idle_add(
            lambda: finalizing_step(oauth=oauth, meta=meta, builder=builder))

    elif 'two_factor_enrolled_with' in info:
        options = info['two_factor_enrolled_with']
        if len(options) > 1:
            GLib.idle_add(lambda: choice_window(
                options=options, meta=meta, oauth=oauth, builder=builder))
            return
        elif len(options) == 1:
            logger.info(
                "selection only one two-factor auth methods available ({})".
                format(options[0]))
            meta.username = options[0]
        else:
            GLib.idle_add(lambda: error_helper(
                window, "two_factor_enrolled_with' doesn't contain any fields",
                ""))
        GLib.idle_add(
            lambda: finalizing_step(oauth=oauth, meta=meta, builder=builder))
 def test_finalizing_step(self, *_):
     finalizing_step(builder=self.builder, meta=self.meta, config_dict=mock_config_dict, lets_connect=False)
示例#7
0
 def test_finalizing_step(self, *_):
     finalizing_step(builder=self.builder, meta=self.meta, oauth=self.oauth)