diff options
Diffstat (limited to 'lang/qt/src/qgpgmebackend.cpp')
-rw-r--r-- | lang/qt/src/qgpgmebackend.cpp | 346 |
1 files changed, 11 insertions, 335 deletions
diff --git a/lang/qt/src/qgpgmebackend.cpp b/lang/qt/src/qgpgmebackend.cpp index 27cd178c..797e58a6 100644 --- a/lang/qt/src/qgpgmebackend.cpp +++ b/lang/qt/src/qgpgmebackend.cpp @@ -33,351 +33,18 @@ #include "qgpgmebackend.h" -#include "qgpgmenewcryptoconfig.h" - -#include "qgpgmekeygenerationjob.h" -#include "qgpgmekeylistjob.h" -#include "qgpgmelistallkeysjob.h" -#include "qgpgmedecryptjob.h" -#include "qgpgmedecryptverifyjob.h" -#include "qgpgmerefreshkeysjob.h" -#include "qgpgmedeletejob.h" -#include "qgpgmesecretkeyexportjob.h" -#include "qgpgmedownloadjob.h" -#include "qgpgmesignencryptjob.h" -#include "qgpgmeencryptjob.h" -#include "qgpgmesignjob.h" -#include "qgpgmesignkeyjob.h" -#include "qgpgmeexportjob.h" -#include "qgpgmeverifydetachedjob.h" -#include "qgpgmeimportjob.h" -#include "qgpgmeimportfromkeyserverjob.h" -#include "qgpgmeverifyopaquejob.h" -#include "qgpgmechangeexpiryjob.h" -#include "qgpgmechangeownertrustjob.h" -#include "qgpgmechangepasswdjob.h" -#include "qgpgmeadduseridjob.h" #include "error.h" #include "engineinfo.h" +#include "protocol_p.h" + #include <QFile> #include <QString> const char QGpgME::QGpgMEBackend::OpenPGP[] = "OpenPGP"; const char QGpgME::QGpgMEBackend::SMIME[] = "SMIME"; -namespace -{ - -class Protocol : public QGpgME::Protocol -{ - GpgME::Protocol mProtocol; -public: - explicit Protocol(GpgME::Protocol proto) : mProtocol(proto) {} - - QString name() const Q_DECL_OVERRIDE - { - switch (mProtocol) { - case GpgME::OpenPGP: return QStringLiteral("OpenPGP"); - case GpgME::CMS: return QStringLiteral("SMIME"); - default: return QString(); - } - } - - QString displayName() const Q_DECL_OVERRIDE - { - // ah (2.4.16): Where is this used and isn't this inverted - // with name - switch (mProtocol) { - case GpgME::OpenPGP: return QStringLiteral("gpg"); - case GpgME::CMS: return QStringLiteral("gpgsm"); - default: return QStringLiteral("unknown"); - } - } - - QGpgME::SpecialJob *specialJob(const char *, const QMap<QString, QVariant> &) const Q_DECL_OVERRIDE - { - return 0; - } - - QGpgME::KeyListJob *keyListJob(bool remote, bool includeSigs, bool validate) const Q_DECL_OVERRIDE - { - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - - unsigned int mode = context->keyListMode(); - if (remote) { - mode |= GpgME::Extern; - mode &= ~GpgME::Local; - } else { - mode |= GpgME::Local; - mode &= ~GpgME::Extern; - } - if (includeSigs) { - mode |= GpgME::Signatures; - } - if (validate) { - mode |= GpgME::Validate; - } - context->setKeyListMode(mode); - return new QGpgME::QGpgMEKeyListJob(context); - } - - QGpgME::ListAllKeysJob *listAllKeysJob(bool includeSigs, bool validate) const Q_DECL_OVERRIDE - { - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - - unsigned int mode = context->keyListMode(); - mode |= GpgME::Local; - mode &= ~GpgME::Extern; - if (includeSigs) { - mode |= GpgME::Signatures; - } - if (validate) { - mode |= GpgME::Validate; - /* Setting the context to offline mode disables CRL / OCSP checks in - this Job. Otherwise we would try to fetch the CRL's for all CMS - keys in the users keyring because GpgME::Validate includes remote - resources by default in the validity check. - This setting only has any effect if gpgsm >= 2.1.6 is used. - */ - context->setOffline(true); - } - context->setKeyListMode(mode); - return new QGpgME::QGpgMEListAllKeysJob(context); - } - - QGpgME::EncryptJob *encryptJob(bool armor, bool textmode) const Q_DECL_OVERRIDE - { - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - - context->setArmor(armor); - context->setTextMode(textmode); - return new QGpgME::QGpgMEEncryptJob(context); - } - - QGpgME::DecryptJob *decryptJob() const Q_DECL_OVERRIDE - { - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - return new QGpgME::QGpgMEDecryptJob(context); - } - - QGpgME::SignJob *signJob(bool armor, bool textMode) const Q_DECL_OVERRIDE - { - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - - context->setArmor(armor); - context->setTextMode(textMode); - return new QGpgME::QGpgMESignJob(context); - } - - QGpgME::VerifyDetachedJob *verifyDetachedJob(bool textMode) const Q_DECL_OVERRIDE - { - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - - context->setTextMode(textMode); - return new QGpgME::QGpgMEVerifyDetachedJob(context); - } - - QGpgME::VerifyOpaqueJob *verifyOpaqueJob(bool textMode) const Q_DECL_OVERRIDE - { - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - - context->setTextMode(textMode); - return new QGpgME::QGpgMEVerifyOpaqueJob(context); - } - - QGpgME::KeyGenerationJob *keyGenerationJob() const Q_DECL_OVERRIDE - { - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - return new QGpgME::QGpgMEKeyGenerationJob(context); - } - - QGpgME::ImportJob *importJob() const Q_DECL_OVERRIDE - { - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - return new QGpgME::QGpgMEImportJob(context); - } - - QGpgME::ImportFromKeyserverJob *importFromKeyserverJob() const Q_DECL_OVERRIDE - { - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - return new QGpgME::QGpgMEImportFromKeyserverJob(context); - } - - QGpgME::ExportJob *publicKeyExportJob(bool armor) const Q_DECL_OVERRIDE - { - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - - context->setArmor(armor); - return new QGpgME::QGpgMEExportJob(context); - } - - QGpgME::ExportJob *secretKeyExportJob(bool armor, const QString &charset) const Q_DECL_OVERRIDE - { - if (mProtocol != GpgME::CMS) { // fixme: add support for gpg, too - return 0; - } - - // this operation is not supported by gpgme, so we have to call gpgsm ourselves: - return new QGpgME::QGpgMESecretKeyExportJob(armor, charset); - } - - QGpgME::RefreshKeysJob *refreshKeysJob() const Q_DECL_OVERRIDE - { - if (mProtocol != GpgME::CMS) { // fixme: add support for gpg, too - return 0; - } - - // this operation is not supported by gpgme, so we have to call gpgsm ourselves: - return new QGpgME::QGpgMERefreshKeysJob(); - } - - QGpgME::DownloadJob *downloadJob(bool armor) const Q_DECL_OVERRIDE - { - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - - context->setArmor(armor); - // this is the hackish interface for downloading from keyserers currently: - context->setKeyListMode(GpgME::Extern); - return new QGpgME::QGpgMEDownloadJob(context); - } - - QGpgME::DeleteJob *deleteJob() const Q_DECL_OVERRIDE - { - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - return new QGpgME::QGpgMEDeleteJob(context); - } - - QGpgME::SignEncryptJob *signEncryptJob(bool armor, bool textMode) const Q_DECL_OVERRIDE - { - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - - context->setArmor(armor); - context->setTextMode(textMode); - return new QGpgME::QGpgMESignEncryptJob(context); - } - - QGpgME::DecryptVerifyJob *decryptVerifyJob(bool textMode) const Q_DECL_OVERRIDE - { - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - - context->setTextMode(textMode); - return new QGpgME::QGpgMEDecryptVerifyJob(context); - } - - QGpgME::ChangeExpiryJob *changeExpiryJob() const Q_DECL_OVERRIDE - { - if (mProtocol != GpgME::OpenPGP) { - return 0; // only supported by gpg - } - - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - return new QGpgME::QGpgMEChangeExpiryJob(context); - } - - QGpgME::ChangePasswdJob *changePasswdJob() const Q_DECL_OVERRIDE - { - if (!GpgME::hasFeature(GpgME::PasswdFeature, 0)) { - return 0; - } - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - return new QGpgME::QGpgMEChangePasswdJob(context); - } - - QGpgME::SignKeyJob *signKeyJob() const Q_DECL_OVERRIDE - { - if (mProtocol != GpgME::OpenPGP) { - return 0; // only supported by gpg - } - - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - return new QGpgME::QGpgMESignKeyJob(context); - } - - QGpgME::ChangeOwnerTrustJob *changeOwnerTrustJob() const Q_DECL_OVERRIDE - { - if (mProtocol != GpgME::OpenPGP) { - return 0; // only supported by gpg - } - - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - return new QGpgME::QGpgMEChangeOwnerTrustJob(context); - } - - QGpgME::AddUserIDJob *addUserIDJob() const Q_DECL_OVERRIDE - { - if (mProtocol != GpgME::OpenPGP) { - return 0; // only supported by gpg - } - - GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); - if (!context) { - return 0; - } - return new QGpgME::QGpgMEAddUserIDJob(context); - } - -}; - -} QGpgME::QGpgMEBackend::QGpgMEBackend() : mCryptoConfig(0), @@ -510,6 +177,15 @@ const char *QGpgME::QGpgMEBackend::enumerateProtocols(int i) const static QGpgME::QGpgMEBackend *gpgmeBackend; +QGpgME::CryptoConfig *QGpgME::cryptoConfig() +{ + if (!gpgmeBackend) { + gpgmeBackend = new QGpgME::QGpgMEBackend(); + } + return gpgmeBackend->config(); + +} + QGpgME::Protocol *QGpgME::openpgp() { if (!gpgmeBackend) { |