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);