Must encrypt with the sender key

This commit is contained in:
Carles Escrig Royo 2016-04-07 14:07:19 +02:00
parent a34da5de0d
commit 44dfa53cde
No known key found for this signature in database
GPG key ID: 5E6F07C704111773
7 changed files with 41 additions and 14 deletions

View file

@ -201,7 +201,19 @@
*/
MessageModel.prototype.getRecipientsEmails = function ()
{
return _.compact(_.uniq(_.map(this.to.concat(this.cc), function (oItem) {
return this.getEmails(['to', 'cc']);
};
/**
* @param {Array} aProperties
* @return {Array}
*/
MessageModel.prototype.getEmails = function (aProperties)
{
var self = this;
return _.compact(_.uniq(_.map(_.reduce(aProperties, function (aCarry, sProperty) {
return aCarry.concat(self[sProperty]);
}, []), function (oItem) {
return oItem ? oItem.email : '';
})));
};
@ -1033,4 +1045,4 @@
module.exports = MessageModel;
}());
}());

View file

@ -292,7 +292,7 @@
bEncrypted = mDom.hasClass('encrypted'),
bSigned = mDom.hasClass('signed'),
oVerControl = null,
aRecipients = oRainLoopMessage ? oRainLoopMessage.getRecipientsEmails() : [],
aRecipients = oRainLoopMessage ? oRainLoopMessage.getEmails(['from', 'to', 'cc']) : [],
sData = ''
;

View file

@ -62,6 +62,10 @@
&-delete {
cursor: pointer;
&.disabled {
cursor: not-allowed;
}
}
&-names {
@ -121,14 +125,14 @@
&__name {
border-bottom: 1px solid transparent;
&:hover {
border-bottom: 1px dashed #555;
}
}
&__names {
display: inline-block;
&:hover .key-list__item__name {
border-bottom: 1px dashed #555;
}
}
}
}

View file

@ -7,6 +7,11 @@
line-height: 17px;
font-size: 16px;
vertical-align: text-top;
&.disabled,
.disabled & {
color: grey;
}
}
.icon-folder, .icon-folder-add, .icon-list {

View file

@ -248,6 +248,7 @@
aKeys.push({
'empty': !oOption.key,
'selected': ko.observable(!!oOption.key),
'removable': this.signKey().id !== oOption.key.id,
'users': oOption.key.users,
'hash': oOption.key.id.substr(-8).toUpperCase(),
'key': oOption.key
@ -372,6 +373,7 @@
if (oIdentity && oIdentity.email())
{
sEmail = oIdentity.email();
aRec.unshift(sEmail);
oKey = PgpStore.findPrivateKeyByEmailNotNative(sEmail);
if (oKey)
{
@ -390,16 +392,19 @@
if (aRec && 0 < aRec.length)
{
this.encryptKeys(_.compact(_.map(aRec, function (sEmail) {
this.encryptKeys(_.uniq(_.compact(_.map(aRec, function (sEmail) {
var oKey = PgpStore.findPublicKeyByEmailNotNative(sEmail) || null;
return {
'empty': !oKey,
'selected': ko.observable(!!oKey),
'removable': oIdentity && oIdentity.email() && oIdentity.email() !== sEmail,
'users': oKey ? (oKey.users || [sEmail]) : [sEmail],
'hash': oKey ? oKey.id.substr(-8).toUpperCase() : '',
'key': oKey
};
})));
})), function (oEncryptKey) {
return oEncryptKey.hash;
}));
if (0 < this.encryptKeys().length)
{

View file

@ -59,7 +59,7 @@
<div class="key-list-wrp" data-bind="visible: encryptKeys() && encryptKeys().length > 0">
<div data-bind="foreach: encryptKeys">
<div class="key-list__item row-fluid">
<div class="key-list__item-delete span1" data-bind="click: $parent.deletePublickKey">
<div class="key-list__item-delete span1" data-bind="click: removable ? $parent.deletePublickKey : null, css: {'disabled': !removable}">
<i class="icon-trash"></i>
</div>
<div class="key-list__item-hash span3" data-bind="visible: !empty">
@ -86,7 +86,7 @@
<input type="password" class="inputPassword input-block-level i18n"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-i18n="[placeholder]POPUPS_COMPOSE_OPEN_PGP/LABEL_PASSWORD"
data-bind="visible: sign, value: password, hasfocus: password.focus, onEnter: doCommand" />
data-bind="visible: sign, textInput: password, hasfocus: password.focus, onEnter: doCommand" />
</div>
<div class="span7" data-bind="visible: encrypt() && 0 < publicKeysOptions().length">
<div class="form-inline">
@ -98,7 +98,8 @@
</div>
</div>
<div class="modal-footer">
<button class="btn buttonDo" data-bind="command: doCommand, hasfocus: buttonFocus">
<button class="btn buttonDo" data-bind="command: doCommand, hasfocus: buttonFocus,
enable: (sign() || encrypt()) && (!sign() || (sign() && password().length)) && (!encrypt() || encrypt() && encryptKeys().length > 0)">
<i data-bind="css: {'icon-key': !submitRequest(), 'icon-spinner animated': submitRequest()}"></i>
&nbsp;&nbsp;
<span class="i18n" data-bind="visible: sign() && !encrypt()" data-i18n="POPUPS_COMPOSE_OPEN_PGP/BUTTON_SIGN"></span>

View file

@ -37,13 +37,13 @@
<label class="i18n control-label" data-i18n="POPUPS_MESSAGE_OPEN_PGP/LABEL_PASSWORD"></label>
<div class="controls">
<input type="password" class="inputPassword input-xlarge" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: password, hasfocus: password.focus, onEnter: doCommand" />
data-bind="textInput: password, hasfocus: password.focus, onEnter: doCommand" />
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn buttonDo" data-bind="command: doCommand, hasfocus: buttonFocus">
<button class="btn buttonDo" data-bind="command: doCommand, hasfocus: buttonFocus, enable: password().length > 0">
<i data-bind="css: {'icon-key': !submitRequest(), 'icon-spinner animated': submitRequest()}"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="POPUPS_MESSAGE_OPEN_PGP/BUTTON_DECRYPT"></span>