diff --git a/messageviewer/src/dkim-verify/dkimauthenticationstatusinfo.cpp b/messageviewer/src/dkim-verify/dkimauthenticationstatusinfo.cpp index 992c16d0..878b0b6f 100644 --- a/messageviewer/src/dkim-verify/dkimauthenticationstatusinfo.cpp +++ b/messageviewer/src/dkim-verify/dkimauthenticationstatusinfo.cpp @@ -1,180 +1,195 @@ /* Copyright (C) 2018-2019 Laurent Montel This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "dkimauthenticationstatusinfo.h" #include "dkimauthenticationstatusinfoutil.h" #include "messageviewer_dkimcheckerdebug.h" #include using namespace MessageViewer; //see https://tools.ietf.org/html/rfc7601 DKIMAuthenticationStatusInfo::DKIMAuthenticationStatusInfo() { } bool DKIMAuthenticationStatusInfo::parseAuthenticationStatus(const QString &key) { QString valueKey = key; // https://tools.ietf.org/html/rfc7601#section-2.2 // authres-header = "Authentication-Results:" [CFWS] authserv-id // [ CFWS authres-version ] // ( no-result / 1*resinfo ) [CFWS] CRLF // 1) extract AuthservId and AuthVersion QRegularExpressionMatch match; const QString regStr = DKIMAuthenticationStatusInfoUtil::value_cp() + QLatin1String("(?:") + DKIMAuthenticationStatusInfoUtil::cfws_p() + QLatin1String("([0-9]+)") + DKIMAuthenticationStatusInfoUtil::cfws_op() + QLatin1String(" )?"); //qDebug() << " regStr" << regStr; int index = valueKey.indexOf(QRegularExpression(regStr), 0, &match); if (index != -1) { mAuthservId = match.captured(1); if (!match.captured(2).isEmpty()) { mAuthVersion = match.captured(2).toInt(); } else { mAuthVersion = 1; } valueKey = valueKey.right(valueKey.length() - (index + match.captured(0).length())); qDebug() << " match.captured(0)"< DKIMAuthenticationStatusInfo::listAuthStatusInfo() const { return mListAuthStatusInfo; } void DKIMAuthenticationStatusInfo::setListAuthStatusInfo(const QList &listAuthStatusInfo) { mListAuthStatusInfo = listAuthStatusInfo; } QString DKIMAuthenticationStatusInfo::authservId() const { return mAuthservId; } void DKIMAuthenticationStatusInfo::setAuthservId(const QString &authservId) { mAuthservId = authservId; } QDebug operator <<(QDebug d, const DKIMAuthenticationStatusInfo &t) { d << "mAuthservId: " << t.authservId(); d << "mReasonSpec: " << t.reasonSpec(); d << "mAuthVersion: " << t.authVersion(); for (const DKIMAuthenticationStatusInfo::AuthStatusInfo & info : t.listAuthStatusInfo()) { d << "mListAuthStatusInfo: " << info.method << " : " << info.result << " : " << info.methodVersion << " : " << info.reason; } return d; } bool DKIMAuthenticationStatusInfo::AuthStatusInfo::operator==(const DKIMAuthenticationStatusInfo::AuthStatusInfo &other) const { return other.method == method && other.result == result && other.methodVersion == methodVersion && other.reason == reason; } + +bool DKIMAuthenticationStatusInfo::AuthStatusInfo::isValid() const +{ + return !method.isEmpty(); +} diff --git a/messageviewer/src/dkim-verify/dkimauthenticationstatusinfo.h b/messageviewer/src/dkim-verify/dkimauthenticationstatusinfo.h index f6b10f1a..2284930d 100644 --- a/messageviewer/src/dkim-verify/dkimauthenticationstatusinfo.h +++ b/messageviewer/src/dkim-verify/dkimauthenticationstatusinfo.h @@ -1,69 +1,70 @@ /* Copyright (C) 2018-2019 Laurent Montel This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef DKIMAUTHENTICATIONSTATUSINFO_H #define DKIMAUTHENTICATIONSTATUSINFO_H #include "messageviewer_private_export.h" #include #include namespace MessageViewer { class MESSAGEVIEWER_TESTS_EXPORT DKIMAuthenticationStatusInfo { public: DKIMAuthenticationStatusInfo(); struct AuthStatusInfo { QString method; QString result; QString reason; int methodVersion = -1; //TODO add more bool operator==(const AuthStatusInfo &other) const; + bool isValid() const; }; Q_REQUIRED_RESULT QString authservId() const; void setAuthservId(const QString &authservId); Q_REQUIRED_RESULT bool parseAuthenticationStatus(const QString &key); Q_REQUIRED_RESULT int authVersion() const; void setAuthVersion(int authVersion); Q_REQUIRED_RESULT QString reasonSpec() const; void setReasonSpec(const QString &reasonSpec); Q_REQUIRED_RESULT bool operator==(const DKIMAuthenticationStatusInfo &other) const; Q_REQUIRED_RESULT QList listAuthStatusInfo() const; void setListAuthStatusInfo(const QList &listAuthStatusInfo); private: AuthStatusInfo parseAuthResultInfo(QString &valueKey); QList mListAuthStatusInfo; QString mAuthservId; QString mReasonSpec; int mAuthVersion = -1; }; } Q_DECLARE_METATYPE(MessageViewer::DKIMAuthenticationStatusInfo) MESSAGEVIEWER_EXPORT QDebug operator <<(QDebug d, const MessageViewer::DKIMAuthenticationStatusInfo &t); #endif // DKIMAUTHENTICATIONSTATUSINFO_H