diff options
Diffstat (limited to 'src/leap/gui/mainwindow.py')
| -rw-r--r-- | src/leap/gui/mainwindow.py | 89 | 
1 files changed, 58 insertions, 31 deletions
| diff --git a/src/leap/gui/mainwindow.py b/src/leap/gui/mainwindow.py index 2cad6df3..a7d88aee 100644 --- a/src/leap/gui/mainwindow.py +++ b/src/leap/gui/mainwindow.py @@ -218,12 +218,11 @@ class MainWindow(QtGui.QMainWindow):          self._really_quit = False          self._systray = None -        self._vpn_systray = None -        self._action_eip_status = QtGui.QAction(self.tr("Encryption is OFF"), +        self._action_eip_status = QtGui.QAction(self.tr("Encrypted internet is OFF"),                                                  self)          self._action_eip_status.setEnabled(False) -        self._action_eip_startstop = QtGui.QAction(self.tr("Stop"), self) +        self._action_eip_startstop = QtGui.QAction(self.tr("Turn encryption ON"), self)          self._action_eip_startstop.triggered.connect(              self._stop_eip)          self._action_eip_write = QtGui.QAction( @@ -235,7 +234,7 @@ class MainWindow(QtGui.QMainWindow):              "%12.2f Kb" % (0.0,), self)          self._action_eip_read.setEnabled(False) -        self._action_visible = QtGui.QAction(self.tr("Hide"), self) +        self._action_visible = QtGui.QAction(self.tr("Hide Main Window"), self)          self._action_visible.triggered.connect(self._toggle_visible)          self._enabled_services = [] @@ -260,6 +259,8 @@ class MainWindow(QtGui.QMainWindow):          self._soledad = None          self._keymanager = None +        self._login_defer = None +          self._smtp_config = SMTPConfig()          if self._first_run(): @@ -378,6 +379,12 @@ class MainWindow(QtGui.QMainWindow):          if self._wizard:              possible_username = self._wizard.get_username()              possible_password = self._wizard.get_password() + +            # select the configured provider in the combo box +            domain = self._wizard.get_domain() +            provider_index = self.ui.cmbProviders.findText(domain) +            self.ui.cmbProviders.setCurrentIndex(provider_index) +              self.ui.chkRemember.setChecked(self._wizard.get_remember())              self._enabled_services = list(self._wizard.get_services())              self._settings.set_enabled_services( @@ -400,8 +407,21 @@ class MainWindow(QtGui.QMainWindow):              saved_user = self._settings.get_user()              auto_login = self._settings.get_autologin() +            try: +                username, domain = saved_user.split('@') +            except (ValueError, AttributeError) as e: +                # if the saved_user does not contain an '@' or its None +                logger.error('Username@provider malformed. %r' % (e, )) +                saved_user = None +              if saved_user is not None: -                self.ui.lnUser.setText(saved_user) +                # fill the username +                self.ui.lnUser.setText(username) + +                # select the configured provider in the combo box +                provider_index = self.ui.cmbProviders.findText(domain) +                self.ui.cmbProviders.setCurrentIndex(provider_index) +                  self.ui.chkRemember.setChecked(True)                  self.ui.chkAutoLogin.setEnabled(self.ui.chkRemember                                                  .isEnabled()) @@ -435,22 +455,15 @@ class MainWindow(QtGui.QMainWindow):          systrayMenu.addAction(self.ui.action_sign_out)          systrayMenu.addSeparator()          systrayMenu.addAction(self.ui.action_quit) +        systrayMenu.addSeparator() +        systrayMenu.addAction(self._action_eip_status) +        systrayMenu.addAction(self._action_eip_startstop)          self._systray = QtGui.QSystemTrayIcon(self)          self._systray.setContextMenu(systrayMenu) -        self._systray.setIcon(QtGui.QIcon(self.LOGGED_OUT_ICON)) +        self._systray.setIcon(QtGui.QIcon(self.ERROR_ICON))          self._systray.setVisible(True)          self._systray.activated.connect(self._toggle_visible) -        vpn_systrayMenu = QtGui.QMenu(self) -        vpn_systrayMenu.addAction(self._action_eip_status) -        vpn_systrayMenu.addAction(self._action_eip_startstop) -        vpn_systrayMenu.addAction(self._action_eip_read) -        vpn_systrayMenu.addAction(self._action_eip_write) -        self._vpn_systray = QtGui.QSystemTrayIcon(self) -        self._vpn_systray.setContextMenu(vpn_systrayMenu) -        self._vpn_systray.setIcon(QtGui.QIcon(self.ERROR_ICON)) -        self._vpn_systray.setVisible(False) -      def _toggle_visible(self, reason=None):          """          SLOT @@ -594,7 +607,7 @@ class MainWindow(QtGui.QMainWindow):          :param status: status message          :type status: str          """ -        self._vpn_systray.setToolTip(status) +        self._systray.setToolTip(status)          if error:              status = "<font color='red'><b>%s</b></font>" % (status,)          self.ui.lblEIPStatus.setText(status) @@ -694,13 +707,16 @@ class MainWindow(QtGui.QMainWindow):          self._login_set_enabled(False)          if self.ui.chkRemember.isChecked(): +            # in the keyring and in the settings +            # we store the value 'usename@provider' +            username_domain = (username + '@' + provider).encode("utf8")              try:                  keyring.set_password(self.KEYRING_KEY, -                                     username.encode("utf8"), +                                     username_domain,                                       password.encode("utf8"))                  # Only save the username if it was saved correctly in                  # the keyring -                self._settings.set_user(username) +                self._settings.set_user(username_domain)              except Exception as e:                  logger.error("Problem saving data to keyring. %r"                               % (e,)) @@ -728,10 +744,7 @@ class MainWindow(QtGui.QMainWindow):                  self._srp_auth.logout_finished.connect(                      self._done_logging_out) -            auth_partial = partial(self._srp_auth.authenticate, -                                   username, -                                   password) -            threads.deferToThread(auth_partial) +            self._login_defer = self._srp_auth.authenticate(username, password)          else:              self._set_status(data[self._provider_bootstrapper.ERROR_KEY])              self._login_set_enabled(True) @@ -751,6 +764,7 @@ class MainWindow(QtGui.QMainWindow):              # "Succeeded" message and then we switch to the EIP status              # panel              QtCore.QTimer.singleShot(1000, self._switch_to_status) +            self._login_defer = None          else:              self._login_set_enabled(True) @@ -760,7 +774,6 @@ class MainWindow(QtGui.QMainWindow):          triggers the eip bootstrapping          """          self.ui.stackedWidget.setCurrentIndex(self.EIP_STATUS_INDEX) -        self._systray.setIcon(self.LOGGED_IN_ICON)          self._soledad_bootstrapper.run_soledad_setup_checks(              self._provider_config, @@ -883,17 +896,29 @@ class MainWindow(QtGui.QMainWindow):          return host, port      def _start_eip(self): +        """ +        SLOT +        TRIGGERS: +          self.ui.btnEipStartStop.clicked +          self._action_eip_startstop.triggered +        or called from _finish_eip_bootstrap + +        Starts EIP +        """          try:              host, port = self._get_socket_host()              self._vpn.start(eipconfig=self._eip_config,                              providerconfig=self._provider_config,                              socket_host=host,                              socket_port=port) -            self.ui.btnEipStartStop.setText(self.tr("Stop EIP")) + +            self._settings.set_defaultprovider( +                self._provider_config.get_domain()) +            self.ui.btnEipStartStop.setText(self.tr("Turn Encryption OFF"))              self.ui.btnEipStartStop.disconnect(self)              self.ui.btnEipStartStop.clicked.connect(                  self._stop_eip) -            self._action_eip_startstop.setText(self.tr("Stop")) +            self._action_eip_startstop.setText(self.tr("Turn Encryption OFF"))              self._action_eip_startstop.disconnect(self)              self._action_eip_startstop.triggered.connect(                  self._stop_eip) @@ -922,11 +947,11 @@ class MainWindow(QtGui.QMainWindow):          self._vpn.terminate()          self._set_eip_status(self.tr("EIP has stopped"))          self._set_eip_status_icon("error") -        self.ui.btnEipStartStop.setText(self.tr("Start EIP")) +        self.ui.btnEipStartStop.setText(self.tr("Turn Encryption ON"))          self.ui.btnEipStartStop.disconnect(self)          self.ui.btnEipStartStop.clicked.connect(              self._start_eip) -        self._action_eip_startstop.setText(self.tr("Start")) +        self._action_eip_startstop.setText(self.tr("Turn Encryption ON"))          self._action_eip_startstop.disconnect(self)          self._action_eip_startstop.triggered.connect(              self._start_eip) @@ -942,7 +967,6 @@ class MainWindow(QtGui.QMainWindow):          if self._provider_config.provides_eip() and \                  self._enabled_services.count(self.OPENVPN_SERVICE) > 0: -            self._vpn_systray.setVisible(True)              self._eip_bootstrapper.run_eip_setup_checks(                  self._provider_config,                  download_if_needed=True) @@ -967,12 +991,13 @@ class MainWindow(QtGui.QMainWindow):          if status in ("WAIT", "AUTH", "GET_CONFIG",                        "RECONNECTING", "ASSIGN_IP"):              selected_pixmap = self.CONNECTING_ICON +            tray_message = self.tr("Turning Encryption ON")          elif status in ("CONNECTED"):              tray_message = self.tr("Encryption is ON")              selected_pixmap = self.CONNECTED_ICON          self.ui.lblVPNStatusIcon.setPixmap(selected_pixmap) -        self._vpn_systray.setIcon(QtGui.QIcon(selected_pixmap)) +        self._systray.setIcon(QtGui.QIcon(selected_pixmap))          self._action_eip_status.setText(tray_message)      def _update_vpn_state(self, data): @@ -1073,7 +1098,6 @@ class MainWindow(QtGui.QMainWindow):          Switches the stackedWidget back to the login stage after          logging out          """ -        self._systray.setIcon(self.LOGGED_OUT_ICON)          self.ui.action_sign_out.setEnabled(False)          self.ui.stackedWidget.setCurrentIndex(self.LOGIN_INDEX)          self.ui.lnPassword.setText("") @@ -1169,6 +1193,9 @@ class MainWindow(QtGui.QMainWindow):          self.close() +        if self._login_defer: +            self._login_defer.cancel() +          if self._quit_callback:              self._quit_callback()          logger.debug('Bye.') | 
