def select_instance_step(meta, instances, builder, verifier): """prompt user with instance dialog""" logger.info("presenting instances to user") dialog = builder.get_object('instances-dialog') model = builder.get_object('instances-model') selection = builder.get_object('instances-selection') model.clear() dialog.show_all() for display_name, url, icon_data in instances: icon = bytes2pixbuf(icon_data) model.append((display_name, url, icon, base64.b64encode(icon_data).decode('ascii'))) response = dialog.run() dialog.hide() if response == 0: # cancel logger.info("cancel button pressed") else: model, treeiter = selection.get_selected() if treeiter: display_name, instance_base_uri, icon_pixbuf, icon_data = model[ treeiter] meta.display_name = display_name meta.instance_base_uri = instance_base_uri meta.icon_data = icon_data browser_step(builder, meta, verifier) else: logger.info("nothing selected")
def select_instance_step( meta, instances, builder, verifier, lets_connect ): # type: (Metadata, List[Tuple[str, str, Optional[bytes]]], Gtk.builder, str, bool) -> None """prompt user with instance dialog""" logger.info("presenting instances to user") dialog = builder.get_object('instances-dialog') model = builder.get_object('instances-model') selection = builder.get_object('instances-selection') window = builder.get_object('eduvpn-window') dialog.set_transient_for(window) model.clear() dialog.show_all() for display_name, url, icon_data in instances: icon = bytes2pixbuf(icon_data) # type: ignore model.append( (display_name, url, icon, base64.b64encode(icon_data).decode('ascii'))) # type: ignore response = dialog.run() dialog.hide() if response == 0: # cancel logger.info("cancel button pressed") else: model, treeiter = selection.get_selected() if treeiter: display_name, instance_base_uri, icon_pixbuf, icon_data = model[ treeiter] meta.display_name = display_name meta.instance_base_uri = instance_base_uri meta.icon_data = str(icon_data) browser_step(builder, meta, verifier, lets_connect=lets_connect) else: logger.info("nothing selected")
def custom_url(builder, meta, verifier, lets_connect): # type: (Gtk.builder, Metadata, str, bool) -> None """the custom URL dialog where a user can enter a custom instance URL""" dialog = builder.get_object('custom-url-dialog') window = builder.get_object('eduvpn-window') dialog.set_transient_for(window) entry = builder.get_object('custom-url-entry') # entry.set_text('https://debian-vpn.tuxed.net') entry.set_position(len(entry.get_text())) dialog.show_all() while True: response = dialog.run() if response == 1: url = entry.get_text().strip() logger.info("ok pressed, entry text: {}".format(url)) if not url.startswith('https://'): error_helper(dialog, "Invalid URL", "URL should start with https://") elif url == 'https://': error_helper(dialog, "Invalid URL", "Please enter a URL") else: dialog.hide() meta.display_name = url[8:].split('/')[0] logger.info("using {} for display name".format(meta.display_name)) meta.instance_base_uri = url meta.connection_type = 'Custom Instance' meta.authorization_type = 'local' meta.icon_data = None browser_step(builder=builder, meta=meta, verifier=verifier, lets_connect=lets_connect) break else: # cancel or close logger.info("cancel or close button pressed (response {})".format(response)) dialog.hide() return
def reauth(meta, verifier, builder): """called when the authorization is expired""" logger.info("looks like authorization is expired or removed") window = builder.get_object('eduvpn-window') dialog = Gtk.MessageDialog(window, Gtk.DialogFlags.MODAL, Gtk.MessageType.QUESTION, Gtk.ButtonsType.YES_NO, "Authorization for {}is expired or removed.".format(meta.display_name)) dialog.format_secondary_text("Do you want to re-authorize?") response = dialog.run() if response == Gtk.ResponseType.YES: browser_step(builder, meta, verifier) delete_provider(meta.uuid) elif response == Gtk.ResponseType.NO: pass dialog.destroy()
def reauth(meta, verifier, builder, lets_connect): # type: (Metadata, str, Gtk.builder, bool) -> None """called when the authorization is expired""" logger.info("looks like authorization is expired or removed") window = builder.get_object('eduvpn-window') dialog = Gtk.MessageDialog(window, Gtk.DialogFlags.MODAL, Gtk.MessageType.QUESTION, Gtk.ButtonsType.YES_NO, "Authorization for {} is expired or removed.".format(meta.display_name)) dialog.format_secondary_text("Do you want to re-authorize?") response = dialog.run() if response == Gtk.ResponseType.YES: meta.token = {None: None} browser_step(builder, meta, verifier, force_token_refresh=True, lets_connect=lets_connect) elif response == Gtk.ResponseType.NO: pass dialog.hide()
def custom_url(builder, meta, verifier): """the custom URL dialog where a user can enter a custom instance URL""" dialog = builder.get_object('custom-url-dialog') entry = builder.get_object('custom-url-entry') dialog.show_all() while True: response = dialog.run() if response == 1: url = entry.get_text() logger.info("ok pressed, entry text: {}".format(url)) if not url.startswith('https://'): GLib.idle_add(lambda: error_helper( dialog, "Invalid URL", "URL should start with https://")) else: GLib.idle_add(lambda: dialog.hide()) meta.display_name = url[8:].split('/')[0] logger.info("using {} for display name".format( meta.display_name)) meta.instance_base_uri = url meta.connection_type = 'Custom Instance' meta.authorization_type = 'local' meta.icon_data = None GLib.idle_add(lambda: browser_step( builder=builder, meta=meta, verifier=verifier)) break else: # cancel or close logger.info("cancel or close button pressed (response {})".format( response)) dialog.hide() return
def test_browser_step(self, *_): browser_step(builder=self.builder, meta=self.meta, verifier=self.verifier)
def test_browser_step(self, *_): browser_step(builder=self.builder, meta=self.meta, verifier=self.verifier, lets_connect=False)