Qt: Add static factor methods for protocol
[gpgme.git] / lang / qt / src / qgpgmebackend.h
1 /*
2     qgpgmebackend.h
3
4     This file is part of qgpgme, the Qt API binding for gpgme
5     Copyright (c) 2004,2005 Klarälvdalens Datakonsult AB
6     Copyright (c) 2016 Intevation GmbH
7
8     Libkleopatra is free software; you can redistribute it and/or
9     modify it under the terms of the GNU General Public License as
10     published by the Free Software Foundation; either version 2 of the
11     License, or (at your option) any later version.
12
13     Libkleopatra is distributed in the hope that it will be useful,
14     but WITHOUT ANY WARRANTY; without even the implied warranty of
15     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16     General Public License for more details.
17
18     You should have received a copy of the GNU General Public License
19     along with this program; if not, write to the Free Software
20     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
21
22     In addition, as a special exception, the copyright holders give
23     permission to link the code of this program with any edition of
24     the Qt library by Trolltech AS, Norway (or with modified versions
25     of Qt that use the same license as Qt), and distribute linked
26     combinations including the two.  You must obey the GNU General
27     Public License in all respects for all of the code used other than
28     Qt.  If you modify this file, you may extend this exception to
29     your version of the file, but you are not obligated to do so.  If
30     you do not wish to do so, delete this exception statement from
31     your version.
32 */
33
34 #ifndef __QGPGME_QGPGMEBACKEND_H__
35 #define __QGPGME_QGPGMEBACKEND_H__
36
37 #include <QString>
38
39 namespace QGpgME
40 {
41 class CryptoConfig;
42 class KeyListJob;
43 class ListAllKeysJob;
44 class KeyGenerationJob;
45 class ImportJob;
46 class ImportFromKeyserverJob;
47 class ExportJob;
48 class DownloadJob;
49 class DeleteJob;
50 class EncryptJob;
51 class DecryptJob;
52 class SignJob;
53 class SignKeyJob;
54 class VerifyDetachedJob;
55 class VerifyOpaqueJob;
56 class SignEncryptJob;
57 class DecryptVerifyJob;
58 class RefreshKeysJob;
59 class ChangeExpiryJob;
60 class ChangeOwnerTrustJob;
61 class ChangePasswdJob;
62 class AddUserIDJob;
63 class SpecialJob;
64 }
65
66 class QString;
67 class QVariant;
68 template <typename T_Key, typename T_Value> class QMap;
69
70 namespace QGpgME
71 {
72 class CryptoConfig;
73 class Protocol;
74
75 /** Obtain a reference to the OpenPGP Protocol.
76  *
77  * The reference is to a static object.
78  * @returns Refrence to the OpenPGP Protocol.
79  */
80 Protocol *openpgp();
81
82 /** Obtain a reference to the smime Protocol.
83  *
84  * The reference is to a static object.
85  * @returns Refrence to the smime Protocol.
86  */
87 Protocol *smime();
88
89 class QGpgMEBackend
90 {
91 public:
92     QGpgMEBackend();
93     ~QGpgMEBackend();
94
95     QString name() const;
96     QString displayName() const;
97
98     CryptoConfig *config() const;
99
100     Protocol *openpgp() const;
101     Protocol *smime() const;
102     Protocol *protocol(const char *name) const;
103
104     static const char OpenPGP[];
105     static const char SMIME[];
106
107     bool checkForOpenPGP(QString *reason = Q_NULLPTR) const;
108     bool checkForSMIME(QString *reason = Q_NULLPTR) const;
109     bool checkForProtocol(const char *name, QString *reason) const;
110
111     bool supportsOpenPGP() const
112     {
113         return true;
114     }
115     bool supportsSMIME() const
116     {
117         return true;
118     }
119     bool supportsProtocol(const char *name) const;
120
121     const char *enumerateProtocols(int i) const;
122
123 private:
124     mutable QGpgME::CryptoConfig *mCryptoConfig;
125     mutable Protocol *mOpenPGPProtocol;
126     mutable Protocol *mSMIMEProtocol;
127 };
128
129 class Protocol
130 {
131 public:
132     virtual ~Protocol() {}
133
134     virtual QString name() const = 0;
135
136     virtual QString displayName() const = 0;
137
138     virtual KeyListJob           *keyListJob(bool remote = false, bool includeSigs = false, bool validate = false) const = 0;
139     virtual ListAllKeysJob       *listAllKeysJob(bool includeSigs = false, bool validate = false) const = 0;
140     virtual EncryptJob           *encryptJob(bool armor = false, bool textmode = false) const = 0;
141     virtual DecryptJob           *decryptJob() const = 0;
142     virtual SignJob              *signJob(bool armor = false, bool textMode = false) const = 0;
143     virtual VerifyDetachedJob    *verifyDetachedJob(bool textmode = false) const = 0;
144     virtual VerifyOpaqueJob      *verifyOpaqueJob(bool textmode = false) const = 0;
145     virtual KeyGenerationJob     *keyGenerationJob() const = 0;
146     virtual ImportJob            *importJob() const = 0;
147     virtual ImportFromKeyserverJob *importFromKeyserverJob() const = 0;
148     virtual ExportJob            *publicKeyExportJob(bool armor = false) const = 0;
149     // @param charset the encoding of the passphrase in the exported file
150     virtual ExportJob            *secretKeyExportJob(bool armor = false, const QString &charset = QString()) const = 0;
151     virtual DownloadJob          *downloadJob(bool armor = false) const = 0;
152     virtual DeleteJob            *deleteJob() const = 0;
153     virtual SignEncryptJob       *signEncryptJob(bool armor = false, bool textMode = false) const = 0;
154     virtual DecryptVerifyJob     *decryptVerifyJob(bool textmode = false) const = 0;
155     virtual RefreshKeysJob       *refreshKeysJob() const = 0;
156     virtual ChangeExpiryJob      *changeExpiryJob() const = 0;
157     virtual SignKeyJob           *signKeyJob() const = 0;
158     virtual ChangePasswdJob      *changePasswdJob() const = 0;
159     virtual ChangeOwnerTrustJob  *changeOwnerTrustJob() const = 0;
160     virtual AddUserIDJob         *addUserIDJob() const = 0;
161     virtual SpecialJob           *specialJob(const char *type, const QMap<QString, QVariant> &args) const = 0;
162 };
163
164 }
165
166 #endif // __QGPGME_QGPGMEBACKEND_H__