File indexing completed on 2025-03-09 04:54:28
0001 /* 0002 SPDX-FileCopyrightText: 2019-2024 Laurent Montel <montel@kde.org> 0003 0004 Code based on ARHParser.jsm from dkim_verifier (Copyright (c) Philippe Lieser) 0005 (This software is licensed under the terms of the MIT License.) 0006 0007 SPDX-License-Identifier: LGPL-2.0-or-later 0008 */ 0009 0010 #include "dkimauthenticationstatusinfoconverter.h" 0011 #include "dkimutil.h" 0012 #include "messageviewer_dkimcheckerdebug.h" 0013 using namespace MessageViewer; 0014 0015 DKIMAuthenticationStatusInfoConverter::DKIMAuthenticationStatusInfoConverter() = default; 0016 0017 DKIMAuthenticationStatusInfoConverter::~DKIMAuthenticationStatusInfoConverter() = default; 0018 0019 MessageViewer::DKIMAuthenticationStatusInfo DKIMAuthenticationStatusInfoConverter::statusInfo() const 0020 { 0021 return mStatusInfo; 0022 } 0023 0024 void DKIMAuthenticationStatusInfoConverter::setStatusInfo(const MessageViewer::DKIMAuthenticationStatusInfo &statusInfo) 0025 { 0026 mStatusInfo = statusInfo; 0027 } 0028 0029 QList<DKIMCheckSignatureJob::DKIMCheckSignatureAuthenticationResult> DKIMAuthenticationStatusInfoConverter::convert() const 0030 { 0031 QList<DKIMCheckSignatureJob::DKIMCheckSignatureAuthenticationResult> lstResult; 0032 const QList<DKIMAuthenticationStatusInfo::AuthStatusInfo> lstInfo = mStatusInfo.listAuthStatusInfo(); 0033 for (const DKIMAuthenticationStatusInfo::AuthStatusInfo &info : lstInfo) { 0034 DKIMCheckSignatureJob::DKIMCheckSignatureAuthenticationResult convertedResult; 0035 convertedResult.method = MessageViewer::DKIMUtil::convertAuthenticationMethodStringToEnum(info.method); 0036 const QString &infoResult = info.result; 0037 convertedResult.infoResult = infoResult; 0038 if (infoResult == QLatin1StringView("none")) { 0039 convertedResult.status = DKIMCheckSignatureJob::DKIMStatus::EmailNotSigned; 0040 } else if (infoResult == QLatin1StringView("pass")) { 0041 convertedResult.status = DKIMCheckSignatureJob::DKIMStatus::Valid; 0042 QString sdid; 0043 QString auid; 0044 for (const DKIMAuthenticationStatusInfo::AuthStatusInfo::Property &prop : info.header) { 0045 if (prop.type == QLatin1Char('d')) { 0046 sdid = prop.value; 0047 } else if (prop.type == QLatin1Char('i')) { 0048 auid = prop.value; 0049 } 0050 } 0051 if (!auid.isEmpty() || !sdid.isEmpty()) { 0052 if (sdid.isEmpty()) { 0053 sdid = MessageViewer::DKIMUtil::emailDomain(auid); 0054 } else if (auid.isEmpty()) { 0055 auid = QLatin1Char('@') + sdid; 0056 } 0057 convertedResult.sdid = sdid; 0058 convertedResult.auid = auid; 0059 } 0060 } else if (infoResult == QLatin1StringView("fail") || infoResult == QLatin1StringView("policy") || infoResult == QLatin1StringView("neutral") 0061 || infoResult == QLatin1StringView("permerror")) { 0062 convertedResult.status = DKIMCheckSignatureJob::DKIMStatus::Invalid; 0063 if (!info.reason.isEmpty()) { 0064 convertedResult.errorStr = info.reason; 0065 } 0066 } else if (infoResult == QLatin1StringView("temperror")) { 0067 convertedResult.status = DKIMCheckSignatureJob::DKIMStatus::Invalid; 0068 if (!info.reason.isEmpty()) { 0069 convertedResult.errorStr = info.reason; 0070 } 0071 } else { 0072 qCWarning(MESSAGEVIEWER_DKIMCHECKER_LOG) << "Invalid result type " << infoResult; 0073 continue; 0074 } 0075 lstResult.append(convertedResult); 0076 } 0077 0078 return lstResult; 0079 }