Warning, file /frameworks/networkmanager-qt/src/secretagent.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002     SPDX-FileCopyrightText: 2011 Ilia Kats <ilia-kats@gmx.net>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "secretagent.h"
0008 #include "manager_p.h"
0009 #include "nmdebug.h"
0010 #include "secretagent_p.h"
0011 
0012 #undef signals
0013 #include <NetworkManager.h>
0014 #include <libnm/NetworkManager.h>
0015 
0016 #define signals Q_SIGNALS
0017 
0018 #include <QDBusConnection>
0019 
0020 #include "agentmanagerinterface.h"
0021 #include "secretagentadaptor.h"
0022 
0023 NetworkManager::SecretAgentPrivate::SecretAgentPrivate(const QString &id,
0024                                                        const NetworkManager::SecretAgent::Capabilities capabilities,
0025                                                        NetworkManager::SecretAgent *parent)
0026     : q_ptr(parent)
0027     , agent(parent)
0028 #ifdef NMQT_STATIC
0029     , agentManager(NetworkManagerPrivate::DBUS_SERVICE, QLatin1String(NM_DBUS_PATH_AGENT_MANAGER), QDBusConnection::sessionBus(), parent)
0030 #else
0031     , agentManager(NetworkManagerPrivate::DBUS_SERVICE, QLatin1String(NM_DBUS_PATH_AGENT_MANAGER), QDBusConnection::systemBus(), parent)
0032 #endif
0033     , agentId(id)
0034     , capabilities(capabilities)
0035 {
0036     Q_Q(SecretAgent);
0037 
0038     qRegisterMetaType<NMVariantMapMap>("NMVariantMapMap");
0039     qDBusRegisterMetaType<NMVariantMapMap>();
0040 
0041     agentManager.connection().connect(NetworkManagerPrivate::DBUS_SERVICE,
0042                                       "/org/freedesktop",
0043                                       NetworkManagerPrivate::FDO_DBUS_OBJECT_MANAGER,
0044                                       QLatin1String("InterfacesAdded"),
0045                                       q,
0046                                       SLOT(dbusInterfacesAdded(QDBusObjectPath, QVariantMap)));
0047 
0048     agentManager.connection().registerObject(QLatin1String(NM_DBUS_PATH_SECRET_AGENT), &agent, QDBusConnection::ExportAllSlots);
0049 
0050     registerAgent(capabilities);
0051 }
0052 
0053 NetworkManager::SecretAgentPrivate::~SecretAgentPrivate()
0054 {
0055     agentManager.Unregister();
0056 }
0057 
0058 void NetworkManager::SecretAgentPrivate::dbusInterfacesAdded(const QDBusObjectPath &path, const QVariantMap &interfaces)
0059 {
0060     Q_UNUSED(path);
0061     if (!interfaces.contains(QString::fromLatin1(agentManager.staticInterfaceName()))) {
0062         return;
0063     }
0064 
0065     registerAgent(capabilities);
0066 }
0067 
0068 void NetworkManager::SecretAgentPrivate::registerAgent()
0069 {
0070     agentManager.RegisterWithCapabilities(agentId, NetworkManager::SecretAgent::Capability::NoCapability);
0071 }
0072 
0073 void NetworkManager::SecretAgentPrivate::registerAgent(NetworkManager::SecretAgent::Capabilities capabilities)
0074 {
0075     agentManager.RegisterWithCapabilities(agentId, capabilities);
0076 }
0077 
0078 NetworkManager::SecretAgent::SecretAgent(const QString &id, QObject *parent)
0079     : QObject(parent)
0080     , QDBusContext()
0081     , d_ptr(new NetworkManager::SecretAgentPrivate(id, NetworkManager::SecretAgent::Capability::NoCapability, this))
0082 {
0083 }
0084 
0085 NetworkManager::SecretAgent::SecretAgent(const QString &id, NetworkManager::SecretAgent::Capabilities capabilities, QObject *parent)
0086     : QObject(parent)
0087     , QDBusContext()
0088     , d_ptr(new NetworkManager::SecretAgentPrivate(id, capabilities, this))
0089 {
0090 }
0091 
0092 NetworkManager::SecretAgent::~SecretAgent()
0093 {
0094     Q_D(SecretAgent);
0095     delete d;
0096 }
0097 
0098 void NetworkManager::SecretAgent::sendError(NetworkManager::SecretAgent::Error error, const QString &explanation, const QDBusMessage &callMessage) const
0099 {
0100     Q_D(const SecretAgent);
0101 
0102     QString errorString;
0103     switch (error) {
0104     case NotAuthorized:
0105         errorString = QStringLiteral(NM_DBUS_INTERFACE_SECRET_AGENT) % QStringLiteral(".NotAuthorized");
0106         break;
0107     case InvalidConnection:
0108         errorString = QStringLiteral(NM_DBUS_INTERFACE_SECRET_AGENT) % QStringLiteral(".InvalidConnection");
0109         break;
0110     case UserCanceled:
0111         errorString = QStringLiteral(NM_DBUS_INTERFACE_SECRET_AGENT) % QStringLiteral(".UserCanceled");
0112         break;
0113     case AgentCanceled:
0114         errorString = QStringLiteral(NM_DBUS_INTERFACE_SECRET_AGENT) % QStringLiteral(".AgentCanceled");
0115         break;
0116     case InternalError:
0117         errorString = QStringLiteral(NM_DBUS_INTERFACE_SECRET_AGENT) % QStringLiteral(".InternalError");
0118         break;
0119     case NoSecrets:
0120         errorString = QStringLiteral(NM_DBUS_INTERFACE_SECRET_AGENT) % QStringLiteral(".NoSecrets");
0121         break;
0122     default:
0123         errorString = QStringLiteral(NM_DBUS_INTERFACE_SECRET_AGENT) % QStringLiteral(".Unknown");
0124         break;
0125     }
0126 
0127     QDBusMessage reply;
0128     if (callMessage.type() == QDBusMessage::InvalidMessage) {
0129         reply = message().createErrorReply(errorString, explanation);
0130     } else {
0131         reply = callMessage.createErrorReply(errorString, explanation);
0132     }
0133 
0134     if (!d->agentManager.connection().send(reply)) {
0135         qCDebug(NMQT) << "Failed to put error message on DBus queue" << errorString << explanation;
0136     }
0137 }
0138 
0139 #include "moc_secretagent.cpp"