File indexing completed on 2025-03-09 04:54:29

0001 /*
0002    SPDX-FileCopyrightText: 2019-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "dkimmanager.h"
0008 #include "dkimcheckfulljob.h"
0009 #include "dkimmanagerkey.h"
0010 #include "dkimresultattribute.h"
0011 #include "messageviewer_dkimcheckerdebug.h"
0012 #include <Akonadi/AttributeFactory>
0013 
0014 using namespace MessageViewer;
0015 DKIMManager::DKIMManager(QObject *parent)
0016     : QObject(parent)
0017 {
0018     // Initialize QCA
0019     MessageViewer::DKIMManagerKey::self();
0020     Akonadi::AttributeFactory::registerAttribute<MessageViewer::DKIMResultAttribute>();
0021 }
0022 
0023 DKIMManager::~DKIMManager() = default;
0024 
0025 DKIMManager *DKIMManager::self()
0026 {
0027     static DKIMManager s_self;
0028     return &s_self;
0029 }
0030 
0031 void DKIMManager::clearInfoWidget()
0032 {
0033     Q_EMIT clearInfo();
0034 }
0035 
0036 DKIMCheckPolicy DKIMManager::policy() const
0037 {
0038     return mCheckPolicy;
0039 }
0040 
0041 void DKIMManager::setPolicy(const DKIMCheckPolicy &policy)
0042 {
0043     mCheckPolicy = policy;
0044 }
0045 
0046 void DKIMManager::recheckDKim(const Akonadi::Item &item)
0047 {
0048     checkFullInfo(item);
0049 }
0050 
0051 void DKIMManager::checkDKim(const Akonadi::Item &item)
0052 {
0053     if (mCheckPolicy.saveDkimResult()) {
0054         if (item.hasAttribute<MessageViewer::DKIMResultAttribute>()) {
0055             const auto *const attr = item.attribute<MessageViewer::DKIMResultAttribute>();
0056             if (attr) {
0057                 DKIMCheckSignatureJob::CheckSignatureResult checkResult;
0058                 checkResult.error = static_cast<DKIMCheckSignatureJob::DKIMError>(attr->error());
0059                 checkResult.warning = static_cast<DKIMCheckSignatureJob::DKIMWarning>(attr->warning());
0060                 checkResult.status = static_cast<DKIMCheckSignatureJob::DKIMStatus>(attr->status());
0061                 qCDebug(MESSAGEVIEWER_DKIMCHECKER_LOG)
0062                     << "result : status " << checkResult.status << " error : " << checkResult.error << " warning " << checkResult.warning;
0063                 Q_EMIT result(checkResult, item.id());
0064                 return;
0065             }
0066         }
0067     }
0068     checkFullInfo(item);
0069 }
0070 
0071 void DKIMManager::checkFullInfo(const Akonadi::Item &item)
0072 {
0073     auto job = new DKIMCheckFullJob(this);
0074     job->setPolicy(mCheckPolicy);
0075     connect(job, &DKIMCheckFullJob::result, this, &DKIMManager::result);
0076     job->startCheckFullInfo(item);
0077 }
0078 
0079 void DKIMManager::checkDKim(const KMime::Message::Ptr &message)
0080 {
0081     auto job = new DKIMCheckFullJob(this);
0082     job->setPolicy(mCheckPolicy);
0083     connect(job, &DKIMCheckFullJob::result, this, &DKIMManager::result);
0084     job->startCheckFullInfo(message);
0085 }
0086 
0087 #include "moc_dkimmanager.cpp"