7 #include "dmarcpolicyjob.h"
9 #include "dmarcrecordjob.h"
10 #include "messageviewer_dkimcheckerdebug.h"
11 using namespace MessageViewer;
13 DMARCPolicyJob::DMARCPolicyJob(
QObject *parent)
18 DMARCPolicyJob::~DMARCPolicyJob() =
default;
20 bool DMARCPolicyJob::canStart()
const
22 return !mEmailAddress.isEmpty();
28 qCWarning(MESSAGEVIEWER_DKIMCHECKER_LOG) <<
" Impossible to start DMARCPolicyJob" << mEmailAddress;
29 Q_EMIT result({}, mEmailAddress);
34 auto job =
new DMARCRecordJob(
this);
35 job->setDomainName(emailDomain());
36 connect(job, &MessageViewer::DMARCRecordJob::success,
this, &DMARCPolicyJob::slotCheckDomain);
37 connect(job, &MessageViewer::DMARCRecordJob::error,
this, [
this](
const QString &err,
const QString &domainName) {
38 qCWarning(MESSAGEVIEWER_DKIMCHECKER_LOG) <<
"error: " << err <<
" domain " << domainName;
40 checkSubDomain(domainName);
43 Q_EMIT result({}, mEmailAddress);
53 if (lst.
count() != 1) {
57 qCWarning(MESSAGEVIEWER_DKIMCHECKER_LOG) <<
"DMARCPolicyJob Key result has more that 1 element" << lst;
66 const QByteArray ba = generateDMARCFromList(lst);
69 if ((info.version() !=
QLatin1String(
"DMARC1")) || info.policy().
isEmpty() || (info.percentage() > 100 || info.percentage() < 0)) {
70 Q_EMIT result({}, mEmailAddress);
74 DMARCPolicyJob::DMARCResult val;
75 val.mAdkim = info.adkim();
76 val.mPercentage = info.percentage();
77 val.mPolicy = info.subDomainPolicy().
isEmpty() ? info.policy() : info.subDomainPolicy();
79 val.mDomain = domainName;
80 val.mSource = domainName;
81 Q_EMIT result(val, mEmailAddress);
86 Q_EMIT result({}, mEmailAddress);
89 void DMARCPolicyJob::checkSubDomain(
const QString &domainName)
91 const QString subDomain = emailSubDomain(domainName);
92 if (subDomain != domainName) {
93 auto job =
new DMARCRecordJob(
this);
94 job->setDomainName(subDomain);
95 connect(job, &MessageViewer::DMARCRecordJob::success,
this, &DMARCPolicyJob::slotCheckSubDomain);
96 connect(job, &MessageViewer::DMARCRecordJob::error,
this, [
this](
const QString &err,
const QString &domainName) {
97 qCWarning(MESSAGEVIEWER_DKIMCHECKER_LOG) <<
"error: " << err <<
" domain " << domainName;
98 Q_EMIT result({}, mEmailAddress);
102 Q_EMIT result({}, mEmailAddress);
108 Q_EMIT result({}, mEmailAddress);
116 const QByteArray ba = generateDMARCFromList(lst);
120 || (info.percentage() != -1 && (info.percentage() > 100 || info.percentage() < 0))) {
123 checkSubDomain(domainName);
125 DMARCPolicyJob::DMARCResult val;
126 val.mAdkim = info.adkim();
127 val.mPercentage = info.percentage();
128 val.mPolicy = info.policy();
129 val.mDomain = domainName;
130 val.mSource = domainName;
131 Q_EMIT result(val, mEmailAddress);
137 checkSubDomain(domainName);
141 QString DMARCPolicyJob::emailDomain()
const
143 return MessageViewer::DKIMUtil::emailDomain(mEmailAddress);
146 QString DMARCPolicyJob::emailSubDomain(
const QString &domainName)
const
148 return MessageViewer::DKIMUtil::emailSubDomain(domainName);
151 QString DMARCPolicyJob::emailAddress()
const
153 return mEmailAddress;
156 void DMARCPolicyJob::setEmailAddress(
const QString &emailAddress)
158 mEmailAddress = emailAddress;