File indexing completed on 2025-03-09 04:54:29
0001 /* 0002 SPDX-FileCopyrightText: 2018-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include "messageviewer_export.h" 0010 #include <QObject> 0011 #include <QString> 0012 #include <QStringList> 0013 namespace MessageViewer 0014 { 0015 /** 0016 * @brief The DKIMInfo class 0017 * @author Laurent Montel <montel@kde.org> 0018 */ 0019 class MESSAGEVIEWER_EXPORT DKIMInfo 0020 { 0021 Q_GADGET 0022 public: 0023 DKIMInfo(); 0024 0025 enum CanonicalizationType { 0026 Unknown, 0027 Simple, 0028 Relaxed, 0029 }; 0030 enum class HashingAlgorithmType { 0031 Any, 0032 Sha1, 0033 Sha256, 0034 Unknown, 0035 }; 0036 Q_ENUM(HashingAlgorithmType) 0037 0038 [[nodiscard]] bool parseDKIM(const QString &header); 0039 0040 [[nodiscard]] int version() const; 0041 void setVersion(int version); 0042 0043 [[nodiscard]] HashingAlgorithmType hashingAlgorithm() const; 0044 void setHashingAlgorithm(DKIMInfo::HashingAlgorithmType type); 0045 0046 [[nodiscard]] QString domain() const; 0047 void setDomain(const QString &domain); 0048 0049 [[nodiscard]] QString selector() const; 0050 void setSelector(const QString &selector); 0051 0052 [[nodiscard]] QString bodyHash() const; 0053 void setBodyHash(const QString &bodyHash); 0054 0055 [[nodiscard]] bool isValid() const; 0056 0057 [[nodiscard]] QStringList listSignedHeader() const; 0058 void setListSignedHeader(const QStringList &listSignedHeader); 0059 0060 [[nodiscard]] QString signingAlgorithm() const; 0061 void setSigningAlgorithm(const QString &signingAlgorithm); 0062 0063 [[nodiscard]] qint64 signatureTimeStamp() const; 0064 void setSignatureTimeStamp(qint64 signatureTimeStamp); 0065 0066 [[nodiscard]] QString query() const; 0067 void setQuery(const QString &query); 0068 0069 [[nodiscard]] qint64 expireTime() const; 0070 void setExpireTime(qint64 expireTime); 0071 0072 [[nodiscard]] QString signature() const; 0073 void setSignature(const QString &signature); 0074 0075 [[nodiscard]] QString agentOrUserIdentifier() const; 0076 void setAgentOrUserIdentifier(const QString &agentOrUserIdentifier); 0077 0078 [[nodiscard]] int bodyLengthCount() const; 0079 void setBodyLengthCount(int bodyLengthCount); 0080 0081 [[nodiscard]] CanonicalizationType headerCanonization() const; 0082 void setHeaderCanonization(CanonicalizationType headerCanonization); 0083 0084 [[nodiscard]] CanonicalizationType bodyCanonization() const; 0085 void setBodyCanonization(CanonicalizationType bodyCanonization); 0086 0087 [[nodiscard]] bool operator==(const DKIMInfo &other) const; 0088 0089 [[nodiscard]] QStringList copiedHeaderField() const; 0090 void setCopiedHeaderField(const QStringList &copiedHeaderField); 0091 0092 [[nodiscard]] QString iDomain() const; 0093 void setIDomain(const QString &iDomain); 0094 0095 private: 0096 MESSAGEVIEWER_NO_EXPORT void parseCanonicalization(const QString &str); 0097 MESSAGEVIEWER_NO_EXPORT void parseAlgorithm(const QString &str); 0098 HashingAlgorithmType mHashingAlgorithm = HashingAlgorithmType::Any; 0099 QString mSigningAlgorithm; 0100 QString mDomain; 0101 QString mSelector; 0102 QString mBodyHash; 0103 QString mQuery; 0104 QString mSignature; 0105 QString mAgentOrUserIdentifier; 0106 QString mIDomain; 0107 QStringList mListSignedHeader; 0108 QStringList mCopiedHeaderField; // Default is empty 0109 qint64 mSignatureTimeStamp = -1; 0110 qint64 mExpireTime = -1; 0111 int mVersion = -1; 0112 int mBodyLengthCount = -1; 0113 CanonicalizationType mHeaderCanonization = Unknown; 0114 CanonicalizationType mBodyCanonization = Unknown; 0115 }; 0116 } 0117 MESSAGEVIEWER_EXPORT QDebug operator<<(QDebug d, const MessageViewer::DKIMInfo &t);