7#include "dkimcheckpolicyjob.h"
8#include "dkim-verify/dkimmanagerrules.h"
9#include "dkim-verify/dmarcmanager.h"
10#include "messageviewer_dkimcheckerdebug.h"
12using namespace MessageViewer;
13DKIMCheckPolicyJob::DKIMCheckPolicyJob(
QObject *parent)
18DKIMCheckPolicyJob::~DKIMCheckPolicyJob() =
default;
20bool DKIMCheckPolicyJob::canStart()
const
22 return !mEmailAddress.isEmpty();
25bool DKIMCheckPolicyJob::start()
28 qCWarning(MESSAGEVIEWER_DKIMCHECKER_LOG) <<
"Impossible to start DKIMCheckPolicyJob" << mEmailAddress;
29 Q_EMIT result(mCheckResult);
33 if (mPolicy.useDMarc()) {
34 if (DMARCManager::self()->isNoDMarcServerAddress(mEmailAddress)) {
35 Q_EMIT result(mCheckResult);
39 auto job =
new DMARCPolicyJob(
this);
40 job->setEmailAddress(mEmailAddress);
41 connect(job, &DMARCPolicyJob::result,
this, &DKIMCheckPolicyJob::dmarcPolicyResult);
43 qCWarning(MESSAGEVIEWER_DKIMCHECKER_LOG) <<
"Impossible to start DKIMCheckPolicyJob" << mEmailAddress;
44 Q_EMIT result(mCheckResult);
49 if (mPolicy.useDefaultRules()) {
50 compareWithDefaultRules();
52 Q_EMIT result(mCheckResult);
59void DKIMCheckPolicyJob::compareWithDefaultRules()
61 const QList<DKIMRule> rules = DKIMManagerRules::self()->rules();
62 for (
const DKIMRule &rule : rules) {
64 if (rule.from() == mEmailAddress || rule.from() == QLatin1Char(
'*')) {
66 const QStringList signedDomainIdentifier = rule.signedDomainIdentifier();
67 for (
const QString &ssid : signedDomainIdentifier) {
68 if (mCheckResult.sdid == ssid) {
69 switch (rule.ruleType()) {
70 case DKIMRule::RuleType::Unknown:
72 qCWarning(MESSAGEVIEWER_DKIMCHECKER_LOG) <<
"Invalid rule found " << rule;
74 case DKIMRule::RuleType::MustBeSigned:
75 mCheckResult.status = DKIMCheckSignatureJob::DKIMStatus::NeedToBeSigned;
77 case DKIMRule::RuleType::CanBeSigned:
80 case DKIMRule::RuleType::IgnoreEmailNotSigned:
90 Q_EMIT result(mCheckResult);
94void DKIMCheckPolicyJob::dmarcPolicyResult(
const MessageViewer::DMARCPolicyJob::DMARCResult &value,
const QString &emailAddress)
96 if (value.isValid()) {
97 if (mCheckResult.status == DKIMCheckSignatureJob::DKIMStatus::EmailNotSigned) {
98 mCheckResult.status = DKIMCheckSignatureJob::DKIMStatus::NeedToBeSigned;
102 mCheckResult.sdid = value.mSource;
105 DMARCManager::self()->addNoDMarcServerAddress(emailAddress);
107 Q_EMIT result(mCheckResult);
111MessageViewer::DKIMCheckSignatureJob::CheckSignatureResult DKIMCheckPolicyJob::checkResult()
const
116void DKIMCheckPolicyJob::setCheckResult(
const MessageViewer::DKIMCheckSignatureJob::CheckSignatureResult &checkResult)
118 mCheckResult = checkResult;
121QString DKIMCheckPolicyJob::emailAddress()
const
123 return mEmailAddress;
126void DKIMCheckPolicyJob::setEmailAddress(
const QString &emailAddress)
128 mEmailAddress = emailAddress;
141#include "moc_dkimcheckpolicyjob.cpp"
The DKIMCheckPolicy class.
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)