From e587910bcb2b260878b7c49d9cb5df5402864eed Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Thu, 7 Dec 2017 16:14:29 +0100 Subject: Revamped security border coloring and popup message --- .../mailviewer/contents/ui/MailDataModel.qml | 39 +++++++++++++++++----- framework/src/domain/mime/partmodel.cpp | 23 +++++++------ 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/components/mailviewer/contents/ui/MailDataModel.qml b/components/mailviewer/contents/ui/MailDataModel.qml index 32188a04..fa8c462b 100644 --- a/components/mailviewer/contents/ui/MailDataModel.qml +++ b/components/mailviewer/contents/ui/MailDataModel.qml @@ -43,15 +43,38 @@ DelegateModel { return Kube.Colors.lightgrey } - function getDetails(signatureDetails) + function getDetails(signed, encrypted, signatureDetails) { - var details = qsTr("Signature") + ":\n" - details += qsTr("Key Id") + ": " + model.signatureDetails.keyId + "\n" - if (model.signatureDetails.keyMissing) { - details += qsTr("Key details are not available.") + "\n" + var details = ""; + if (signed && encrypted) { + details += qsTr("This message is signed and encrypted.") + "\n"; + } else if (encrypted) { + details += qsTr("This message is encrypted.") + "\n"; + } else if (signed) { + details += qsTr("This message is signed.") + "\n"; } - if (model.signatureDetails.keyIsTrusted) { - details += qsTr("You are trusting this key.") + "\n" + + if (signed) { + if (details.noSignaturesFound) { + details += qsTr("Failed to validate the signature.") + "\n" + } else if (!signatureDetails.signatureIsGood) { + details += qsTr("The signature is invalid.") + "\n" + } else if (signatureDetails.keyMissing) { + details += qsTr("This message has been signed using key %1.").arg(signatureDetails.keyId) + "\n"; + details += qsTr("The key details are not available.") + "\n"; + return details; + } else { + details += qsTr("This message has been signed using key %1 by %2.").arg(signatureDetails.keyId).arg(signatureDetails.signer) + "\n"; + if (signatureDetails.keyRevoked) { + details += qsTr("The key was revoked.") + "\n" + } + if (signatureDetails.keyExpired) { + details += qsTr("The key has expired.") + "\n" + } + if (signatureDetails.keyIsTrusted) { + details += qsTr("You are trusting this key.") + "\n" + } + } } return details } @@ -76,7 +99,7 @@ DelegateModel { opacity: 0.5 Kube.ToolTip { id: tooltip - text: getDetails(model.signatureDetails) + text: getDetails(model.signed, model.encrypted, model.signatureDetails); visible: mouseArea.containsMouse } Kube.SelectableItem { diff --git a/framework/src/domain/mime/partmodel.cpp b/framework/src/domain/mime/partmodel.cpp index c4e002b7..0b95ecbd 100644 --- a/framework/src/domain/mime/partmodel.cpp +++ b/framework/src/domain/mime/partmodel.cpp @@ -242,21 +242,22 @@ QVariant PartModel::data(const QModelIndex &index, int role) const case SecurityLevelRole: { auto signature = messagePart->signatureState(); auto encryption = messagePart->encryptionState(); - bool signatureIsOk = signature == MimeTreeParser::KMMsgPartiallySigned || - signature == MimeTreeParser::KMMsgFullySigned; - bool encryptionIsOk = encryption == MimeTreeParser::KMMsgPartiallyEncrypted || - encryption == MimeTreeParser::KMMsgFullyEncrypted; - bool isSigned = signature != MimeTreeParser::KMMsgNotSigned; - bool isEncrypted = encryption != MimeTreeParser::KMMsgNotEncrypted; - //Something is wonky - if ((isSigned && !signatureIsOk) || (isEncrypted && !encryptionIsOk)) { - if (signature == MimeTreeParser::KMMsgSignatureProblematic || encryption == MimeTreeParser::KMMsgEncryptionProblematic) { + bool messageIsSigned = signature == MimeTreeParser::KMMsgPartiallySigned || + signature == MimeTreeParser::KMMsgFullySigned; + bool messageIsEncrypted = encryption == MimeTreeParser::KMMsgPartiallyEncrypted || + encryption == MimeTreeParser::KMMsgFullyEncrypted; + + if (messageIsSigned) { + auto sigInfo = std::unique_ptr{signatureInfo(messagePart)}; + if (!sigInfo->signatureIsGood || sigInfo->keyRevoked) { return "bad"; } - return "notsogood"; + if (sigInfo->keyMissing || sigInfo->keyExpired) { + return "notsogood"; + } } //All good - if (signatureIsOk || encryptionIsOk) { + if (messageIsSigned || messageIsEncrypted) { return "good"; } //No info -- cgit v1.2.3