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 }