File indexing completed on 2025-03-09 04:54:31
0001 /* 0002 SPDX-FileCopyrightText: 2019-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include "dmarcinfo.h" 0010 #include "messageviewer_private_export.h" 0011 #include <QObject> 0012 namespace MessageViewer 0013 { 0014 class MESSAGEVIEWER_TESTS_EXPORT DMARCPolicyJob : public QObject 0015 { 0016 Q_OBJECT 0017 public: 0018 struct DMARCResult { 0019 bool isValid() const 0020 { 0021 return !mAdkim.isEmpty() && !mPolicy.isEmpty() && !mDomain.isEmpty() && !mSource.isEmpty(); 0022 } 0023 0024 [[nodiscard]] bool operator==(const DMARCPolicyJob::DMARCResult &other) const 0025 { 0026 return mAdkim == other.mAdkim && mPolicy == other.mPolicy && mDomain == other.mDomain && mSource == other.mSource 0027 && mPercentage == other.mPercentage; 0028 } 0029 0030 [[nodiscard]] bool operator!=(const DMARCPolicyJob::DMARCResult &other) const 0031 { 0032 return !DMARCResult::operator==(other); 0033 } 0034 0035 QString mAdkim; 0036 QString mPolicy; 0037 QString mDomain; 0038 QString mSource; 0039 int mPercentage = -1; 0040 }; 0041 0042 explicit DMARCPolicyJob(QObject *parent = nullptr); 0043 ~DMARCPolicyJob() override; 0044 0045 [[nodiscard]] bool canStart() const; 0046 [[nodiscard]] bool start(); 0047 0048 [[nodiscard]] QString emailAddress() const; 0049 void setEmailAddress(const QString &emailAddress); 0050 0051 Q_SIGNALS: 0052 void result(const MessageViewer::DMARCPolicyJob::DMARCResult &value, const QString &emailAddress); 0053 0054 private: 0055 void checkSubDomain(const QString &domainName); 0056 void slotCheckDomain(const QList<QByteArray> &lst, const QString &domainName); 0057 void slotCheckSubDomain(const QList<QByteArray> &lst, const QString &domainName); 0058 [[nodiscard]] QByteArray generateDMARCFromList(const QList<QByteArray> &lst) const; 0059 [[nodiscard]] QString emailDomain() const; 0060 [[nodiscard]] QString emailSubDomain(const QString &domainName) const; 0061 QString mEmailAddress; 0062 }; 0063 }