mirror of
https://github.com/the-djmaze/snappymail.git
synced 2025-09-23 05:24:23 +08:00
Update openpgpjs (1.2.0 -> 2.3.0) (#1023)
This commit is contained in:
parent
125d4e0282
commit
a655b94aba
19 changed files with 20792 additions and 195 deletions
|
@ -455,6 +455,7 @@ class AppUser extends AbstractApp
|
|||
iIndex,
|
||||
oItem.primaryKey.getFingerprint(),
|
||||
oItem.primaryKey.getKeyId().toHex().toLowerCase(),
|
||||
_.uniq(_.compact(_.map(oItem.getKeyIds(), (item) => item && item.toHex ? item.toHex() : null))),
|
||||
aUsers,
|
||||
aEmails,
|
||||
oItem.isPrivate(),
|
||||
|
@ -1297,7 +1298,8 @@ class AppUser extends AbstractApp
|
|||
{
|
||||
try
|
||||
{
|
||||
PgpStore.openpgp.initWorker(Links.openPgpWorkerJs());
|
||||
// PgpStore.openpgp.initWorker(Links.openPgpWorkerJs()); // 1.2.0
|
||||
PgpStore.openpgp.initWorker({path: Links.openPgpWorkerJs()}); // 2.3.0
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
|
@ -1305,8 +1307,6 @@ class AppUser extends AbstractApp
|
|||
}
|
||||
}
|
||||
|
||||
// PgpStore.openpgp.config.useWebCrypto = false;
|
||||
|
||||
PgpStore.openpgpKeyring = new openpgp.Keyring();
|
||||
PgpStore.capaOpenPGP(true);
|
||||
|
||||
|
|
|
@ -137,7 +137,7 @@
|
|||
{name: 'styles'},
|
||||
{name: 'basicstyles', groups: ['basicstyles', 'cleanup', 'bidi']},
|
||||
{name: 'colors'},
|
||||
{name: 'paragraph', groups: ['list', 'indent', 'blocks', 'align']},
|
||||
Globals.bMobileDevice ? {} : {name: 'paragraph', groups: ['list', 'indent', 'blocks', 'align']},
|
||||
{name: 'links'},
|
||||
{name: 'insert'},
|
||||
{name: 'document', groups: ['mode', 'document', 'doctools']},
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
* @param {string} iIndex
|
||||
* @param {string} sGuID
|
||||
* @param {string} sID
|
||||
* @param {array} aIDs
|
||||
* @param {array} aUserIDs
|
||||
* @param {array} aEmails
|
||||
* @param {boolean} bIsPrivate
|
||||
|
@ -25,17 +26,19 @@
|
|||
* @param {string} sUserID
|
||||
* @constructor
|
||||
*/
|
||||
function OpenPgpKeyModel(iIndex, sGuID, sID, aUserIDs, aEmails, bIsPrivate, sArmor, sUserID)
|
||||
function OpenPgpKeyModel(iIndex, sGuID, sID, aIDs, aUserIDs, aEmails, bIsPrivate, sArmor, sUserID)
|
||||
{
|
||||
AbstractModel.call(this, 'OpenPgpKeyModel');
|
||||
|
||||
this.index = iIndex;
|
||||
this.id = sID;
|
||||
this.ids = Utils.isNonEmptyArray(aIDs) ? aIDs : [sID];
|
||||
this.guid = sGuID;
|
||||
this.users = aUserIDs;
|
||||
this.emails = aEmails;
|
||||
this.armor = sArmor;
|
||||
this.isPrivate = !!bIsPrivate;
|
||||
|
||||
this.selectUser(sUserID);
|
||||
|
||||
this.deleteAccess = ko.observable(false);
|
||||
|
@ -45,6 +48,7 @@
|
|||
|
||||
OpenPgpKeyModel.prototype.index = 0;
|
||||
OpenPgpKeyModel.prototype.id = '';
|
||||
OpenPgpKeyModel.prototype.ids = [];
|
||||
OpenPgpKeyModel.prototype.guid = '';
|
||||
OpenPgpKeyModel.prototype.user = '';
|
||||
OpenPgpKeyModel.prototype.users = [];
|
||||
|
@ -80,11 +84,14 @@
|
|||
|
||||
OpenPgpKeyModel.prototype.select = function (sPattern, sProperty)
|
||||
{
|
||||
var index = this[sProperty].indexOf(sPattern);
|
||||
|
||||
if (index !== -1) {
|
||||
this.user = this.users[index];
|
||||
this.email = this.emails[index];
|
||||
if (this[sProperty])
|
||||
{
|
||||
var index = this[sProperty].indexOf(sPattern);
|
||||
if (index !== -1)
|
||||
{
|
||||
this.user = this.users[index];
|
||||
this.email = this.emails[index];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -42,24 +42,27 @@
|
|||
return !!this.openpgp;
|
||||
};
|
||||
|
||||
PgpUserStore.prototype.findKeyByHex = function (aKeys,sHash)
|
||||
{
|
||||
return _.find(aKeys, function (oItem) {
|
||||
return sHash && oItem && (sHash === oItem.id || -1 < oItem.ids.indexOf(sHash));
|
||||
});
|
||||
};
|
||||
|
||||
PgpUserStore.prototype.findPublicKeyByHex = function (sHash)
|
||||
{
|
||||
return _.find(this.openpgpkeysPublic(), function (oItem) {
|
||||
return sHash && oItem && sHash === oItem.id;
|
||||
});
|
||||
return this.findKeyByHex(this.openpgpkeysPublic(), sHash);
|
||||
};
|
||||
|
||||
PgpUserStore.prototype.findPrivateKeyByHex = function (sHash)
|
||||
{
|
||||
return _.find(this.openpgpkeysPrivate(), function (oItem) {
|
||||
return sHash && oItem && sHash === oItem.id;
|
||||
});
|
||||
return this.findKeyByHex(this.openpgpkeysPrivate(), sHash);
|
||||
};
|
||||
|
||||
PgpUserStore.prototype.findPublicKeysByEmail = function (sEmail)
|
||||
{
|
||||
return _.compact(_.flatten(_.map(this.openpgpkeysPublic(), function (oItem) {
|
||||
var oKey = oItem && -1 !== oItem.emails.indexOf(sEmail) ? oItem : null;
|
||||
var oKey = oItem && -1 < oItem.emails.indexOf(sEmail) ? oItem : null;
|
||||
return oKey ? oKey.getNativeKeys() : [null];
|
||||
}), true));
|
||||
};
|
||||
|
@ -99,7 +102,7 @@
|
|||
PgpUserStore.prototype.findPublicKeyByEmailNotNative = function (sEmail)
|
||||
{
|
||||
return _.find(this.openpgpkeysPublic(), function (oItem) {
|
||||
return oItem && -1 !== oItem.emails.indexOf(sEmail);
|
||||
return oItem && -1 < oItem.emails.indexOf(sEmail);
|
||||
}) || null;
|
||||
};
|
||||
|
||||
|
@ -110,7 +113,7 @@
|
|||
PgpUserStore.prototype.findPrivateKeyByEmailNotNative = function (sEmail)
|
||||
{
|
||||
return _.find(this.openpgpkeysPrivate(), function (oItem) {
|
||||
return oItem && -1 !== oItem.emails.indexOf(sEmail);
|
||||
return oItem && -1 < oItem.emails.indexOf(sEmail);
|
||||
}) || null;
|
||||
};
|
||||
|
||||
|
@ -121,7 +124,7 @@
|
|||
PgpUserStore.prototype.findAllPublicKeysByEmailNotNative = function (sEmail)
|
||||
{
|
||||
return _.filter(this.openpgpkeysPublic(), function (oItem) {
|
||||
return oItem && -1 !== oItem.emails.indexOf(sEmail);
|
||||
return oItem && -1 < oItem.emails.indexOf(sEmail);
|
||||
}) || null;
|
||||
};
|
||||
|
||||
|
@ -132,7 +135,7 @@
|
|||
PgpUserStore.prototype.findAllPrivateKeysByEmailNotNative = function (sEmail)
|
||||
{
|
||||
return _.filter(this.openpgpkeysPrivate(), function (oItem) {
|
||||
return oItem && -1 !== oItem.emails.indexOf(sEmail);
|
||||
return oItem && -1 < oItem.emails.indexOf(sEmail);
|
||||
}) || null;
|
||||
};
|
||||
|
||||
|
@ -147,7 +150,7 @@
|
|||
oPrivateKeys = [],
|
||||
oPrivateKey = null,
|
||||
oKey = _.find(this.openpgpkeysPrivate(), function (oItem) {
|
||||
return oItem && -1 !== oItem.emails.indexOf(sEmail);
|
||||
return oItem && -1 < oItem.emails.indexOf(sEmail);
|
||||
})
|
||||
;
|
||||
|
||||
|
@ -189,38 +192,34 @@
|
|||
aPrivateKeys = this.findPrivateKeysByEncryptionKeyIds(oMessage.getEncryptionKeyIds(), aRecipients, true);
|
||||
if (aPrivateKeys && 0 < aPrivateKeys.length)
|
||||
{
|
||||
kn.showScreenPopup(require('View/Popup/MessageOpenPgp'), [function (oDecriptedKey) {
|
||||
kn.showScreenPopup(require('View/Popup/MessageOpenPgp'), [function (oDecryptedKey) {
|
||||
|
||||
if (oDecriptedKey)
|
||||
if (oDecryptedKey)
|
||||
{
|
||||
var oPrivateKey = null, oDecryptedMessage = null;
|
||||
try
|
||||
{
|
||||
oDecryptedMessage = oMessage.decrypt(oDecriptedKey);
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
oDecryptedMessage = null;
|
||||
}
|
||||
|
||||
if (oDecryptedMessage)
|
||||
{
|
||||
oPrivateKey = self.findPrivateKeyByHex(oDecriptedKey.primaryKey.keyid.toHex());
|
||||
if (oPrivateKey)
|
||||
oMessage.decrypt(oDecryptedKey).then(function(oDecryptedMessage){
|
||||
var oPrivateKey = null;
|
||||
if (oDecryptedMessage)
|
||||
{
|
||||
self.verifyMessage(oDecryptedMessage, function (oValidKey, aSigningKeyIds) {
|
||||
fCallback(oPrivateKey, oDecryptedMessage, oValidKey || null, aSigningKeyIds || null);
|
||||
});
|
||||
oPrivateKey = self.findPrivateKeyByHex(oDecryptedKey.primaryKey.keyid.toHex());
|
||||
if (oPrivateKey)
|
||||
{
|
||||
self.verifyMessage(oDecryptedMessage, function (oValidKey, aSigningKeyIds) {
|
||||
fCallback(oPrivateKey, oDecryptedMessage, oValidKey || null, aSigningKeyIds || null);
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
fCallback(oPrivateKey, oDecryptedMessage);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fCallback(oPrivateKey, oDecryptedMessage);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fCallback(oPrivateKey, oDecryptedMessage);
|
||||
}
|
||||
|
||||
}, function() {
|
||||
fCallback(null, null);
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -299,6 +298,129 @@
|
|||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @static
|
||||
*/
|
||||
PgpUserStore.domControlEncryptedClickHelper = function (self, mDom, sArmoredMessage, aRecipients)
|
||||
{
|
||||
return function () {
|
||||
|
||||
var oMessage = null, $this = $(this);
|
||||
if ($this.hasClass('success'))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
oMessage = self.openpgp.message.readArmored(sArmoredMessage);
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
Utils.log(e);
|
||||
}
|
||||
|
||||
if (oMessage && oMessage.getText && oMessage.verify && oMessage.decrypt)
|
||||
{
|
||||
self.decryptMessage(oMessage, aRecipients, function (oValidPrivateKey, oDecryptedMessage, oValidPublicKey, aSigningKeyIds) {
|
||||
|
||||
if (oDecryptedMessage)
|
||||
{
|
||||
if (oValidPublicKey)
|
||||
{
|
||||
self.controlsHelper(mDom, $this, true, Translator.i18n('PGP_NOTIFICATIONS/GOOD_SIGNATURE', {
|
||||
'USER': oValidPublicKey.user + ' (' + oValidPublicKey.id + ')'
|
||||
}), oDecryptedMessage.getText());
|
||||
}
|
||||
else if (oValidPrivateKey)
|
||||
{
|
||||
var
|
||||
aKeyIds = Utils.isNonEmptyArray(aSigningKeyIds) ? aSigningKeyIds : null,
|
||||
sAdditional = aKeyIds ? _.compact(_.map(aKeyIds, function (oItem) {
|
||||
return oItem && oItem.toHex ? oItem.toHex() : null;
|
||||
})).join(', ') : ''
|
||||
;
|
||||
|
||||
self.controlsHelper(mDom, $this, false,
|
||||
Translator.i18n('PGP_NOTIFICATIONS/UNVERIFIRED_SIGNATURE') +
|
||||
(sAdditional ? ' (' + sAdditional + ')' : ''),
|
||||
oDecryptedMessage.getText());
|
||||
}
|
||||
else
|
||||
{
|
||||
self.controlsHelper(mDom, $this, false,
|
||||
Translator.i18n('PGP_NOTIFICATIONS/DECRYPTION_ERROR'));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
self.controlsHelper(mDom, $this, false,
|
||||
Translator.i18n('PGP_NOTIFICATIONS/DECRYPTION_ERROR'));
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
self.controlsHelper(mDom, $this, false, Translator.i18n('PGP_NOTIFICATIONS/DECRYPTION_ERROR'));
|
||||
return false;
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* @static
|
||||
*/
|
||||
PgpUserStore.domControlSignedClickHelper = function (self, mDom, sArmoredMessage)
|
||||
{
|
||||
return function () {
|
||||
|
||||
var oMessage = null, $this = $(this);
|
||||
if ($this.hasClass('success') || $this.hasClass('error'))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
oMessage = self.openpgp.cleartext.readArmored(sArmoredMessage);
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
Utils.log(e);
|
||||
}
|
||||
|
||||
if (oMessage && oMessage.getText && oMessage.verify)
|
||||
{
|
||||
self.verifyMessage(oMessage, function (oValidKey, aSigningKeyIds) {
|
||||
if (oValidKey)
|
||||
{
|
||||
self.controlsHelper(mDom, $this, true, Translator.i18n('PGP_NOTIFICATIONS/GOOD_SIGNATURE', {
|
||||
'USER': oValidKey.user + ' (' + oValidKey.id + ')'
|
||||
}), oMessage.getText());
|
||||
}
|
||||
else
|
||||
{
|
||||
var
|
||||
aKeyIds = Utils.isNonEmptyArray(aSigningKeyIds) ? aSigningKeyIds : null,
|
||||
sAdditional = aKeyIds ? _.compact(_.map(aKeyIds, function (oItem) {
|
||||
return oItem && oItem.toHex ? oItem.toHex() : null;
|
||||
})).join(', ') : ''
|
||||
;
|
||||
|
||||
self.controlsHelper(mDom, $this, false,
|
||||
Translator.i18n('PGP_NOTIFICATIONS/UNVERIFIRED_SIGNATURE') +
|
||||
(sAdditional ? ' (' + sAdditional + ')' : ''));
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
self.controlsHelper(mDom, $this, false, Translator.i18n('PGP_NOTIFICATIONS/DECRYPTION_ERROR'));
|
||||
return false;
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* @param {*} mDom
|
||||
* @param {MessageModel} oRainLoopMessage
|
||||
|
@ -310,7 +432,6 @@
|
|||
mDom.addClass('inited');
|
||||
|
||||
var
|
||||
self = this,
|
||||
bEncrypted = mDom.hasClass('encrypted'),
|
||||
bSigned = mDom.hasClass('signed'),
|
||||
oVerControl = null,
|
||||
|
@ -326,123 +447,16 @@
|
|||
if (bEncrypted)
|
||||
{
|
||||
oVerControl = $('<div class="b-openpgp-control"><i class="icon-lock"></i></div>')
|
||||
.attr('title', Translator.i18n('MESSAGE/PGP_ENCRYPTED_MESSAGE_DESC'));
|
||||
|
||||
oVerControl.on('click', function () {
|
||||
if ($(this).hasClass('success'))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var oMessage = null;
|
||||
try
|
||||
{
|
||||
oMessage = self.openpgp.message.readArmored(sData);
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
Utils.log(e);
|
||||
}
|
||||
|
||||
if (oMessage && oMessage.getText && oMessage.verify && oMessage.decrypt)
|
||||
{
|
||||
self.decryptMessage(oMessage, aRecipients, function (oValidPrivateKey, oDecriptedMessage, oValidPublicKey, aSigningKeyIds) {
|
||||
|
||||
if (oDecriptedMessage)
|
||||
{
|
||||
if (oValidPublicKey)
|
||||
{
|
||||
self.controlsHelper(mDom, oVerControl, true, Translator.i18n('PGP_NOTIFICATIONS/GOOD_SIGNATURE', {
|
||||
'USER': oValidPublicKey.user + ' (' + oValidPublicKey.id + ')'
|
||||
}), oDecriptedMessage.getText());
|
||||
}
|
||||
else if (oValidPrivateKey)
|
||||
{
|
||||
var
|
||||
aKeyIds = Utils.isNonEmptyArray(aSigningKeyIds) ? aSigningKeyIds : null,
|
||||
sAdditional = aKeyIds ? _.compact(_.map(aKeyIds, function (oItem) {
|
||||
return oItem && oItem.toHex ? oItem.toHex() : null;
|
||||
})).join(', ') : ''
|
||||
;
|
||||
|
||||
self.controlsHelper(mDom, oVerControl, false,
|
||||
Translator.i18n('PGP_NOTIFICATIONS/UNVERIFIRED_SIGNATURE') +
|
||||
(sAdditional ? ' (' + sAdditional + ')' : ''),
|
||||
oDecriptedMessage.getText());
|
||||
}
|
||||
else
|
||||
{
|
||||
self.controlsHelper(mDom, oVerControl, false,
|
||||
Translator.i18n('PGP_NOTIFICATIONS/DECRYPTION_ERROR'));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
self.controlsHelper(mDom, oVerControl, false,
|
||||
Translator.i18n('PGP_NOTIFICATIONS/DECRYPTION_ERROR'));
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
self.controlsHelper(mDom, oVerControl, false, Translator.i18n('PGP_NOTIFICATIONS/DECRYPTION_ERROR'));
|
||||
return false;
|
||||
|
||||
});
|
||||
.attr('title', Translator.i18n('MESSAGE/PGP_ENCRYPTED_MESSAGE_DESC'))
|
||||
.on('click', PgpUserStore.domControlEncryptedClickHelper(this, mDom, sData, aRecipients))
|
||||
;
|
||||
}
|
||||
else if (bSigned)
|
||||
{
|
||||
oVerControl = $('<div class="b-openpgp-control"><i class="icon-lock"></i></div>')
|
||||
.attr('title', Translator.i18n('MESSAGE/PGP_SIGNED_MESSAGE_DESC'));
|
||||
|
||||
oVerControl.on('click', function () {
|
||||
|
||||
if ($(this).hasClass('success') || $(this).hasClass('error'))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var oMessage = null;
|
||||
try
|
||||
{
|
||||
oMessage = self.openpgp.cleartext.readArmored(sData);
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
Utils.log(e);
|
||||
}
|
||||
|
||||
if (oMessage && oMessage.getText && oMessage.verify)
|
||||
{
|
||||
self.verifyMessage(oMessage, function (oValidKey, aSigningKeyIds) {
|
||||
if (oValidKey)
|
||||
{
|
||||
self.controlsHelper(mDom, oVerControl, true, Translator.i18n('PGP_NOTIFICATIONS/GOOD_SIGNATURE', {
|
||||
'USER': oValidKey.user + ' (' + oValidKey.id + ')'
|
||||
}), oMessage.getText());
|
||||
}
|
||||
else
|
||||
{
|
||||
var
|
||||
aKeyIds = Utils.isNonEmptyArray(aSigningKeyIds) ? aSigningKeyIds : null,
|
||||
sAdditional = aKeyIds ? _.compact(_.map(aKeyIds, function (oItem) {
|
||||
return oItem && oItem.toHex ? oItem.toHex() : null;
|
||||
})).join(', ') : ''
|
||||
;
|
||||
|
||||
self.controlsHelper(mDom, oVerControl, false,
|
||||
Translator.i18n('PGP_NOTIFICATIONS/UNVERIFIRED_SIGNATURE') +
|
||||
(sAdditional ? ' (' + sAdditional + ')' : ''));
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
self.controlsHelper(mDom, oVerControl, false, Translator.i18n('PGP_NOTIFICATIONS/DECRYPTION_ERROR'));
|
||||
return false;
|
||||
});
|
||||
.attr('title', Translator.i18n('MESSAGE/PGP_SIGNED_MESSAGE_DESC'))
|
||||
.on('click', PgpUserStore.domControlSignedClickHelper(this, mDom, sData))
|
||||
;
|
||||
}
|
||||
|
||||
if (oVerControl)
|
||||
|
|
|
@ -95,6 +95,10 @@
|
|||
}
|
||||
.icon-star-empty {
|
||||
opacity: .5;
|
||||
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -184,15 +184,28 @@
|
|||
{
|
||||
if (oPrivateKey && 0 === aPublicKeys.length)
|
||||
{
|
||||
oPromise = PgpStore.openpgp.signClearMessage([oPrivateKey], self.text());
|
||||
// oPromise = PgpStore.openpgp.signClearMessage([oPrivateKey], self.text()); // 1.2.0
|
||||
oPromise = PgpStore.openpgp.sign({
|
||||
data: self.text(),
|
||||
privateKeys: [oPrivateKey]
|
||||
});
|
||||
}
|
||||
else if (oPrivateKey && 0 < aPublicKeys.length)
|
||||
{
|
||||
oPromise = PgpStore.openpgp.signAndEncryptMessage(aPublicKeys, oPrivateKey, self.text());
|
||||
// oPromise = PgpStore.openpgp.signAndEncryptMessage(aPublicKeys, oPrivateKey, self.text()); // 1.2.0
|
||||
oPromise = PgpStore.openpgp.encrypt({
|
||||
data: self.text(),
|
||||
publicKeys: aPublicKeys,
|
||||
privateKeys: [oPrivateKey]
|
||||
});
|
||||
}
|
||||
else if (!oPrivateKey && 0 < aPublicKeys.length)
|
||||
{
|
||||
oPromise = PgpStore.openpgp.encryptMessage(aPublicKeys, self.text());
|
||||
// oPromise = PgpStore.openpgp.encryptMessage(aPublicKeys, self.text()); // 1.2.0
|
||||
oPromise = PgpStore.openpgp.encrypt({
|
||||
data: self.text(),
|
||||
publicKeys: aPublicKeys
|
||||
});
|
||||
}
|
||||
}
|
||||
catch (e)
|
||||
|
@ -210,7 +223,7 @@
|
|||
{
|
||||
oPromise.then(function (mData) {
|
||||
|
||||
self.resultCallback(mData);
|
||||
self.resultCallback(mData.data);
|
||||
self.cancelCommand();
|
||||
|
||||
})['catch'](function (e) {
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
|
||||
var
|
||||
self = this,
|
||||
sUserID = '',
|
||||
oUserIds = {},
|
||||
oOpenpgpKeyring = PgpStore.openpgpKeyring
|
||||
;
|
||||
|
||||
|
@ -51,10 +51,10 @@
|
|||
return false;
|
||||
}
|
||||
|
||||
sUserID = this.email();
|
||||
oUserIds['email'] = this.email();
|
||||
if ('' !== this.name())
|
||||
{
|
||||
sUserID = this.name() + ' <' + sUserID + '>';
|
||||
oUserIds['name'] = this.name();
|
||||
}
|
||||
|
||||
this.submitRequest(true);
|
||||
|
@ -66,7 +66,7 @@
|
|||
try {
|
||||
|
||||
mPromise = PgpStore.openpgp.generateKeyPair({
|
||||
'userId': sUserID,
|
||||
'userId': oUserIds,
|
||||
'numBits': Utils.pInt(self.keyBitLength()),
|
||||
'passphrase': Utils.trim(self.password())
|
||||
});
|
||||
|
|
10
gulpfile.js
10
gulpfile.js
|
@ -154,13 +154,15 @@ cfg.paths.js = {
|
|||
openpgp: {
|
||||
name: 'openpgp.min.js',
|
||||
src: [
|
||||
'vendors/openpgp/openpgp-1.2.0.min.js'
|
||||
// 'vendors/openpgp/1.2.0/openpgp.min.js'
|
||||
'vendors/openpgp/2.3.0/openpgp.min.js'
|
||||
]
|
||||
},
|
||||
openpgpworker: {
|
||||
name: 'openpgp.worker.min.js',
|
||||
src: [
|
||||
'vendors/openpgp/openpgp-1.2.0.worker.min.js'
|
||||
// 'vendors/openpgp/1.2.0/openpgp.worker.min.js'
|
||||
'vendors/openpgp/2.3.0/openpgp.worker.min.js'
|
||||
]
|
||||
},
|
||||
encrypt: {
|
||||
|
@ -701,7 +703,9 @@ gulp.task('rainloop:owncloud:shortname', ['rainloop:owncloud:md5'], function(cal
|
|||
});
|
||||
|
||||
// MAIN
|
||||
gulp.task('default', ['js:libs', 'js:boot', 'js:openpgp', 'js:openpgpworker', 'js:min', 'css:main:min', 'ckeditor', 'fontastic']);
|
||||
gulp.task('js:pgp', ['js:openpgp', 'js:openpgpworker']);
|
||||
|
||||
gulp.task('default', ['js:libs', 'js:boot', 'js:pgp', 'js:min', 'css:main:min', 'ckeditor', 'fontastic']);
|
||||
gulp.task('fast-', ['js:app', 'js:admin', 'js:chunks', 'css:main']);
|
||||
|
||||
gulp.task('fast', ['package:community-on', 'fast-']);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"name": "RainLoop",
|
||||
"title": "RainLoop Webmail",
|
||||
"version": "1.10.0",
|
||||
"release": "100",
|
||||
"release": "102",
|
||||
"description": "Simple, modern & fast web-based email client",
|
||||
"homepage": "http://rainloop.net",
|
||||
"main": "gulpfile.js",
|
||||
|
|
20497
vendors/openpgp/2.3.0/openpgp.js
vendored
Normal file
20497
vendors/openpgp/2.3.0/openpgp.js
vendored
Normal file
File diff suppressed because one or more lines are too long
10
vendors/openpgp/2.3.0/openpgp.min.js
vendored
Normal file
10
vendors/openpgp/2.3.0/openpgp.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
70
vendors/openpgp/2.3.0/openpgp.worker.js
vendored
Normal file
70
vendors/openpgp/2.3.0/openpgp.worker.js
vendored
Normal file
|
@ -0,0 +1,70 @@
|
|||
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
||||
// GPG4Browsers - An OpenPGP implementation in javascript
|
||||
// Copyright (C) 2011 Recurity Labs GmbH
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 3.0 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
/* globals self: true */
|
||||
|
||||
self.window = {}; // to make UMD bundles work
|
||||
|
||||
importScripts('openpgp.js');
|
||||
var openpgp = window.openpgp;
|
||||
|
||||
var MIN_SIZE_RANDOM_BUFFER = 40000;
|
||||
var MAX_SIZE_RANDOM_BUFFER = 60000;
|
||||
|
||||
openpgp.crypto.random.randomBuffer.init(MAX_SIZE_RANDOM_BUFFER);
|
||||
|
||||
self.onmessage = function (event) {
|
||||
var msg = event.data || {},
|
||||
options = msg.options || {};
|
||||
|
||||
switch (msg.event) {
|
||||
case 'configure':
|
||||
for (var i in msg.config) {
|
||||
openpgp.config[i] = msg.config[i];
|
||||
}
|
||||
break;
|
||||
|
||||
case 'seed-random':
|
||||
if (!(msg.buf instanceof Uint8Array)) {
|
||||
msg.buf = new Uint8Array(msg.buf);
|
||||
}
|
||||
openpgp.crypto.random.randomBuffer.set(msg.buf);
|
||||
break;
|
||||
|
||||
default:
|
||||
if (typeof openpgp[msg.event] !== 'function') {
|
||||
throw new Error('Unknown Worker Event');
|
||||
}
|
||||
|
||||
// parse cloned packets
|
||||
openpgp[msg.event](openpgp.packet.clone.parseClonedPackets(options, msg.event)).then(function(data) {
|
||||
// clone packets (for web worker structured cloning algorithm)
|
||||
response({ event:'method-return', data:openpgp.packet.clone.clonePackets(data) });
|
||||
}).catch(function(e) {
|
||||
response({ event:'method-return', err:e.message });
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
function response(event) {
|
||||
if (openpgp.crypto.random.randomBuffer.size < MIN_SIZE_RANDOM_BUFFER) {
|
||||
self.postMessage({event: 'request-seed'});
|
||||
}
|
||||
self.postMessage(event, openpgp.util.getTransferables.call(openpgp.util, event.data));
|
||||
}
|
||||
},{}]},{},[1]);
|
1
vendors/openpgp/2.3.0/openpgp.worker.min.js
vendored
Normal file
1
vendors/openpgp/2.3.0/openpgp.worker.min.js
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
/*! OpenPGP.js v2.3.0 - 2016-05-03 - this is LGPL licensed code, see LICENSE/our website http://openpgpjs.org/ for more information. */!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){function d(a){e.crypto.random.randomBuffer.size<f&&self.postMessage({event:"request-seed"}),self.postMessage(a,e.util.getTransferables.call(e.util,a.data))}self.window={},importScripts("openpgp.min.js");var e=window.openpgp,f=4e4,g=6e4;e.crypto.random.randomBuffer.init(g),self.onmessage=function(a){var b=a.data||{},c=b.options||{};switch(b.event){case"configure":for(var f in b.config)e.config[f]=b.config[f];break;case"seed-random":b.buf instanceof Uint8Array||(b.buf=new Uint8Array(b.buf)),e.crypto.random.randomBuffer.set(b.buf);break;default:if("function"!=typeof e[b.event])throw new Error("Unknown Worker Event");e[b.event](e.packet.clone.parseClonedPackets(c,b.event)).then(function(a){d({event:"method-return",data:e.packet.clone.clonePackets(a)})})["catch"](function(a){d({event:"method-return",err:a.message})})}}},{}]},{},[1]);
|
8
vendors/openpgp/openpgp-0.10.1.min.js
vendored
8
vendors/openpgp/openpgp-0.10.1.min.js
vendored
File diff suppressed because one or more lines are too long
1
vendors/openpgp/openpgp-0.10.1.worker.min.js
vendored
1
vendors/openpgp/openpgp-0.10.1.worker.min.js
vendored
|
@ -1 +0,0 @@
|
|||
/*! OpenPGPjs.org this is LGPL licensed code, see LICENSE/our website for more information.- v0.10.1 - 2015-02-13 */!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(){function a(a){window.openpgp.crypto.random.randomBuffer.size<d&&postMessage({event:"request-seed"}),postMessage(a)}function b(a){var b=window.openpgp.packet.List.fromStructuredClone(a);return new window.openpgp.key.Key(b)}function c(a){var b=window.openpgp.packet.List.fromStructuredClone(a);return new window.openpgp.message.Message(b)}window={},Function.prototype.bind||(Function.prototype.bind=function(a){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var b=Array.prototype.slice.call(arguments,1),c=this,d=function(){},e=function(){return c.apply(this instanceof d&&a?this:a,b.concat(Array.prototype.slice.call(arguments)))};return d.prototype=this.prototype,e.prototype=new d,e}),importScripts("openpgp.min.js");var d=4e4,e=6e4;window.openpgp.crypto.random.randomBuffer.init(e),self.onmessage=function(d){var e=null,f=null,g=d.data,h=!1;switch(g.event){case"configure":for(var i in g.config)window.openpgp.config[i]=g.config[i];break;case"seed-random":g.buf instanceof Uint8Array||(g.buf=new Uint8Array(g.buf)),window.openpgp.crypto.random.randomBuffer.set(g.buf);break;case"encrypt-message":g.keys.length||(g.keys=[g.keys]),g.keys=g.keys.map(b),window.openpgp.encryptMessage(g.keys,g.text).then(function(b){a({event:"method-return",data:b})})["catch"](function(b){a({event:"method-return",err:b.message})});break;case"sign-and-encrypt-message":g.publicKeys.length||(g.publicKeys=[g.publicKeys]),g.publicKeys=g.publicKeys.map(b),g.privateKey=b(g.privateKey),window.openpgp.signAndEncryptMessage(g.publicKeys,g.privateKey,g.text).then(function(b){a({event:"method-return",data:b})})["catch"](function(b){a({event:"method-return",err:b.message})});break;case"decrypt-message":g.privateKey=b(g.privateKey),g.message=c(g.message.packets),window.openpgp.decryptMessage(g.privateKey,g.message).then(function(b){a({event:"method-return",data:b})})["catch"](function(b){a({event:"method-return",err:b.message})});break;case"decrypt-and-verify-message":g.privateKey=b(g.privateKey),g.publicKeys.length||(g.publicKeys=[g.publicKeys]),g.publicKeys=g.publicKeys.map(b),g.message=c(g.message.packets),window.openpgp.decryptAndVerifyMessage(g.privateKey,g.publicKeys,g.message).then(function(b){a({event:"method-return",data:b})})["catch"](function(b){a({event:"method-return",err:b.message})});break;case"sign-clear-message":g.privateKeys=g.privateKeys.map(b),window.openpgp.signClearMessage(g.privateKeys,g.text).then(function(b){a({event:"method-return",data:b})})["catch"](function(b){a({event:"method-return",err:b.message})});break;case"verify-clear-signed-message":g.publicKeys.length||(g.publicKeys=[g.publicKeys]),g.publicKeys=g.publicKeys.map(b);var j=window.openpgp.packet.List.fromStructuredClone(g.message.packets);g.message=new window.openpgp.cleartext.CleartextMessage(g.message.text,j),window.openpgp.verifyClearSignedMessage(g.publicKeys,g.message).then(function(b){a({event:"method-return",data:b})})["catch"](function(b){a({event:"method-return",err:b.message})});break;case"generate-key-pair":window.openpgp.generateKeyPair(g.options).then(function(b){b.key=b.key.toPacketlist(),a({event:"method-return",data:b})})["catch"](function(b){a({event:"method-return",err:b.message})});break;case"decrypt-key":try{g.privateKey=b(g.privateKey),h=g.privateKey.decrypt(g.password),h?e=g.privateKey.toPacketlist():f="Wrong password"}catch(k){f=k.message}a({event:"method-return",data:e,err:f});break;case"decrypt-key-packet":try{g.privateKey=b(g.privateKey),g.keyIds=g.keyIds.map(window.openpgp.Keyid.fromClone),h=g.privateKey.decryptKeyPacket(g.keyIds,g.password),h?e=g.privateKey.toPacketlist():f="Wrong password"}catch(k){f=k.message}a({event:"method-return",data:e,err:f});break;default:throw new Error("Unknown Worker Event.")}}},{}]},{},[1]);
|
7
vendors/openpgp/openpgp-0.5.1.min.js
vendored
7
vendors/openpgp/openpgp-0.5.1.min.js
vendored
File diff suppressed because one or more lines are too long
7
vendors/openpgp/openpgp-0.7.2.min.js
vendored
7
vendors/openpgp/openpgp-0.7.2.min.js
vendored
File diff suppressed because one or more lines are too long
Loading…
Add table
Reference in a new issue