def _add_configured_providers(self, domain=None): """ Add the client's configured providers to the providers combo boxes. :param domain: the domain to be selected by default. :type domain: unicode """ self.ui.cbProvidersGateway.clear() providers = self._settings.get_configured_providers() if not providers: self.ui.gbGatewaySelector.setEnabled(False) return for provider in providers: label = provider eip_config_path = get_eipconfig_path(provider, relative=False) if not os.path.isfile(eip_config_path): label = provider + self.tr(" (uninitialized)") self.ui.cbProvidersGateway.addItem(label, userData=provider) # Select provider by name if domain is not None: provider_index = self.ui.cbProvidersGateway.findText( domain, QtCore.Qt.MatchStartsWith) self.ui.cbProvidersGateway.setCurrentIndex(provider_index)
def _provider_is_initialized(self, domain): """ Return whether the given domain is initialized or not. :param domain: the domain to check :type domain: str :returns: True if is initialized, False otherwise. :rtype: bool """ eipconfig_path = eipconfig.get_eipconfig_path(domain, relative=False) if os.path.isfile(eipconfig_path): return True else: return False
def _add_configured_providers(self): """ Add the client's configured providers to the providers combo boxes. """ self.ui.cbProvidersGateway.clear() providers = self._settings.get_configured_providers() if not providers: self.ui.gbGatewaySelector.setEnabled(False) return for provider in providers: label = provider eip_config_path = get_eipconfig_path(provider, relative=False) if not os.path.isfile(eip_config_path): label = provider + self.tr(" (uninitialized)") self.ui.cbProvidersGateway.addItem(label, userData=provider)
def _can_start(self, domain): """ Returns True if it has everything that is needed to run EIP, False otherwise :param domain: the domain for the provider to check :type domain: str """ if IS_LINUX and not LinuxPolicyChecker.is_up(): logger.error("No polkit agent running.") return False provider_config = ProviderConfig.get_provider_config(domain) if EIP_SERVICE not in provider_config.get_services(): return False eip_config = eipconfig.EIPConfig() api_version = provider_config.get_api_version() eip_config.set_api_version(api_version) eip_loaded = eip_config.load(eipconfig.get_eipconfig_path(domain)) launcher = get_vpn_launcher() ovpn_path = force_eval(launcher.OPENVPN_BIN_PATH) if not os.path.isfile(ovpn_path): logger.error("Cannot start OpenVPN, binary not found: %s" % (ovpn_path,)) return False # check for other problems if not eip_loaded or provider_config is None: logger.error("Cannot load provider and eip config, cannot " "autostart") return False client_cert_path = eip_config.\ get_client_cert_path(provider_config, about_to_download=True) if leap_certs.should_redownload(client_cert_path): logger.error("The client should redownload the certificate," " cannot autostart") return False if not os.path.isfile(client_cert_path): logger.error("Can't find the certificate, cannot autostart") return False return True
def _can_start(self, domain): """ Returns True if it has everything that is needed to run EIP, False otherwise :param domain: the domain for the provider to check :type domain: str """ if not LinuxPolicyChecker.is_up(): logger.error("No polkit agent running.") return False eip_config = eipconfig.EIPConfig() provider_config = ProviderConfig.get_provider_config(domain) api_version = provider_config.get_api_version() eip_config.set_api_version(api_version) eip_loaded = eip_config.load(eipconfig.get_eipconfig_path(domain)) launcher = get_vpn_launcher() ovpn_path = force_eval(launcher.OPENVPN_BIN_PATH) if not os.path.isfile(ovpn_path): logger.error("Cannot start OpenVPN, binary not found: %s" % (ovpn_path, )) return False # check for other problems if not eip_loaded or provider_config is None: logger.error("Cannot load provider and eip config, cannot " "autostart") return False client_cert_path = eip_config.\ get_client_cert_path(provider_config, about_to_download=True) if leap_certs.should_redownload(client_cert_path): logger.error("The client should redownload the certificate," " cannot autostart") return False if not os.path.isfile(client_cert_path): logger.error("Can't find the certificate, cannot autostart") return False return True
def get_gateway_country_code(self, domain): """ Signal the country code for the currently used gateway for the given provider. :param domain: the domain to get country code. :type domain: str Signals: eip_get_gateway_country_code -> str eip_no_gateway """ settings = Settings() eip_config = eipconfig.EIPConfig() provider_config = ProviderConfig.get_provider_config(domain) api_version = provider_config.get_api_version() eip_config.set_api_version(api_version) eip_config.load(eipconfig.get_eipconfig_path(domain)) gateway_selector = eipconfig.VPNGatewaySelector(eip_config) gateway_conf = settings.get_selected_gateway(domain) if gateway_conf == GATEWAY_AUTOMATIC: gateways = gateway_selector.get_gateways() else: gateways = [gateway_conf] if not gateways: self._signaler.signal(self._signaler.eip_no_gateway) return # this only works for selecting the first gateway, as we're # currently doing. ccodes = gateway_selector.get_gateways_country_code() gateway_ccode = '' # '' instead of None due to needed signal argument if ccodes is not None: gateway_ccode = ccodes[gateways[0]] self._signaler.signal(self._signaler.eip_get_gateway_country_code, gateway_ccode)
def get_gateways_list(self, domain): """ Signal a list of gateways for the given provider. :param domain: the domain to get the gateways. :type domain: str Signals: eip_get_gateways_list -> list of unicode eip_get_gateways_list_error eip_uninitialized_provider """ if not self._provider_is_initialized(domain): if self._signaler is not None: self._signaler.signal( self._signaler.eip_uninitialized_provider) return provider_config = ProviderConfig.get_provider_config(domain) if EIP_SERVICE not in provider_config.get_services(): return eip_config = eipconfig.EIPConfig() api_version = provider_config.get_api_version() eip_config.set_api_version(api_version) eip_loaded = eip_config.load(eipconfig.get_eipconfig_path(domain)) # check for other problems if not eip_loaded or provider_config is None: if self._signaler is not None: self._signaler.signal( self._signaler.eip_get_gateways_list_error) return gateways = eipconfig.VPNGatewaySelector(eip_config).get_gateways_list() if self._signaler is not None: self._signaler.signal( self._signaler.eip_get_gateways_list, gateways)
def get_gateways_list(self, domain): """ Signal a list of gateways for the given provider. :param domain: the domain to get the gateways. :type domain: str Signals: eip_get_gateways_list -> list of unicode eip_get_gateways_list_error eip_uninitialized_provider """ if not self._provider_is_initialized(domain): if self._signaler is not None: self._signaler.signal( self._signaler.eip_uninitialized_provider) return eip_config = eipconfig.EIPConfig() provider_config = ProviderConfig.get_provider_config(domain) api_version = provider_config.get_api_version() eip_config.set_api_version(api_version) eip_loaded = eip_config.load(eipconfig.get_eipconfig_path(domain)) # check for other problems if not eip_loaded or provider_config is None: if self._signaler is not None: self._signaler.signal( self._signaler.eip_get_gateways_list_error) return gateways = eipconfig.VPNGatewaySelector(eip_config).get_gateways_list() if self._signaler is not None: self._signaler.signal(self._signaler.eip_get_gateways_list, gateways)
def get_gateways_list(self, domain): """ Signal a list of gateways for the given provider. :param domain: the domain to get the gateways. :type domain: str Signals: eip_get_gateways_list -> list of unicode eip_get_gateways_list_error eip_uninitialized_provider """ if not self._provider_is_initialized(domain): if self._signaler is not None: self._signaler.signal( self._signaler.EIP_UNINITIALIZED_PROVIDER) return eip_config = eipconfig.EIPConfig() provider_config = ProviderConfig.get_provider_config(domain) api_version = provider_config.get_api_version() eip_config.set_api_version(api_version) eip_loaded = eip_config.load(eipconfig.get_eipconfig_path(domain)) # check for other problems if not eip_loaded or provider_config is None: if self._signaler is not None: self._signaler.signal( self._signaler.EIP_GET_GATEWAYS_LIST_ERROR) return gateways = eipconfig.VPNGatewaySelector(eip_config).get_gateways_list() if self._signaler is not None: self._signaler.signal( self._signaler.EIP_GET_GATEWAYS_LIST, gateways)
def _populate_gateways(self, domain_idx): """ SLOT TRIGGERS: self.ui.cbProvidersGateway.currentIndexChanged[unicode] Loads the gateways that the provider provides into the UI for the user to select. :param domain: the domain index of the provider to load gateways from. :type domain: int """ # We hide the maybe-visible status label after a change self.ui.lblProvidersGatewayStatus.setVisible(False) if domain_idx == -1: return domain = self.ui.cbProvidersGateway.itemData(domain_idx) if not os.path.isfile(get_eipconfig_path(domain, relative=False)): self._set_providers_gateway_status( self.tr("This is an uninitialized provider, " "please log in first."), error=True) self.ui.pbSaveGateway.setEnabled(False) self.ui.cbGateways.setEnabled(False) return else: self.ui.pbSaveGateway.setEnabled(True) self.ui.cbGateways.setEnabled(True) try: # disconnect previously connected save method self.ui.pbSaveGateway.clicked.disconnect() except RuntimeError: pass # Signal was not connected # set the proper connection for the 'save' button save_gateway = partial(self._save_selected_gateway, domain) self.ui.pbSaveGateway.clicked.connect(save_gateway) eip_config = EIPConfig() provider_config = ProviderConfig.get_provider_config(domain) api_version = provider_config.get_api_version() eip_config.set_api_version(api_version) eip_loaded = eip_config.load(get_eipconfig_path(domain)) if not eip_loaded or provider_config is None: self._set_providers_gateway_status( self.tr("There was a problem with configuration files."), error=True) return gateways = VPNGatewaySelector(eip_config).get_gateways_list() logger.debug(gateways) self.ui.cbGateways.clear() self.ui.cbGateways.addItem(self.AUTOMATIC_GATEWAY_LABEL) # Add the available gateways and # select the one stored in configuration file. selected_gateway = self._settings.get_selected_gateway(domain) index = 0 for idx, (gw_name, gw_ip) in enumerate(gateways): gateway = "{0} ({1})".format(gw_name, gw_ip) self.ui.cbGateways.addItem(gateway, gw_ip) if gw_ip == selected_gateway: index = idx + 1 self.ui.cbGateways.setCurrentIndex(index)