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 "dkimdownloadkeyjob.h" 0008 #include "messageviewer_dkimcheckerdebug.h" 0009 0010 #include <QDnsLookup> 0011 using namespace MessageViewer; 0012 DKIMDownloadKeyJob::DKIMDownloadKeyJob(QObject *parent) 0013 : QObject(parent) 0014 { 0015 } 0016 0017 DKIMDownloadKeyJob::~DKIMDownloadKeyJob() = default; 0018 0019 bool DKIMDownloadKeyJob::start() 0020 { 0021 if (!canStart()) { 0022 qCWarning(MESSAGEVIEWER_DKIMCHECKER_LOG) << "Impossible to start download public keys"; 0023 deleteLater(); 0024 return false; 0025 } 0026 mDnsLookup = new QDnsLookup(this); 0027 connect(mDnsLookup, &QDnsLookup::finished, this, &DKIMDownloadKeyJob::resolvDnsDone); 0028 0029 mDnsLookup->setType(QDnsLookup::TXT); 0030 mDnsLookup->setName(resolvDnsValue()); 0031 mDnsLookup->lookup(); 0032 return true; 0033 } 0034 0035 bool DKIMDownloadKeyJob::canStart() const 0036 { 0037 return !mDomainName.isEmpty() && !mSelectorName.isEmpty(); 0038 } 0039 0040 QString DKIMDownloadKeyJob::domainName() const 0041 { 0042 return mDomainName; 0043 } 0044 0045 void DKIMDownloadKeyJob::setDomainName(const QString &domainName) 0046 { 0047 mDomainName = domainName; 0048 } 0049 0050 QString DKIMDownloadKeyJob::selectorName() const 0051 { 0052 return mSelectorName; 0053 } 0054 0055 void DKIMDownloadKeyJob::setSelectorName(const QString &selectorName) 0056 { 0057 mSelectorName = selectorName; 0058 } 0059 0060 QString DKIMDownloadKeyJob::resolvDnsValue() const 0061 { 0062 const QString name = mSelectorName + QLatin1StringView("._domainkey.") + mDomainName; 0063 qDebug(MESSAGEVIEWER_DKIMCHECKER_LOG) << "DKIMDownloadKeyJob::resolvDnsValue" << name; 0064 return name; 0065 } 0066 0067 QDnsLookup *DKIMDownloadKeyJob::dnsLookup() const 0068 { 0069 return mDnsLookup; 0070 } 0071 0072 void DKIMDownloadKeyJob::resolvDnsDone() 0073 { 0074 // Check the lookup succeeded. 0075 if (mDnsLookup->error() != QDnsLookup::NoError) { 0076 qCWarning(MESSAGEVIEWER_DKIMCHECKER_LOG) << "Error during resolving: " << mDnsLookup->errorString(); 0077 Q_EMIT error(mDnsLookup->errorString()); 0078 deleteLater(); 0079 return; 0080 } 0081 0082 // Handle the results. 0083 const auto records = mDnsLookup->textRecords(); 0084 QList<QByteArray> textRecordResult; 0085 textRecordResult.reserve(records.count()); 0086 for (const QDnsTextRecord &record : records) { 0087 textRecordResult << record.values(); 0088 } 0089 0090 Q_EMIT success(textRecordResult, mDomainName, mSelectorName); 0091 deleteLater(); 0092 } 0093 0094 #include "moc_dkimdownloadkeyjob.cpp"