def check_missing(): """ Check for the need of installing missing scripts, and raises a dialog to ask user for permission to do it. """ config = LeapSettings() complain_missing = False alert_missing = config.get_alert_missing_scripts() if alert_missing and not flags.STANDALONE: # We refuse to install missing stuff if not running with standalone # flag. Right now we rely on the flag alone, but we can disable this # by overwriting some constant from within the debian package. alert_missing = False complain_missing = True launcher = get_vpn_launcher() missing_scripts = launcher.missing_updown_scripts missing_other = launcher.missing_other_files logger.debug("MISSING OTHER: %s" % (str(missing_other()))) missing_some = missing_scripts() or missing_other() if alert_missing and missing_some: msg = get_missing_helpers_dialog() ret = msg.exec_() if ret == QtGui.QMessageBox.Yes: install_missing_fun = globals().get( "_%s_install_missing_scripts" % (_system.lower(),), None) if not install_missing_fun: logger.warning( "Installer not found for platform %s." % (_system,)) return # XXX maybe move constants to fun ok = install_missing_fun(HELPERS_BADEXEC_MSG, HELPERS_NOTFOUND_MSG) if not ok: msg = QtGui.QMessageBox() msg.setWindowTitle(msg.tr("Problem installing files")) msg.setText(msg.tr('Some of the files could not be copied.')) msg.setIcon(QtGui.QMessageBox.Warning) msg.exec_() elif ret == QtGui.QMessageBox.No: logger.debug("Not installing missing scripts, " "user decided to ignore our warning.") init_signals.eip_missing_helpers.emit() elif ret == QtGui.QMessageBox.Rejected: logger.debug( "Setting alert_missing_scripts to False, we will not " "ask again") config.set_alert_missing_scripts(False) if complain_missing and missing_some: missing = missing_scripts() + missing_other() msg = _get_missing_complain_dialog(missing) ret = msg.exec_()
def __init__(self, eipconfig, providerconfig, socket_host, socket_port, signaler, openvpn_verb): """ :param eipconfig: eip configuration object :type eipconfig: EIPConfig :param providerconfig: provider specific configuration :type providerconfig: ProviderConfig :param socket_host: either socket path (unix) or socket IP :type socket_host: str :param socket_port: either string "unix" if it's a unix socket, or port otherwise :type socket_port: str :param signaler: Signaler object used to receive notifications to the backend :type signaler: backend.Signaler :param openvpn_verb: the desired level of verbosity in the openvpn invocation :type openvpn_verb: int """ VPNManager.__init__(self, signaler=signaler) leap_assert_type(eipconfig, EIPConfig) leap_assert_type(providerconfig, ProviderConfig) # leap_assert(not self.isRunning(), "Starting process more than once!") self._eipconfig = eipconfig self._providerconfig = providerconfig self._socket_host = socket_host self._socket_port = socket_port self._launcher = get_vpn_launcher() self._last_state = None self._last_status = None self._alive = False # XXX use flags, maybe, instead of passing # the parameter around. self._openvpn_verb = openvpn_verb self._vpn_observer = VPNObserver(signaler) self.is_restart = False
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 check_missing(): """ Checks for the need of installing missing scripts, and raises a dialog to ask user for permission to do it. """ config = LeapSettings() alert_missing = config.get_alert_missing_scripts() launcher = get_vpn_launcher() missing_scripts = launcher.missing_updown_scripts missing_other = launcher.missing_other_files if alert_missing and (missing_scripts() or missing_other()): msg = get_missing_updown_dialog() ret = msg.exec_() if ret == QtGui.QMessageBox.Yes: install_missing_fun = globals().get( "_%s_install_missing_scripts" % (_system.lower(),), None) if not install_missing_fun: logger.warning( "Installer not found for platform %s." % (_system,)) return # XXX maybe move constants to fun ok = install_missing_fun(UPDOWN_BADEXEC_MSG, UPDOWN_NOTFOUND_MSG) if not ok: msg = QtGui.QMessageBox() msg.setWindowTitle(msg.tr("Problem installing files")) msg.setText(msg.tr('Some of the files could not be copied.')) msg.setIcon(QtGui.QMessageBox.Warning) msg.exec_() elif ret == QtGui.QMessageBox.No: logger.debug("Not installing missing scripts, " "user decided to ignore our warning.") elif ret == QtGui.QMessageBox.Rejected: logger.debug( "Setting alert_missing_scripts to False, we will not " "ask again") config.set_alert_missing_scripts(False)
def check_missing(): """ Check for the need of installing missing scripts, and raises a dialog to ask user for permission to do it. """ config = LeapSettings() complain_missing = False alert_missing = config.get_alert_missing_scripts() if alert_missing and not flags.STANDALONE: # We refuse to install missing stuff if not running with standalone # flag. Right now we rely on the flag alone, but we can disable this # by overwriting some constant from within the Debian package. alert_missing = False complain_missing = True launcher = get_vpn_launcher() missing_scripts = launcher.missing_updown_scripts() missing_other = launcher.missing_other_files() if missing_scripts: logger.warning("Missing scripts: %s" % (missing_scripts)) if missing_other: logger.warning("Missing other files: %s" % (missing_other)) missing_some = missing_scripts or missing_other if alert_missing and missing_some: msg = get_missing_helpers_dialog() ret = msg.exec_() if ret == QtGui.QMessageBox.Yes: install_missing_fun = globals().get( "_%s_install_missing_scripts" % (_system.lower(), ), None) if not install_missing_fun: logger.warning("Installer not found for platform %s." % (_system, )) return # XXX maybe move constants to fun ok = install_missing_fun(HELPERS_BADEXEC_MSG, HELPERS_NOTFOUND_MSG) if not ok: msg = QtGui.QMessageBox() msg.setWindowTitle(msg.tr("Problem installing files")) msg.setText(msg.tr('Some of the files could not be copied.')) msg.setIcon(QtGui.QMessageBox.Warning) msg.exec_() elif ret == QtGui.QMessageBox.No: logger.debug("Not installing missing scripts, " "user decided to ignore our warning.") init_signals.eip_missing_helpers.emit() elif ret == QtGui.QMessageBox.Rejected: logger.debug("Setting alert_missing_scripts to False, we will not " "ask again") init_signals.eip_missing_helpers.emit() config.set_alert_missing_scripts(False) if complain_missing and missing_some: missing = missing_scripts + missing_other msg = _get_missing_complain_dialog(missing) ret = msg.exec_() # If there is some missing file and we don't want to complain, we emit the # 'missing helpers' signal so the eip status can show that some files are # missing. if missing_some and not alert_missing and not complain_missing: init_signals.eip_missing_helpers.emit()