1 | /* |
2 | SPDX-FileCopyrightText: 2008 Nicola Gigante <nicola.gigante@gmail.com> |
3 | SPDX-FileCopyrightText: 2009 Dario Freddi <drf@kde.org> |
4 | SPDX-FileCopyrightText: 2020 Harald Sitter <sitter@kde.org> |
5 | |
6 | SPDX-License-Identifier: LGPL-2.1-or-later |
7 | */ |
8 | |
9 | #ifndef DBUS_HELPER_PROXY_H |
10 | #define DBUS_HELPER_PROXY_H |
11 | |
12 | #include "HelperProxy.h" |
13 | #include "actionreply.h" |
14 | |
15 | #include <QDBusConnection> |
16 | #include <QDBusContext> |
17 | #include <QVariant> |
18 | |
19 | namespace KAuth |
20 | { |
21 | class DBusHelperProxy : public HelperProxy, protected QDBusContext |
22 | { |
23 | Q_OBJECT |
24 | Q_PLUGIN_METADATA(IID "org.kde.DBusHelperProxy" ) |
25 | Q_INTERFACES(KAuth::HelperProxy) |
26 | |
27 | QObject *responder; |
28 | QString m_name; |
29 | QString m_currentAction; |
30 | bool m_stopRequest; |
31 | QList<QString> m_actionsInProgress; |
32 | QDBusConnection m_busConnection; |
33 | |
34 | enum SignalType { |
35 | ActionStarted, // The blob argument is empty |
36 | ActionPerformed, // The blob argument contains the ActionReply |
37 | DebugMessage, // The blob argument contains the debug level and the message (in this order) |
38 | ProgressStepIndicator, // The blob argument contains the step indicator |
39 | ProgressStepData, // The blob argument contains the QVariantMap |
40 | }; |
41 | |
42 | public: |
43 | DBusHelperProxy(); |
44 | DBusHelperProxy(const QDBusConnection &busConnection); |
45 | |
46 | ~DBusHelperProxy() override; |
47 | |
48 | virtual void |
49 | executeAction(const QString &action, const QString &helperID, const DetailsMap &details, const QVariantMap &arguments, int timeout = -1) override; |
50 | void stopAction(const QString &action, const QString &helperID) override; |
51 | |
52 | bool initHelper(const QString &name) override; |
53 | void setHelperResponder(QObject *o) override; |
54 | bool hasToStopAction() override; |
55 | void sendDebugMessage(int level, const char *msg) override; |
56 | void sendProgressStep(int step) override; |
57 | void sendProgressStepData(const QVariantMap &data) override; |
58 | |
59 | int callerUid() const override; |
60 | |
61 | public Q_SLOTS: |
62 | void stopAction(const QString &action); |
63 | QByteArray performAction(const QString &action, const QByteArray &callerID, const QVariantMap &details, QByteArray arguments); |
64 | |
65 | Q_SIGNALS: |
66 | void remoteSignal(int type, const QString &action, const QByteArray &blob); // This signal is sent from the helper to the app |
67 | |
68 | private Q_SLOTS: |
69 | void remoteSignalReceived(int type, const QString &action, QByteArray blob); |
70 | |
71 | private: |
72 | bool isCallerAuthorized(const QString &action, const QByteArray &callerID, const QVariantMap &details); |
73 | }; |
74 | |
75 | } // namespace Auth |
76 | |
77 | #endif |
78 | |