diff options
Diffstat (limited to 'chrome/content')
-rw-r--r-- | chrome/content/accountWizard/bitmaskMessengerOverlay.js | 62 | ||||
-rw-r--r-- | chrome/content/accountWizard/bitmaskMessengerOverlay.xul | 12 | ||||
-rw-r--r-- | chrome/content/bitmask.js | 13 | ||||
-rw-r--r-- | chrome/content/messengercompose.js | 29 |
4 files changed, 106 insertions, 10 deletions
diff --git a/chrome/content/accountWizard/bitmaskMessengerOverlay.js b/chrome/content/accountWizard/bitmaskMessengerOverlay.js index 148290c..31e7887 100644 --- a/chrome/content/accountWizard/bitmaskMessengerOverlay.js +++ b/chrome/content/accountWizard/bitmaskMessengerOverlay.js @@ -1,10 +1,50 @@ -window.addEventListener("load", function() { - overlayStartup(); -}, false); +var { interfaces: Ci, utils: Cu, classes: Cc } = Components; -window.setInterval(function() { - overlayStartup(); -}, 3000); +Cu.import("resource:///modules/imServices.jsm"); +Cu.import("resource:///modules/imXPCOMUtils.jsm"); + +XPCOMUtils.defineLazyGetter(this, "_", () => + l10nHelper("chrome://bitmask/locale/bitmaskMessengerOverlay.properties") +); + +var notificationBar = { + onStartHeaders: function() { + let currentFolder = gFolderDisplay.displayedFolder.name; + if (currentFolder === "Inbox") { + let promise = bitmask.mail.msg_status(gFolderDisplay.displayedFolder.username, + currentFolder.toUpperCase(), + gFolderDisplay.selectedMessage.messageId); + promise.then(function(data) { + // If the message was encrypted, display the notification bar. + let result = data["secured"]; + if (result === true) { + document.getElementById("msgNotificationBar").collapsed = false; + document.getElementById("bitmaskDescription").value = _("bitmaskMsgEncrypted"); + } else { + document.getElementById("msgNotificationBar").collapsed = true; + } + }, function(error) { + // Something went wrong, like the message was not found. + document.getElementById("msgNotificationBar").collapsed = true; + }); + } + }, + + onEndHeaders: function() { + }, + + load: function() { + // Update the notification bar when the selected message changes. + gMessageListeners.push(notificationBar); + // This is borrowed from Lightning so that we can hide the notification + // bar in case the folder is changed. + notificationBar.tbHideMessageHeaderPane = HideMessageHeaderPane; + HideMessageHeaderPane = function() { + document.getElementById("msgNotificationBar").collapsed = true; + notificationBar.tbHideMessageHeaderPane.apply(null, arguments); + }; + } +} function overlayStartup() { let myPanel = document.getElementById("bitmaskStatusBarPanel"); @@ -14,7 +54,7 @@ function overlayStartup() { // authorize with it using the token from bitmask.js let promise = bitmask.core.status(); promise.then(function(data) { - myPanel.label = strBundle.getFormattedString("bitmaskStatusOn", [ data["mail"] ]); + myPanel.label = _("bitmaskStatusOn", data["mail"]); myPanel.style.color = "green"; myPanel.src = "chrome://bitmask/skin/on.png"; }, function(error) { @@ -24,3 +64,11 @@ function overlayStartup() { console.log(error); }); } + +window.addEventListener("load", function() { + overlayStartup(); +}, false); + +window.setInterval(function() { overlayStartup(); }, 3000); + +window.addEventListener("messagepane-loaded", notificationBar.load, true); diff --git a/chrome/content/accountWizard/bitmaskMessengerOverlay.xul b/chrome/content/accountWizard/bitmaskMessengerOverlay.xul index da906f6..57967e3 100644 --- a/chrome/content/accountWizard/bitmaskMessengerOverlay.xul +++ b/chrome/content/accountWizard/bitmaskMessengerOverlay.xul @@ -1,5 +1,9 @@ <?xml version="1.0"?> + +<?xml-stylesheet href="chrome://bitmask/skin/accountWizard.css" type="text/css"?> + <!DOCTYPE overlay SYSTEM "chrome://bitmask/locale/bitmaskMessengerOverlay.dtd"> + <overlay id="bitmaskMessengerOverlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script type="application/javascript" @@ -9,9 +13,11 @@ <script type="application/javascript" src="chrome://bitmask/content/accountWizard/bitmaskMessengerOverlay.js"/> - <stringbundleset id="stringbundleset"> - <stringbundle id="bitmaskMessengerStrings" src="chrome://bitmask/locale/bitmaskMessengerOverlay.properties"/> - </stringbundleset> + <notificationbox id="msgNotificationBar" collapsed="true"> + <hbox id="bitmaskHeader" class="bitmaskNotificationBar"> + <description id="bitmaskDescription" /> + </hbox> + </notificationbox> <statusbar id="status-bar"> <statusbarpanel id="bitmaskStatusBarPanel" class="statusbarpanel-iconic-text" /> diff --git a/chrome/content/bitmask.js b/chrome/content/bitmask.js index 6ab87ff..e549c3e 100644 --- a/chrome/content/bitmask.js +++ b/chrome/content/bitmask.js @@ -395,6 +395,19 @@ var bitmask = function(){ }, /** + * Get message status of one email + * + * @param {string} uid The uid to get status about + * @param {string} mbox The name of the mailbox where the message is stored + * @param {string} message_id The Message-Id from the headers of the email + * + * @return {Promise<{'secured': bool}>} Returns the status of the email + */ + msg_status: function(uid, mbox, message_id) { + return call(['mail', 'msg_status', uid, mbox, message_id]); + }, + + /** * Get status on the mixnet for an address. * * @param {string} uid The uid to get status about diff --git a/chrome/content/messengercompose.js b/chrome/content/messengercompose.js index 4b12f64..c0c5ec3 100644 --- a/chrome/content/messengercompose.js +++ b/chrome/content/messengercompose.js @@ -1,8 +1,33 @@ +// Assume that gBitmaskEncryptionState is true; if we detect a recipient +// whose public key we don't know, we will set it to false, indicating +// that the message will not be encrypted. +var gBitmaskEncryptionState = true; + var composeStateListener = { NotifyComposeBodyReady: function() { } }; +function insertEncryptionHeaders(event) { + // let msgComposeWindow = document.getElementById("msgcomposeWindow"); + // let msgType = msgComposeWindow.getAttribute("msgType"); + + // // We only care about an actual send event. + // if (!(msgType == nsIMsgCompDeliverMode.Now || msgType == nsIMsgCompDeliverMode.Later)) + // return; + + // // If gBitmaskEncryptionState is true that means that we know the public key + // // of all the recipients (see updateEncryptionStatus) and therefore we + // // manually add the encryption headers so that when we later call msg_status + // // from Bitmask, Thunderbird will know that the message was sent as + // // encrypted. This however does not work for older messages; see + // // https://0xacab.org/leap/bitmask-dev/issues/9202 + // if (gBitmaskEncryptionState === true) { + // gMsgCompose.compFields.setHeader("X-Leap-Encryption", "decrypted"); + // gMsgCompose.compFields.setHeader("X-Leap-Signature", "valid"); + // } +} + // From addressingWidgetOverlay.js; we use this to call the function to update // the status of the encryption keys for the various "To" fields. This is for // the case where the user presses "Return" or "Tab" and Thunderbird inserts a @@ -62,6 +87,8 @@ var checkToField = { toField.getElementsByTagName("image")[0].setAttribute("src", "chrome://bitmask/skin/lock.png"); }).catch(function(error) { + // We detected a missing public key; message will be unencrypted. + gBitmaskEncryptionState = false; toField.getElementsByTagName("image")[0].setAttribute("src", "chrome://bitmask/skin/unlock.png"); }); @@ -76,3 +103,5 @@ var checkToField = { window.addEventListener("compose-window-init", function(event) { gMsgCompose.RegisterStateListener(composeStateListener); }, true); + +window.addEventListener("compose-send-message", insertEncryptionHeaders, true); |