From 2154b6b541d49ba0a85c286da0486888d1b918c4 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sun, 27 Aug 2017 15:41:24 -0600 Subject: Expose some signature details in a tooltip. We'll want a proper UI for that at some point, but this is a start. --- framework/src/domain/mime/partmodel.cpp | 28 ++++++++++++++++++++++++++ framework/src/domain/mime/partmodel.h | 35 +++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) (limited to 'framework/src/domain/mime') diff --git a/framework/src/domain/mime/partmodel.cpp b/framework/src/domain/mime/partmodel.cpp index 331ef379..bf11b52d 100644 --- a/framework/src/domain/mime/partmodel.cpp +++ b/framework/src/domain/mime/partmodel.cpp @@ -26,6 +26,9 @@ #include #include +#include +#include + class PartModelPrivate { public: @@ -90,6 +93,7 @@ QHash PartModel::roleNames() const roles[ErrorString] = "errorString"; roles[IsErrorRole] = "error"; roles[SenderRole] = "sender"; + roles[SignatureDetails] = "signatureDetails"; roles[DateRole] = "date"; return roles; } @@ -232,6 +236,30 @@ QVariant PartModel::data(const QModelIndex &index, int role) const //No info return "unknown"; } + case SignatureDetails: { + auto signatureInfo = new SignatureInfo; + + const auto signatureParts = messagePart->signatures(); + if (signatureParts.size() > 1) { + qWarning() << "Can't deal with more than one signature"; + } + for (const auto &p : signatureParts) { + signatureInfo->mKeyId = p->partMetaData()->keyId; + signatureInfo->mKeyMissing = p->partMetaData()->sigSummary & GpgME::Signature::KeyMissing; + signatureInfo->mKeyExpired = p->partMetaData()->sigSummary & GpgME::Signature::KeyExpired; + signatureInfo->mKeyRevoked = p->partMetaData()->sigSummary & GpgME::Signature::KeyRevoked; + signatureInfo->mSigExpired = p->partMetaData()->sigSummary & GpgME::Signature::SigExpired; + signatureInfo->mCrlMissing = p->partMetaData()->sigSummary & GpgME::Signature::CrlMissing; + signatureInfo->mCrlTooOld = p->partMetaData()->sigSummary & GpgME::Signature::CrlTooOld; + signatureInfo->mSigner = p->partMetaData()->signer; + signatureInfo->mSignClass = p->partMetaData()->signClass; + signatureInfo->mSignerMailAddresses = p->partMetaData()->signerMailAddresses; + signatureInfo->mSignatureIsGood = p->partMetaData()->isGoodSignature; + signatureInfo->mKeyIsTrusted = p->partMetaData()->keyTrust & GpgME::Signature::Full || + p->partMetaData()->keyTrust & GpgME::Signature::Ultimate; + } + return QVariant::fromValue(signatureInfo); + } case ErrorType: return messagePart->error(); case ErrorString: { diff --git a/framework/src/domain/mime/partmodel.h b/framework/src/domain/mime/partmodel.h index 3c6378a2..c925c291 100644 --- a/framework/src/domain/mime/partmodel.h +++ b/framework/src/domain/mime/partmodel.h @@ -45,6 +45,8 @@ public: IsSignedRole, IsErrorRole, SecurityLevelRole, + SignatureDetails, + EncryptionDetails, ErrorType, ErrorString, SenderRole, @@ -62,3 +64,36 @@ private: std::unique_ptr d; }; +class SignatureInfo : public QObject +{ + Q_OBJECT + Q_PROPERTY(QByteArray keyId MEMBER mKeyId CONSTANT) + Q_PROPERTY(bool keyMissing MEMBER mKeyMissing CONSTANT) + Q_PROPERTY(bool keyRevoked MEMBER mKeyRevoked CONSTANT) + Q_PROPERTY(bool keyExpired MEMBER mKeyExpired CONSTANT) + Q_PROPERTY(bool sigExpired MEMBER mSigExpired CONSTANT) + Q_PROPERTY(bool crlMissing MEMBER mCrlMissing CONSTANT) + Q_PROPERTY(bool crlTooOld MEMBER mCrlTooOld CONSTANT) + + Q_PROPERTY(QString signer MEMBER mSigner CONSTANT) + Q_PROPERTY(QString signClass MEMBER mSignClass CONSTANT) + Q_PROPERTY(QStringList signerMailAddresses MEMBER mSignerMailAddresses CONSTANT) + Q_PROPERTY(bool signatureIsGood MEMBER mSignatureIsGood CONSTANT) + Q_PROPERTY(bool keyIsTrusted MEMBER mKeyIsTrusted CONSTANT) + +public: + bool mKeyRevoked = false; + bool mKeyExpired = false; + bool mSigExpired = false; + bool mKeyMissing = false; + bool mCrlMissing = false; + bool mCrlTooOld = false; + QByteArray mKeyId; + + QString mSigner; + QString mSignClass; + QStringList mSignerMailAddresses; + bool mSignatureIsGood = false; + bool mKeyIsTrusted = false; +}; + -- cgit v1.2.3