summaryrefslogtreecommitdiff
path: root/src/leap/bitmask/gui/preferences_email_page.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/leap/bitmask/gui/preferences_email_page.py')
-rw-r--r--src/leap/bitmask/gui/preferences_email_page.py184
1 files changed, 178 insertions, 6 deletions
diff --git a/src/leap/bitmask/gui/preferences_email_page.py b/src/leap/bitmask/gui/preferences_email_page.py
index 3087f343..50f244fb 100644
--- a/src/leap/bitmask/gui/preferences_email_page.py
+++ b/src/leap/bitmask/gui/preferences_email_page.py
@@ -16,20 +16,192 @@
"""
Widget for "email" preferences
"""
-from PySide import QtGui
+from PySide import QtCore, QtGui
+
+from datetime import datetime
from leap.bitmask.logs.utils import get_logger
from leap.bitmask.gui.ui_preferences_email_page import Ui_PreferencesEmailPage
+from leap.bitmask.gui.preferences_page import PreferencesPage
+from leap.mail.imap.service.imap import IMAP_PORT
logger = get_logger()
-
-class PreferencesEmailPage(QtGui.QWidget):
+class PreferencesEmailPage(PreferencesPage):
def __init__(self, parent, account, app):
- QtGui.QWidget.__init__(self, parent)
+ """
+ :param parent: parent object of the PreferencesWindow.
+ :parent type: QWidget
+
+ :param account: user account (user + provider or just provider)
+ :type account: Account
+
+ :param app: the current App object
+ :type app: App
+ """
+ PreferencesPage.__init__(self, parent, account, app)
self.ui = Ui_PreferencesEmailPage()
self.ui.setupUi(self)
- self.account = account
- self.app = app
+ # the only way to set the tab titles is to re-add them:
+ self.ui.email_tabs.addTab(self.ui.config_tab,
+ self.tr("Mail Client"))
+ self.ui.email_tabs.addTab(self.ui.my_key_tab,
+ self.tr("My Key"))
+ self.ui.email_tabs.addTab(self.ui.other_keys_tab,
+ self.tr("Other Keys"))
+
+ # set mail client configuration help text
+ lang = QtCore.QLocale.system().name().replace('_', '-')
+ thunderbird_extension_url = \
+ "https://addons.mozilla.org/{0}/" \
+ "thunderbird/addon/bitmask/".format(lang)
+ self.ui.thunderbird_label.setText(self.tr(
+ "For Thunderbird, you can use the Bitmask extension. "
+ "Search for \"Bitmask\" in the add-on manager or "
+ "download it from <a href='{0}'>addons.mozilla.org</a>.".format(
+ thunderbird_extension_url)))
+ self.ui.mail_client_label.setText(self.tr(
+ "Alternatively, you can manually configure your mail client to "
+ "use Bitmask Email with these options:"))
+
+ self.ui.keys_table.horizontalHeader().setResizeMode(
+ 0, QtGui.QHeaderView.Stretch)
+
+ self.setup_connections()
+
+
+ def setup_connections(self):
+ """
+ connect signals
+ """
+ self.app.signaler.keymanager_key_details.connect(self._key_details)
+ self.app.signaler.keymanager_export_ok.connect(
+ self._keymanager_export_ok)
+ self.app.signaler.keymanager_export_error.connect(
+ self._keymanager_export_error)
+ self.ui.import_button.clicked.connect(self._import_keys)
+ self.ui.export_button.clicked.connect(self._export_keys)
+
+ def teardown_connections(self):
+ """
+ disconnect signals
+ """
+ self.app.signaler.keymanager_key_details.disconnect(self._key_details)
+ self.app.signaler.keymanager_export_ok.disconnect(
+ self._keymanager_export_ok)
+ self.app.signaler.keymanager_export_error.disconnect(
+ self._keymanager_export_error)
+
+ def showEvent(self, event):
+ """
+ called whenever this widget is shown
+ """
+ self.ui.keys_table.clearContents()
+
+ if self.account.username is None:
+ self.ui.email_tabs.setVisible(False)
+ self.ui.message_label.setVisible(True)
+ self.ui.message_label.setText(
+ self.tr('You must be logged in to edit email settings.'))
+ else:
+ self.ui.import_button.setVisible(False) # hide this until working
+ self.ui.message_label.setVisible(False)
+ self.ui.email_tabs.setVisible(True)
+ smtp_port = 2013
+ self.ui.imap_port_edit.setText(str(IMAP_PORT))
+ self.ui.imap_host_edit.setText("127.0.0.1")
+ self.ui.smtp_port_edit.setText(str(smtp_port))
+ self.ui.smtp_host_edit.setText("127.0.0.1")
+ self.ui.username_edit.setText(self.account.address)
+ self.ui.password_edit.setText(
+ self.app.service_tokens.get('mail_auth', ''))
+
+ self.app.backend.keymanager_list_keys()
+ self.app.backend.keymanager_get_key_details(
+ username=self.account.address)
+
+ def _key_details(self, details):
+ """
+ Trigger by signal: keymanager_key_details
+ Set the current user's key details into the gui.
+ """
+ self.ui.fingerprint_edit.setPlainText(
+ self._format_fingerprint(details["fingerprint"]))
+ self.ui.expiration_edit.setText(details["expiry_date"])
+ self.ui.uid_edit.setText(" ".join(details["uids"]))
+ self.ui.public_key_edit.setPlainText(details["key_data"])
+
+ def _format_fingerprint(self, fingerprint):
+ """
+ formats an openpgp fingerprint in a manner similar to what gpg
+ produces, wrapped to two lines.
+ """
+ fp = fingerprint.upper()
+ fp_list = [fp[i:i+4] for i in range(0, len(fp), 4)]
+ fp_wrapped = " ".join(fp_list[0:5]) + "\n" + " ".join(fp_list[5:10])
+ return fp_wrapped
+
+ def _export_keys(self):
+ """
+ Exports the user's key pair.
+ """
+ file_name, filtr = QtGui.QFileDialog.getSaveFileName(
+ self, self.tr("Save private key file"),
+ filter="*.pem",
+ options=QtGui.QFileDialog.DontUseNativeDialog)
+
+ if file_name:
+ if not file_name.endswith('.pem'):
+ file_name += '.pem'
+ self.app.backend.keymanager_export_keys(
+ username=self.account.address,
+ filename=file_name)
+ else:
+ logger.debug('Export canceled by the user.')
+
+ def _keymanager_export_ok(self):
+ """
+ TRIGGERS:
+ Signaler.keymanager_export_ok
+
+ Notify the user that the key export went OK.
+ """
+ QtGui.QMessageBox.information(
+ self, self.tr("Export Successful"),
+ self.tr("The key pair was exported successfully.\n"
+ "Please, store your private key in a safe place."))
+
+ def _keymanager_export_error(self):
+ """
+ TRIGGERS:
+ Signaler.keymanager_export_error
+
+ Notify the user that the key export didn't go well.
+ """
+ QtGui.QMessageBox.critical(
+ self, self.tr("Input/Output error"),
+ self.tr("There was an error accessing the file.\n"
+ "Export canceled."))
+
+ def _import_keys(self):
+ """
+ not yet supported
+ """
+
+ def _keymanager_keys_list(self, keys):
+ """
+ TRIGGERS:
+ Signaler.keymanager_keys_list
+
+ Load the keys given as parameter in the table.
+
+ :param keys: the list of keys to load.
+ :type keys: list
+ """
+ for key in keys:
+ row = self.ui.keys_table.rowCount()
+ self.ui.keys_table.insertRow(row)
+ self.ui.keys_table.setItem(row, 0, QtGui.QTableWidgetItem(key.address))
+ self.ui.keys_table.setItem(row, 1, QtGui.QTableWidgetItem(key.fingerprint))