aboutsummaryrefslogtreecommitdiffstats
path: root/lang/qt/src
diff options
context:
space:
mode:
Diffstat (limited to 'lang/qt/src')
-rw-r--r--lang/qt/src/protocol.h4
-rw-r--r--lang/qt/src/protocol_p.h12
-rw-r--r--lang/qt/src/qgpgmeexportjob.cpp24
-rw-r--r--lang/qt/src/qgpgmeexportjob.h14
4 files changed, 36 insertions, 18 deletions
diff --git a/lang/qt/src/protocol.h b/lang/qt/src/protocol.h
index cffd53b2..35789414 100644
--- a/lang/qt/src/protocol.h
+++ b/lang/qt/src/protocol.h
@@ -126,8 +126,8 @@ public:
virtual ImportJob *importJob() const = 0;
virtual ImportFromKeyserverJob *importFromKeyserverJob() const = 0;
virtual ExportJob *publicKeyExportJob(bool armor = false) const = 0;
- // @param charset the encoding of the passphrase in the exported file
- virtual ExportJob *secretKeyExportJob(bool armor = false, const QString &charset = QString()) const = 0;
+ // the second parameter is ignored; the passphrase in the exported file is always utf-8 encoded
+ virtual ExportJob *secretKeyExportJob(bool armor = false, const QString & = QString()) const = 0;
virtual DownloadJob *downloadJob(bool armor = false) const = 0;
virtual DeleteJob *deleteJob() const = 0;
virtual SignEncryptJob *signEncryptJob(bool armor = false, bool textMode = false) const = 0;
diff --git a/lang/qt/src/protocol_p.h b/lang/qt/src/protocol_p.h
index da5ce011..054fec6e 100644
--- a/lang/qt/src/protocol_p.h
+++ b/lang/qt/src/protocol_p.h
@@ -5,6 +5,8 @@
Copyright (c) 2004,2005 Klarälvdalens Datakonsult AB
Copyright (c) 2016 by Bundesamt für Sicherheit in der Informationstechnik
Software engineering by Intevation GmbH
+ Copyright (c) 2022 by g10 Code GmbH
+ Software engineering by Ingo Klöcker <[email protected]>
QGpgME is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@@ -42,7 +44,6 @@
#include "qgpgmedecryptverifyjob.h"
#include "qgpgmerefreshkeysjob.h"
#include "qgpgmedeletejob.h"
-#include "qgpgmesecretkeyexportjob.h"
#include "qgpgmedownloadjob.h"
#include "qgpgmesignencryptjob.h"
#include "qgpgmeencryptjob.h"
@@ -242,14 +243,15 @@ public:
return new QGpgME::QGpgMEExportJob(context);
}
- QGpgME::ExportJob *secretKeyExportJob(bool armor, const QString &charset) const Q_DECL_OVERRIDE
+ QGpgME::ExportJob *secretKeyExportJob(bool armor, const QString &) const Q_DECL_OVERRIDE
{
- if (mProtocol != GpgME::CMS) { // fixme: add support for gpg, too
+ GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol);
+ if (!context) {
return nullptr;
}
- // this operation is not supported by gpgme, so we have to call gpgsm ourselves:
- return new QGpgME::QGpgMESecretKeyExportJob(armor, charset);
+ context->setArmor(armor);
+ return new QGpgME::QGpgMEExportJob(context, GpgME::Context::ExportSecret);
}
QGpgME::RefreshKeysJob *refreshKeysJob() const Q_DECL_OVERRIDE
diff --git a/lang/qt/src/qgpgmeexportjob.cpp b/lang/qt/src/qgpgmeexportjob.cpp
index bf3297a7..e9bc0a4d 100644
--- a/lang/qt/src/qgpgmeexportjob.cpp
+++ b/lang/qt/src/qgpgmeexportjob.cpp
@@ -5,6 +5,8 @@
Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB
Copyright (c) 2016 by Bundesamt für Sicherheit in der Informationstechnik
Software engineering by Intevation GmbH
+ Copyright (c) 2022 by g10 Code GmbH
+ Software engineering by Ingo Klöcker <[email protected]>
QGpgME is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@@ -52,23 +54,28 @@ using namespace QGpgME;
using namespace GpgME;
QGpgMEExportJob::QGpgMEExportJob(Context *context)
- : mixin_type(context),
- m_flags(0)
+ : QGpgMEExportJob{context, 0}
+{
+}
+
+QGpgMEExportJob::QGpgMEExportJob(Context *context, unsigned int forcedMode)
+ : mixin_type{context}
+ , m_exportMode{forcedMode}
+ , m_additionalExportModeFlags{0}
{
lateInitialization();
}
-QGpgMEExportJob::~QGpgMEExportJob() {}
+QGpgMEExportJob::~QGpgMEExportJob() = default;
-static QGpgMEExportJob::result_type export_qba(Context *ctx, const QStringList &patterns, unsigned int flags)
+static QGpgMEExportJob::result_type export_qba(Context *ctx, const QStringList &patterns, unsigned int mode)
{
-
const _detail::PatternConverter pc(patterns);
QGpgME::QByteArrayDataProvider dp;
Data data(&dp);
- const Error err = ctx->exportPublicKeys(pc.patterns(), data, flags);
+ const Error err = ctx->exportKeys(pc.patterns(), data, mode);
Error ae;
const QString log = _detail::audit_log_as_html(ctx, ae);
return std::make_tuple(err, dp.data(), log, ae);
@@ -76,13 +83,14 @@ static QGpgMEExportJob::result_type export_qba(Context *ctx, const QStringList &
Error QGpgMEExportJob::start(const QStringList &patterns)
{
- run(std::bind(&export_qba, std::placeholders::_1, patterns, m_flags));
+ auto mode = m_exportMode | m_additionalExportModeFlags;
+ run(std::bind(&export_qba, std::placeholders::_1, patterns, mode));
return Error();
}
void QGpgMEExportJob::setExportFlags(unsigned int flags)
{
- m_flags = flags;
+ m_additionalExportModeFlags = flags;
}
/* For ABI compat not pure virtual. */
diff --git a/lang/qt/src/qgpgmeexportjob.h b/lang/qt/src/qgpgmeexportjob.h
index 3f6bd0e2..b77bad1c 100644
--- a/lang/qt/src/qgpgmeexportjob.h
+++ b/lang/qt/src/qgpgmeexportjob.h
@@ -5,6 +5,8 @@
Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB
Copyright (c) 2016 by Bundesamt für Sicherheit in der Informationstechnik
Software engineering by Intevation GmbH
+ Copyright (c) 2022 by g10 Code GmbH
+ Software engineering by Ingo Klöcker <[email protected]>
QGpgME is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@@ -56,15 +58,21 @@ public Q_SLOTS:
#endif
public:
explicit QGpgMEExportJob(GpgME::Context *context);
- ~QGpgMEExportJob();
+ // Creates an export job with forced export mode @p exportMode. The
+ // export mode flags set with @p exportMode cannot be overridden with
+ // setExportFlags.
+ explicit QGpgMEExportJob(GpgME::Context *context, unsigned int exportMode);
+ ~QGpgMEExportJob() Q_DECL_OVERRIDE;
/* from ExportJob */
- void setExportFlags (unsigned int flags) Q_DECL_OVERRIDE;
+ void setExportFlags(unsigned int flags) Q_DECL_OVERRIDE;
/* from ExportJob */
GpgME::Error start(const QStringList &patterns) Q_DECL_OVERRIDE;
+
private:
- unsigned int m_flags;
+ unsigned int m_exportMode;
+ unsigned int m_additionalExportModeFlags;
};
}