1 | /* |
2 | SPDX-FileCopyrightText: 2009 Pino Toscano <pino@kde.org> |
3 | SPDX-FileCopyrightText: 2009-2012 Lukáš Tinkl <ltinkl@redhat.com> |
4 | |
5 | SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL |
6 | */ |
7 | |
8 | #ifndef UDISKSSTORAGEACCESS_H |
9 | #define UDISKSSTORAGEACCESS_H |
10 | |
11 | #include "udisksdeviceinterface.h" |
12 | #include <solid/devices/ifaces/storageaccess.h> |
13 | |
14 | #include <QDBusError> |
15 | #include <QDBusMessage> |
16 | |
17 | namespace Solid |
18 | { |
19 | namespace Backends |
20 | { |
21 | namespace UDisks2 |
22 | { |
23 | class StorageAccess : public DeviceInterface, virtual public Solid::Ifaces::StorageAccess |
24 | { |
25 | Q_OBJECT |
26 | Q_INTERFACES(Solid::Ifaces::StorageAccess) |
27 | |
28 | public: |
29 | StorageAccess(Device *device); |
30 | ~StorageAccess() override; |
31 | |
32 | bool isAccessible() const override; |
33 | QString filePath() const override; |
34 | bool isIgnored() const override; |
35 | bool setup() override; |
36 | bool teardown() override; |
37 | bool isEncrypted() const override; |
38 | |
39 | bool canCheck() const override; |
40 | bool check() override; |
41 | bool canRepair() const override; |
42 | bool repair() override; |
43 | |
44 | Q_SIGNALS: |
45 | void accessibilityChanged(bool accessible, const QString &udi) override; |
46 | void setupDone(Solid::ErrorType error, QVariant errorData, const QString &udi) override; |
47 | void teardownDone(Solid::ErrorType error, QVariant errorData, const QString &udi) override; |
48 | void setupRequested(const QString &udi) override; |
49 | void teardownRequested(const QString &udi) override; |
50 | void repairRequested(const QString &udi) override; |
51 | void repairDone(Solid::ErrorType error, QVariant errorData, const QString &udi) override; |
52 | |
53 | public Q_SLOTS: |
54 | Q_SCRIPTABLE Q_NOREPLY void passphraseReply(const QString &passphrase); |
55 | |
56 | private Q_SLOTS: |
57 | void slotDBusReply(const QDBusMessage &reply); |
58 | void slotDBusError(const QDBusError &error); |
59 | |
60 | void connectDBusSignals(); |
61 | |
62 | void slotSetupRequested(); |
63 | void slotSetupDone(int error, const QString &errorString); |
64 | void slotTeardownRequested(); |
65 | void slotTeardownDone(int error, const QString &errorString); |
66 | void slotRepairRequested(); |
67 | void slotRepairDone(int error, const QString &errorString); |
68 | |
69 | void checkAccessibility(); |
70 | |
71 | private: |
72 | /// @return true if this device is luks and unlocked |
73 | bool isLuksDevice() const; |
74 | |
75 | void updateCache(); |
76 | |
77 | bool mount(); |
78 | bool unmount(); |
79 | |
80 | bool requestPassphrase(); |
81 | void callCryptoSetup(const QString &passphrase); |
82 | bool callCryptoTeardown(bool actOnParent = false); |
83 | |
84 | QString generateReturnObjectPath(); |
85 | QString clearTextPath() const; |
86 | |
87 | QString dbusPath() const; |
88 | |
89 | private: |
90 | bool m_isAccessible; |
91 | bool m_setupInProgress; |
92 | bool m_teardownInProgress; |
93 | bool m_repairInProgress; |
94 | bool m_passphraseRequested; |
95 | QString m_lastReturnObject; |
96 | |
97 | static const int s_unmountTimeout = 0x7fffffff; |
98 | }; |
99 | } |
100 | } |
101 | } |
102 | |
103 | #endif // UDISKSSTORAGEACCESS_H |
104 | |