File indexing completed on 2024-04-21 03:55:10

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 2007 Andreas Hartmetz <ahartmetz@gmail.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #ifndef KSSLD_DBUSMETATYPES_H
0009 #define KSSLD_DBUSMETATYPES_H
0010 
0011 #include "ksslcertificatemanager_p.h"
0012 
0013 #include <QDBusArgument>
0014 #include <QDBusMetaType>
0015 #include <qglobal.h>
0016 
0017 Q_DECLARE_METATYPE(KSslCertificateRule)
0018 Q_DECLARE_METATYPE(QSslError::SslError)
0019 
0020 inline QDBusArgument &operator<<(QDBusArgument &argument, const QSslCertificate &cert)
0021 {
0022     argument.beginStructure();
0023     argument << cert.toDer();
0024     argument.endStructure();
0025     return argument;
0026 }
0027 
0028 inline const QDBusArgument &operator>>(const QDBusArgument &argument, QSslCertificate &cert)
0029 {
0030     QByteArray data;
0031     argument.beginStructure();
0032     argument >> data;
0033     argument.endStructure();
0034     cert = QSslCertificate(data, QSsl::Der);
0035     return argument;
0036 }
0037 
0038 inline QDBusArgument &operator<<(QDBusArgument &argument, const KSslCertificateRule &rule)
0039 {
0040     argument.beginStructure();
0041     argument << rule.certificate() << rule.hostName() << rule.isRejected() << rule.expiryDateTime().toString(Qt::ISODate) << rule.ignoredErrors();
0042     argument.endStructure();
0043     return argument;
0044 }
0045 
0046 inline const QDBusArgument &operator>>(const QDBusArgument &argument, KSslCertificateRule &rule)
0047 {
0048     QSslCertificate cert;
0049     QString hostName;
0050     bool isRejected;
0051     QString expiryStr;
0052     QList<QSslError::SslError> ignoredErrors;
0053     argument.beginStructure();
0054     argument >> cert >> hostName >> isRejected >> expiryStr >> ignoredErrors;
0055     argument.endStructure();
0056 
0057     KSslCertificateRule ret(cert, hostName);
0058     ret.setRejected(isRejected);
0059     ret.setExpiryDateTime(QDateTime::fromString(expiryStr, Qt::ISODate));
0060     ret.setIgnoredErrors(ignoredErrors);
0061     rule = ret;
0062     return argument;
0063 }
0064 
0065 inline QDBusArgument &operator<<(QDBusArgument &argument, const QSslError::SslError &error)
0066 {
0067     argument.beginStructure(); // overhead ho!
0068     argument << static_cast<int>(error);
0069     argument.endStructure();
0070     return argument;
0071 }
0072 
0073 inline const QDBusArgument &operator>>(const QDBusArgument &argument, QSslError::SslError &error)
0074 {
0075     int data;
0076     argument.beginStructure();
0077     argument >> data;
0078     argument.endStructure();
0079     error = static_cast<QSslError::SslError>(data);
0080     return argument;
0081 }
0082 
0083 static void registerMetaTypesForKSSLD()
0084 {
0085     qDBusRegisterMetaType<QSslCertificate>();
0086     qDBusRegisterMetaType<KSslCertificateRule>();
0087     qDBusRegisterMetaType<QList<QSslCertificate>>();
0088     qDBusRegisterMetaType<QSslError::SslError>();
0089     qDBusRegisterMetaType<QList<QSslError::SslError>>();
0090 }
0091 
0092 #endif // KSSLD_DBUSMETATYPES_H