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()
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
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)
def test_finalizing_step(self, *_): finalizing_step(builder=self.builder, meta=self.meta, oauth=self.oauth)