Fix notifications of signed + encrypted messages

pull/240/head
Francis Lachapelle 2018-01-24 10:32:36 -05:00
parent a35138c0b8
commit 7897ea58fe
3 changed files with 33 additions and 22 deletions

View File

@ -285,7 +285,7 @@
[NSNumber numberWithBool: [self validSignature]], @"valid",
renderedParts, @"content",
[self smimeCertificates], @"certificates",
[self validationMessage], @"error",
[self validationMessage], @"message",
nil];
}

View File

@ -207,18 +207,18 @@
<!-- S/MIME Signature -->
<sg-block-toggle class="sg-no-print" layout="column"
ng-show="::viewer.message.$smime.certificate">
ng-show="::viewer.message.signed">
<md-divider><!-- divider --></md-divider>
<md-list-item class="sg-button-toggle">
<div>
<md-icon ng-hide="::viewer.message.$smime.valid"
<md-icon ng-hide="::viewer.message.signed.valid"
class="md-warn"
rsrc:md-svg-src="img/certificate-off.svg"><!-- certificate --></md-icon>
<md-icon ng-show="::viewer.message.$smime.valid"
<md-icon ng-show="::viewer.message.signed.valid"
class="md-accent"
rsrc:md-svg-src="img/certificate.svg"><!-- certificate --></md-icon>
</div>
<p class="md-padding md-flex" ng-bind-html="::viewer.message.$smime.message"><!-- message --></p>
<p class="md-padding md-flex" ng-bind-html="::viewer.message.signed.message"><!-- message --></p>
<md-icon class="sg-icon-toggle">expand_more</md-icon>
</md-list-item>
<div class="sg-block-toggle">
@ -227,7 +227,7 @@
<div flex="50" flex-xs="100">
<div class="md-subhead md-default-theme md-fg md-primary"
ng-bind="::'Subject Name' | loc"><!-- Subject Name --></div>
<div ng-repeat="field in ::viewer.message.$smime.certificate.subject">
<div ng-repeat="field in ::viewer.message.signed.certificate.subject">
<div class="pseudo-input-label" ng-bind="field[0] | loc"><!-- label --></div>
<div class="pseudo-input-field md-body-1" ng-bind="field[1]"><!-- value --></div>
</div>
@ -235,7 +235,7 @@
<div flex="50" flex-xs="100">
<div class="md-subhead md-default-theme md-fg md-primary"
ng-bind="::'Issuer' | loc"><!-- Issuer --></div>
<div ng-repeat="field in ::viewer.message.$smime.certificate.issuer">
<div ng-repeat="field in ::viewer.message.signed.certificate.issuer">
<div class="pseudo-input-label" ng-bind="field[0] | loc"><!-- label --></div>
<div class="pseudo-input-field md-body-1" ng-bind="field[1]"><!-- value --></div>
</div>
@ -247,14 +247,14 @@
<!-- S/MIME Encryption -->
<div class="sg-no-print" layout="column"
ng-show="viewer.message.$smime.isEncrypted">
ng-show="::viewer.message.encrypted">
<md-divider><!-- divider --></md-divider>
<md-list-item>
<div>
<md-icon ng-show="::viewer.message.$smime.valid">lock_outline</md-icon>
<md-icon ng-hide="::viewer.message.$smime.valid" class="md-warn">lock_outline</md-icon>
<md-icon ng-show="::viewer.message.encrypted.valid">lock_outline</md-icon>
<md-icon ng-hide="::viewer.message.encrypted.valid" class="md-warn">lock_outline</md-icon>
</div>
<p class="md-padding md-flex" ng-bind-html="::viewer.message.$smime.message"><!-- message --></p>
<p class="md-padding md-flex" ng-bind-html="::viewer.message.encrypted.message"><!-- message --></p>
</md-list-item>
</div>
@ -294,7 +294,7 @@
<div class="msg-body">
<div layout="row" layout-wrap="layout-wrap">
<div class="mailer_mailcontent" layout="row" layout-wrap="layout-wrap"
ng-repeat="part in viewer.message.$content()"
ng-repeat="part in viewer.message.$content() track by $index"
ng-class="::part.msgclass">
<div class="md-flex sg-mail-part"
tabindex="-1"

View File

@ -274,6 +274,7 @@
*/
Message.prototype.loadUnsafeContent = function() {
this.$loadUnsafeContent = true;
delete this.$parts;
};
/**
@ -295,24 +296,20 @@
// Can be used for UIxMailPartMixedViewer, UIxMailPartMessageViewer, and UIxMailPartSignedViewer
else if (angular.isArray(part.content)) {
if (part.type == 'UIxMailPartSignedViewer' && part['supports-smime'] === 1) {
// First line in a h1, others each in a p
var formattedMessage = "<p>" + part.error.replace(/\n/, "</p><p class=\"md-caption\">");
formattedMessage = formattedMessage.replace(/\n/g, "</p><p class=\"md-caption\">") + "</p>";
_this.$smime = {
_this.signed = {
valid: part.valid,
certificate: part.certificates[part.certificates.length - 1],
message: formattedMessage
message: part.message
};
}
else if (part.type == 'UIxMailPartEncryptedViewer') {
_this.$smime = {
isEncrypted: true,
_this.encrypted = {
valid: part.valid
};
if (part.valid)
_this.$smime.message = l("This message is encrypted");
_this.encrypted.message = l("This message is encrypted");
else
_this.$smime.message = l("This message can't be decrypted. Please make sure you have uploaded your S/MIME certificate from the mail preferences module.");
_this.encrypted.message = l("This message can't be decrypted. Please make sure you have uploaded your S/MIME certificate from the mail preferences module.");
}
_.forEach(part.content, function(mixedPart) {
_visit(mixedPart);
@ -372,9 +369,16 @@
}
};
if (this.parts)
if (this.$parts)
// Use the cache
return this.$parts;
else if (this.parts)
_visit(this.parts);
// Cache result
this.$parts = parts;
return parts;
};
@ -653,6 +657,13 @@
// Fetch draft initial data
return Message.$$resource.fetch(message.$absolutePath({asDraft: true}), 'edit').then(function(data) {
Message.$log.debug('New ' + action + ': ' + JSON.stringify(data, undefined, 2) + ' original UID: ' + _this.uid);
var accountDefaults = Message.$Preferences.defaults.AuxiliaryMailAccounts[_this.$mailbox.$account.id];
if (accountDefaults.security) {
if (accountDefaults.security.alwaysSign)
data.sign = true;
if (accountDefaults.security.alwaysEncrypt)
data.encrypt = true;
}
angular.extend(message.editable, data);
// We keep a reference to our original message in order to update the flags