From e158cb38f461261d019c653a5f5e0ca9ddab8d6d Mon Sep 17 00:00:00 2001 From: JinWang An Date: Wed, 1 Dec 2021 16:54:36 +0900 Subject: Imported Upstream version 1.7.0 --- lang/qt/src/AddUserIDJob | 1 + lang/qt/src/ChangeExpiryJob | 1 + lang/qt/src/ChangeOwnerTrustJob | 1 + lang/qt/src/ChangePasswdJob | 1 + lang/qt/src/CryptoConfig | 1 + lang/qt/src/DataProvider | 1 + lang/qt/src/DecryptJob | 1 + lang/qt/src/DecryptVerifyJob | 1 + lang/qt/src/DefaultKeyGenerationJob | 1 + lang/qt/src/DeleteJob | 1 + lang/qt/src/DownloadJob | 1 + lang/qt/src/EncryptJob | 1 + lang/qt/src/ExportJob | 1 + lang/qt/src/HierarchicalKeyKistJob | 1 + lang/qt/src/ImportFromKeyserverJob | 1 + lang/qt/src/ImportJob | 1 + lang/qt/src/Job | 1 + lang/qt/src/KeyForMailboxJob | 1 + lang/qt/src/KeyGenerationJob | 1 + lang/qt/src/KeyListJob | 1 + lang/qt/src/ListAllKeysJob | 1 + lang/qt/src/Makefile.am | 256 ++++++ lang/qt/src/Makefile.in | 1123 ++++++++++++++++++++++++++ lang/qt/src/MultiDeleteJob | 1 + lang/qt/src/Protocol | 1 + lang/qt/src/QGpgMENewCryptoConfig | 1 + lang/qt/src/QGpgmeConfig.cmake.in.in | 107 +++ lang/qt/src/QGpgmeConfigVersion.cmake.in | 31 + lang/qt/src/RefreshKeysJob | 1 + lang/qt/src/SignEncryptJob | 1 + lang/qt/src/SignJob | 1 + lang/qt/src/SignKeyJob | 1 + lang/qt/src/TofuPolicyJob | 1 + lang/qt/src/VerifyDetachedJob | 1 + lang/qt/src/VerifyOpaqueJob | 1 + lang/qt/src/WKSPublishJob | 1 + lang/qt/src/abstractimportjob.h | 64 ++ lang/qt/src/adduseridjob.h | 84 ++ lang/qt/src/changeexpiryjob.h | 84 ++ lang/qt/src/changeownertrustjob.h | 81 ++ lang/qt/src/changepasswdjob.h | 82 ++ lang/qt/src/cryptoconfig.h | 400 +++++++++ lang/qt/src/dataprovider.cpp | 282 +++++++ lang/qt/src/dataprovider.h | 95 +++ lang/qt/src/decryptjob.h | 100 +++ lang/qt/src/decryptverifyjob.h | 105 +++ lang/qt/src/defaultkeygenerationjob.cpp | 125 +++ lang/qt/src/defaultkeygenerationjob.h | 76 ++ lang/qt/src/deletejob.h | 83 ++ lang/qt/src/downloadjob.h | 103 +++ lang/qt/src/encryptjob.h | 136 ++++ lang/qt/src/exportjob.h | 87 ++ lang/qt/src/gpgme_backend_debug.cpp | 10 + lang/qt/src/gpgme_backend_debug.h | 11 + lang/qt/src/hierarchicalkeylistjob.h | 125 +++ lang/qt/src/importfromkeyserverjob.h | 84 ++ lang/qt/src/importjob.h | 83 ++ lang/qt/src/job.cpp | 159 ++++ lang/qt/src/job.h | 92 +++ lang/qt/src/keyformailboxjob.h | 106 +++ lang/qt/src/keygenerationjob.h | 85 ++ lang/qt/src/keylistjob.h | 109 +++ lang/qt/src/listallkeysjob.h | 104 +++ lang/qt/src/multideletejob.h | 107 +++ lang/qt/src/protocol.h | 183 +++++ lang/qt/src/protocol_p.h | 419 ++++++++++ lang/qt/src/qgpgme_export.h | 73 ++ lang/qt/src/qgpgme_version.h.in | 32 + lang/qt/src/qgpgmeadduseridjob.cpp | 80 ++ lang/qt/src/qgpgmeadduseridjob.h | 65 ++ lang/qt/src/qgpgmebackend.cpp | 203 +++++ lang/qt/src/qgpgmebackend.h | 92 +++ lang/qt/src/qgpgmechangeexpiryjob.cpp | 80 ++ lang/qt/src/qgpgmechangeexpiryjob.h | 66 ++ lang/qt/src/qgpgmechangeownertrustjob.cpp | 76 ++ lang/qt/src/qgpgmechangeownertrustjob.h | 65 ++ lang/qt/src/qgpgmechangepasswdjob.cpp | 79 ++ lang/qt/src/qgpgmechangepasswdjob.h | 66 ++ lang/qt/src/qgpgmedecryptjob.cpp | 128 +++ lang/qt/src/qgpgmedecryptjob.h | 84 ++ lang/qt/src/qgpgmedecryptverifyjob.cpp | 135 ++++ lang/qt/src/qgpgmedecryptverifyjob.h | 89 ++ lang/qt/src/qgpgmedeletejob.cpp | 65 ++ lang/qt/src/qgpgmedeletejob.h | 71 ++ lang/qt/src/qgpgmedownloadjob.cpp | 100 +++ lang/qt/src/qgpgmedownloadjob.h | 69 ++ lang/qt/src/qgpgmeencryptjob.cpp | 170 ++++ lang/qt/src/qgpgmeencryptjob.h | 109 +++ lang/qt/src/qgpgmeexportjob.cpp | 76 ++ lang/qt/src/qgpgmeexportjob.h | 66 ++ lang/qt/src/qgpgmeimportfromkeyserverjob.cpp | 82 ++ lang/qt/src/qgpgmeimportfromkeyserverjob.h | 81 ++ lang/qt/src/qgpgmeimportjob.cpp | 85 ++ lang/qt/src/qgpgmeimportjob.h | 81 ++ lang/qt/src/qgpgmekeyformailboxjob.cpp | 138 ++++ lang/qt/src/qgpgmekeyformailboxjob.h | 84 ++ lang/qt/src/qgpgmekeygenerationjob.cpp | 71 ++ lang/qt/src/qgpgmekeygenerationjob.h | 72 ++ lang/qt/src/qgpgmekeylistjob.cpp | 172 ++++ lang/qt/src/qgpgmekeylistjob.h | 88 ++ lang/qt/src/qgpgmelistallkeysjob.cpp | 168 ++++ lang/qt/src/qgpgmelistallkeysjob.h | 86 ++ lang/qt/src/qgpgmenewcryptoconfig.cpp | 738 +++++++++++++++++ lang/qt/src/qgpgmenewcryptoconfig.h | 189 +++++ lang/qt/src/qgpgmerefreshkeysjob.cpp | 225 ++++++ lang/qt/src/qgpgmerefreshkeysjob.h | 79 ++ lang/qt/src/qgpgmesecretkeyexportjob.cpp | 142 ++++ lang/qt/src/qgpgmesecretkeyexportjob.h | 81 ++ lang/qt/src/qgpgmesignencryptjob.cpp | 171 ++++ lang/qt/src/qgpgmesignencryptjob.h | 121 +++ lang/qt/src/qgpgmesignjob.cpp | 163 ++++ lang/qt/src/qgpgmesignjob.h | 101 +++ lang/qt/src/qgpgmesignkeyjob.cpp | 125 +++ lang/qt/src/qgpgmesignkeyjob.h | 94 +++ lang/qt/src/qgpgmetofupolicyjob.cpp | 65 ++ lang/qt/src/qgpgmetofupolicyjob.h | 65 ++ lang/qt/src/qgpgmeverifydetachedjob.cpp | 118 +++ lang/qt/src/qgpgmeverifydetachedjob.h | 85 ++ lang/qt/src/qgpgmeverifyopaquejob.cpp | 125 +++ lang/qt/src/qgpgmeverifyopaquejob.h | 84 ++ lang/qt/src/qgpgmewkspublishjob.cpp | 189 +++++ lang/qt/src/qgpgmewkspublishjob.h | 70 ++ lang/qt/src/refreshkeysjob.h | 94 +++ lang/qt/src/signencryptjob.h | 153 ++++ lang/qt/src/signjob.h | 122 +++ lang/qt/src/signkeyjob.h | 117 +++ lang/qt/src/specialjob.h | 91 +++ lang/qt/src/threadedjobmixin.cpp | 110 +++ lang/qt/src/threadedjobmixin.h | 272 +++++++ lang/qt/src/tofupolicyjob.h | 80 ++ lang/qt/src/verifydetachedjob.h | 99 +++ lang/qt/src/verifyopaquejob.h | 101 +++ lang/qt/src/wkspublishjob.h | 101 +++ 133 files changed, 12930 insertions(+) create mode 100644 lang/qt/src/AddUserIDJob create mode 100644 lang/qt/src/ChangeExpiryJob create mode 100644 lang/qt/src/ChangeOwnerTrustJob create mode 100644 lang/qt/src/ChangePasswdJob create mode 100644 lang/qt/src/CryptoConfig create mode 100644 lang/qt/src/DataProvider create mode 100644 lang/qt/src/DecryptJob create mode 100644 lang/qt/src/DecryptVerifyJob create mode 100644 lang/qt/src/DefaultKeyGenerationJob create mode 100644 lang/qt/src/DeleteJob create mode 100644 lang/qt/src/DownloadJob create mode 100644 lang/qt/src/EncryptJob create mode 100644 lang/qt/src/ExportJob create mode 100644 lang/qt/src/HierarchicalKeyKistJob create mode 100644 lang/qt/src/ImportFromKeyserverJob create mode 100644 lang/qt/src/ImportJob create mode 100644 lang/qt/src/Job create mode 100644 lang/qt/src/KeyForMailboxJob create mode 100644 lang/qt/src/KeyGenerationJob create mode 100644 lang/qt/src/KeyListJob create mode 100644 lang/qt/src/ListAllKeysJob create mode 100644 lang/qt/src/Makefile.am create mode 100644 lang/qt/src/Makefile.in create mode 100644 lang/qt/src/MultiDeleteJob create mode 100644 lang/qt/src/Protocol create mode 100644 lang/qt/src/QGpgMENewCryptoConfig create mode 100644 lang/qt/src/QGpgmeConfig.cmake.in.in create mode 100644 lang/qt/src/QGpgmeConfigVersion.cmake.in create mode 100644 lang/qt/src/RefreshKeysJob create mode 100644 lang/qt/src/SignEncryptJob create mode 100644 lang/qt/src/SignJob create mode 100644 lang/qt/src/SignKeyJob create mode 100644 lang/qt/src/TofuPolicyJob create mode 100644 lang/qt/src/VerifyDetachedJob create mode 100644 lang/qt/src/VerifyOpaqueJob create mode 100644 lang/qt/src/WKSPublishJob create mode 100644 lang/qt/src/abstractimportjob.h create mode 100644 lang/qt/src/adduseridjob.h create mode 100644 lang/qt/src/changeexpiryjob.h create mode 100644 lang/qt/src/changeownertrustjob.h create mode 100644 lang/qt/src/changepasswdjob.h create mode 100644 lang/qt/src/cryptoconfig.h create mode 100644 lang/qt/src/dataprovider.cpp create mode 100644 lang/qt/src/dataprovider.h create mode 100644 lang/qt/src/decryptjob.h create mode 100644 lang/qt/src/decryptverifyjob.h create mode 100644 lang/qt/src/defaultkeygenerationjob.cpp create mode 100644 lang/qt/src/defaultkeygenerationjob.h create mode 100644 lang/qt/src/deletejob.h create mode 100644 lang/qt/src/downloadjob.h create mode 100644 lang/qt/src/encryptjob.h create mode 100644 lang/qt/src/exportjob.h create mode 100644 lang/qt/src/gpgme_backend_debug.cpp create mode 100644 lang/qt/src/gpgme_backend_debug.h create mode 100644 lang/qt/src/hierarchicalkeylistjob.h create mode 100644 lang/qt/src/importfromkeyserverjob.h create mode 100644 lang/qt/src/importjob.h create mode 100644 lang/qt/src/job.cpp create mode 100644 lang/qt/src/job.h create mode 100644 lang/qt/src/keyformailboxjob.h create mode 100644 lang/qt/src/keygenerationjob.h create mode 100644 lang/qt/src/keylistjob.h create mode 100644 lang/qt/src/listallkeysjob.h create mode 100644 lang/qt/src/multideletejob.h create mode 100644 lang/qt/src/protocol.h create mode 100644 lang/qt/src/protocol_p.h create mode 100644 lang/qt/src/qgpgme_export.h create mode 100644 lang/qt/src/qgpgme_version.h.in create mode 100644 lang/qt/src/qgpgmeadduseridjob.cpp create mode 100644 lang/qt/src/qgpgmeadduseridjob.h create mode 100644 lang/qt/src/qgpgmebackend.cpp create mode 100644 lang/qt/src/qgpgmebackend.h create mode 100644 lang/qt/src/qgpgmechangeexpiryjob.cpp create mode 100644 lang/qt/src/qgpgmechangeexpiryjob.h create mode 100644 lang/qt/src/qgpgmechangeownertrustjob.cpp create mode 100644 lang/qt/src/qgpgmechangeownertrustjob.h create mode 100644 lang/qt/src/qgpgmechangepasswdjob.cpp create mode 100644 lang/qt/src/qgpgmechangepasswdjob.h create mode 100644 lang/qt/src/qgpgmedecryptjob.cpp create mode 100644 lang/qt/src/qgpgmedecryptjob.h create mode 100644 lang/qt/src/qgpgmedecryptverifyjob.cpp create mode 100644 lang/qt/src/qgpgmedecryptverifyjob.h create mode 100644 lang/qt/src/qgpgmedeletejob.cpp create mode 100644 lang/qt/src/qgpgmedeletejob.h create mode 100644 lang/qt/src/qgpgmedownloadjob.cpp create mode 100644 lang/qt/src/qgpgmedownloadjob.h create mode 100644 lang/qt/src/qgpgmeencryptjob.cpp create mode 100644 lang/qt/src/qgpgmeencryptjob.h create mode 100644 lang/qt/src/qgpgmeexportjob.cpp create mode 100644 lang/qt/src/qgpgmeexportjob.h create mode 100644 lang/qt/src/qgpgmeimportfromkeyserverjob.cpp create mode 100644 lang/qt/src/qgpgmeimportfromkeyserverjob.h create mode 100644 lang/qt/src/qgpgmeimportjob.cpp create mode 100644 lang/qt/src/qgpgmeimportjob.h create mode 100644 lang/qt/src/qgpgmekeyformailboxjob.cpp create mode 100644 lang/qt/src/qgpgmekeyformailboxjob.h create mode 100644 lang/qt/src/qgpgmekeygenerationjob.cpp create mode 100644 lang/qt/src/qgpgmekeygenerationjob.h create mode 100644 lang/qt/src/qgpgmekeylistjob.cpp create mode 100644 lang/qt/src/qgpgmekeylistjob.h create mode 100644 lang/qt/src/qgpgmelistallkeysjob.cpp create mode 100644 lang/qt/src/qgpgmelistallkeysjob.h create mode 100644 lang/qt/src/qgpgmenewcryptoconfig.cpp create mode 100644 lang/qt/src/qgpgmenewcryptoconfig.h create mode 100644 lang/qt/src/qgpgmerefreshkeysjob.cpp create mode 100644 lang/qt/src/qgpgmerefreshkeysjob.h create mode 100644 lang/qt/src/qgpgmesecretkeyexportjob.cpp create mode 100644 lang/qt/src/qgpgmesecretkeyexportjob.h create mode 100644 lang/qt/src/qgpgmesignencryptjob.cpp create mode 100644 lang/qt/src/qgpgmesignencryptjob.h create mode 100644 lang/qt/src/qgpgmesignjob.cpp create mode 100644 lang/qt/src/qgpgmesignjob.h create mode 100644 lang/qt/src/qgpgmesignkeyjob.cpp create mode 100644 lang/qt/src/qgpgmesignkeyjob.h create mode 100644 lang/qt/src/qgpgmetofupolicyjob.cpp create mode 100644 lang/qt/src/qgpgmetofupolicyjob.h create mode 100644 lang/qt/src/qgpgmeverifydetachedjob.cpp create mode 100644 lang/qt/src/qgpgmeverifydetachedjob.h create mode 100644 lang/qt/src/qgpgmeverifyopaquejob.cpp create mode 100644 lang/qt/src/qgpgmeverifyopaquejob.h create mode 100644 lang/qt/src/qgpgmewkspublishjob.cpp create mode 100644 lang/qt/src/qgpgmewkspublishjob.h create mode 100644 lang/qt/src/refreshkeysjob.h create mode 100644 lang/qt/src/signencryptjob.h create mode 100644 lang/qt/src/signjob.h create mode 100644 lang/qt/src/signkeyjob.h create mode 100644 lang/qt/src/specialjob.h create mode 100644 lang/qt/src/threadedjobmixin.cpp create mode 100644 lang/qt/src/threadedjobmixin.h create mode 100644 lang/qt/src/tofupolicyjob.h create mode 100644 lang/qt/src/verifydetachedjob.h create mode 100644 lang/qt/src/verifyopaquejob.h create mode 100644 lang/qt/src/wkspublishjob.h (limited to 'lang/qt/src') diff --git a/lang/qt/src/AddUserIDJob b/lang/qt/src/AddUserIDJob new file mode 100644 index 0000000..87d82ec --- /dev/null +++ b/lang/qt/src/AddUserIDJob @@ -0,0 +1 @@ +#include "qgpgme/adduseridjob.h" diff --git a/lang/qt/src/ChangeExpiryJob b/lang/qt/src/ChangeExpiryJob new file mode 100644 index 0000000..f5eea6a --- /dev/null +++ b/lang/qt/src/ChangeExpiryJob @@ -0,0 +1 @@ +#include "qgpgme/changeexpiryjob.h" diff --git a/lang/qt/src/ChangeOwnerTrustJob b/lang/qt/src/ChangeOwnerTrustJob new file mode 100644 index 0000000..03635d5 --- /dev/null +++ b/lang/qt/src/ChangeOwnerTrustJob @@ -0,0 +1 @@ +#include "qgpgme/changeownertrustjob.h" diff --git a/lang/qt/src/ChangePasswdJob b/lang/qt/src/ChangePasswdJob new file mode 100644 index 0000000..3660940 --- /dev/null +++ b/lang/qt/src/ChangePasswdJob @@ -0,0 +1 @@ +#include "qgpgme/changepasswdjob.h" diff --git a/lang/qt/src/CryptoConfig b/lang/qt/src/CryptoConfig new file mode 100644 index 0000000..4edbd19 --- /dev/null +++ b/lang/qt/src/CryptoConfig @@ -0,0 +1 @@ +#include "qgpgme/cryptoconfig.h" diff --git a/lang/qt/src/DataProvider b/lang/qt/src/DataProvider new file mode 100644 index 0000000..6a43c1d --- /dev/null +++ b/lang/qt/src/DataProvider @@ -0,0 +1 @@ +#include "qgpgme/dataprovider.h" diff --git a/lang/qt/src/DecryptJob b/lang/qt/src/DecryptJob new file mode 100644 index 0000000..c0f9845 --- /dev/null +++ b/lang/qt/src/DecryptJob @@ -0,0 +1 @@ +#include "qgpgme/decryptjob.h" diff --git a/lang/qt/src/DecryptVerifyJob b/lang/qt/src/DecryptVerifyJob new file mode 100644 index 0000000..e3de1cc --- /dev/null +++ b/lang/qt/src/DecryptVerifyJob @@ -0,0 +1 @@ +#include "qgpgme/decryptverifyjob.h" diff --git a/lang/qt/src/DefaultKeyGenerationJob b/lang/qt/src/DefaultKeyGenerationJob new file mode 100644 index 0000000..1dc8c40 --- /dev/null +++ b/lang/qt/src/DefaultKeyGenerationJob @@ -0,0 +1 @@ +#include "qgpgme/defaultkeygenerationjob.h" diff --git a/lang/qt/src/DeleteJob b/lang/qt/src/DeleteJob new file mode 100644 index 0000000..a2fdc4a --- /dev/null +++ b/lang/qt/src/DeleteJob @@ -0,0 +1 @@ +#include "qgpgme/deletejob.h" diff --git a/lang/qt/src/DownloadJob b/lang/qt/src/DownloadJob new file mode 100644 index 0000000..9b47aac --- /dev/null +++ b/lang/qt/src/DownloadJob @@ -0,0 +1 @@ +#include "qgpgme/downloadjob.h" diff --git a/lang/qt/src/EncryptJob b/lang/qt/src/EncryptJob new file mode 100644 index 0000000..59a878d --- /dev/null +++ b/lang/qt/src/EncryptJob @@ -0,0 +1 @@ +#include "qgpgme/encryptjob.h" diff --git a/lang/qt/src/ExportJob b/lang/qt/src/ExportJob new file mode 100644 index 0000000..1d053fd --- /dev/null +++ b/lang/qt/src/ExportJob @@ -0,0 +1 @@ +#include "qgpgme/exportjob.h" diff --git a/lang/qt/src/HierarchicalKeyKistJob b/lang/qt/src/HierarchicalKeyKistJob new file mode 100644 index 0000000..cd31f48 --- /dev/null +++ b/lang/qt/src/HierarchicalKeyKistJob @@ -0,0 +1 @@ +#include "qgpgme/hierarchicalkeykistjob.h" diff --git a/lang/qt/src/ImportFromKeyserverJob b/lang/qt/src/ImportFromKeyserverJob new file mode 100644 index 0000000..17a5fd6 --- /dev/null +++ b/lang/qt/src/ImportFromKeyserverJob @@ -0,0 +1 @@ +#include "qgpgme/importfromkeyserverjob.h" diff --git a/lang/qt/src/ImportJob b/lang/qt/src/ImportJob new file mode 100644 index 0000000..e5228d7 --- /dev/null +++ b/lang/qt/src/ImportJob @@ -0,0 +1 @@ +#include "qgpgme/importjob.h" diff --git a/lang/qt/src/Job b/lang/qt/src/Job new file mode 100644 index 0000000..3a45ca7 --- /dev/null +++ b/lang/qt/src/Job @@ -0,0 +1 @@ +#include "qgpgme/job.h" diff --git a/lang/qt/src/KeyForMailboxJob b/lang/qt/src/KeyForMailboxJob new file mode 100644 index 0000000..2d2b8cb --- /dev/null +++ b/lang/qt/src/KeyForMailboxJob @@ -0,0 +1 @@ +#include "qgpgme/keyformailboxjob.h" diff --git a/lang/qt/src/KeyGenerationJob b/lang/qt/src/KeyGenerationJob new file mode 100644 index 0000000..1612ba7 --- /dev/null +++ b/lang/qt/src/KeyGenerationJob @@ -0,0 +1 @@ +#include "qgpgme/keygenerationjob.h" diff --git a/lang/qt/src/KeyListJob b/lang/qt/src/KeyListJob new file mode 100644 index 0000000..7366665 --- /dev/null +++ b/lang/qt/src/KeyListJob @@ -0,0 +1 @@ +#include "qgpgme/keylistjob.h" diff --git a/lang/qt/src/ListAllKeysJob b/lang/qt/src/ListAllKeysJob new file mode 100644 index 0000000..8023f8f --- /dev/null +++ b/lang/qt/src/ListAllKeysJob @@ -0,0 +1 @@ +#include "qgpgme/listallkeysjob.h" diff --git a/lang/qt/src/Makefile.am b/lang/qt/src/Makefile.am new file mode 100644 index 0000000..c15da18 --- /dev/null +++ b/lang/qt/src/Makefile.am @@ -0,0 +1,256 @@ +# Makefile.am for GPGMEPP. +# Copyright (C) 2016 Intevation GmbH +# +# This file is part of GPGMEPP. +# +# GPGME-CL is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# GPGME-CL is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA +lib_LTLIBRARIES = libqgpgme.la +EXTRA_DIST = QGpgmeConfig.cmake.in.in QGpgmeConfigVersion.cmake.in \ + gpgme_backend_debug.h qgpgme_version.h.in + +qgpgme_sources = \ + dataprovider.cpp job.cpp qgpgmeadduseridjob.cpp \ + qgpgmebackend.cpp qgpgmechangeexpiryjob.cpp qgpgmechangeownertrustjob.cpp \ + qgpgmechangepasswdjob.cpp qgpgmedecryptjob.cpp \ + qgpgmedecryptverifyjob.cpp qgpgmedeletejob.cpp qgpgmedownloadjob.cpp \ + qgpgmeencryptjob.cpp qgpgmeexportjob.cpp qgpgmeimportfromkeyserverjob.cpp \ + qgpgmeimportjob.cpp qgpgmekeygenerationjob.cpp qgpgmekeylistjob.cpp \ + qgpgmelistallkeysjob.cpp qgpgmenewcryptoconfig.cpp \ + qgpgmerefreshkeysjob.cpp \ + qgpgmesecretkeyexportjob.cpp qgpgmesignencryptjob.cpp \ + qgpgmesignjob.cpp qgpgmesignkeyjob.cpp qgpgmeverifydetachedjob.cpp \ + qgpgmeverifyopaquejob.cpp threadedjobmixin.cpp \ + qgpgmekeyformailboxjob.cpp gpgme_backend_debug.cpp \ + qgpgmetofupolicyjob.cpp \ + defaultkeygenerationjob.cpp qgpgmewkspublishjob.cpp + +# If you add one here make sure that you also add one in camelcase +qgpgme_headers= \ + adduseridjob.h \ + changeexpiryjob.h \ + changeownertrustjob.h \ + changepasswdjob.h \ + dataprovider.h \ + decryptjob.h \ + decryptverifyjob.h \ + downloadjob.h \ + encryptjob.h \ + exportjob.h \ + hierarchicalkeylistjob.h \ + job.h \ + keyformailboxjob.h \ + multideletejob.h \ + protocol.h \ + qgpgme_export.h \ + qgpgmenewcryptoconfig.h \ + signjob.h \ + signkeyjob.h \ + signencryptjob.h \ + verifyopaquejob.h \ + refreshkeysjob.h \ + cryptoconfig.h \ + deletejob.h \ + importfromkeyserverjob.h \ + importjob.h \ + keygenerationjob.h \ + keylistjob.h \ + listallkeysjob.h \ + verifydetachedjob.h \ + defaultkeygenerationjob.h \ + tofupolicyjob.h \ + wkspublishjob.h + +camelcase_headers= \ + AddUserIDJob \ + ChangeExpiryJob \ + ChangeOwnerTrustJob \ + ChangePasswdJob \ + DataProvider \ + DecryptJob \ + DecryptVerifyJob \ + DownloadJob \ + EncryptJob \ + ExportJob \ + HierarchicalKeyKistJob \ + Job \ + MultiDeleteJob \ + Protocol \ + QGpgMENewCryptoConfig \ + SignJob \ + SignKeyJob \ + SignEncryptJob \ + VerifyOpaqueJob \ + RefreshKeysJob \ + CryptoConfig \ + DeleteJob \ + ImportFromKeyserverJob \ + ImportJob \ + KeyGenerationJob \ + KeyListJob \ + ListAllKeysJob \ + VerifyDetachedJob \ + KeyForMailboxJob \ + DefaultKeyGenerationJob \ + WKSPublishJob \ + TofuPolicyJob + +private_qgpgme_headers = \ + qgpgme_export.h \ + abstractimportjob.h \ + protocol_p.h \ + qgpgmeadduseridjob.h \ + qgpgmebackend.h \ + qgpgmechangeexpiryjob.h \ + qgpgmechangeownertrustjob.h \ + qgpgmechangepasswdjob.h \ + qgpgmedecryptjob.h \ + qgpgmedecryptverifyjob.h \ + qgpgmedeletejob.h \ + qgpgmedownloadjob.h \ + qgpgmeencryptjob.h \ + qgpgmeexportjob.h \ + qgpgmeimportfromkeyserverjob.h \ + qgpgmeimportjob.h \ + qgpgmekeygenerationjob.h \ + qgpgmekeylistjob.h \ + qgpgmelistallkeysjob.h \ + qgpgmerefreshkeysjob.h \ + qgpgmesecretkeyexportjob.h \ + qgpgmesignencryptjob.h \ + qgpgmesignjob.h \ + qgpgmesignkeyjob.h \ + qgpgmeverifydetachedjob.h \ + qgpgmeverifyopaquejob.h \ + qgpgmekeyformailboxjob.h \ + qgpgmewkspublishjob.h \ + qgpgmetofupolicyjob.h \ + specialjob.h \ + threadedjobmixin.h + +qgpgme_moc_sources = \ + abstractimportjob.moc \ + adduseridjob.moc \ + changeexpiryjob.moc \ + changeownertrustjob.moc \ + changepasswdjob.moc \ + decryptjob.moc \ + decryptverifyjob.moc \ + deletejob.moc \ + downloadjob.moc \ + encryptjob.moc \ + exportjob.moc \ + hierarchicalkeylistjob.moc \ + importfromkeyserverjob.moc \ + importjob.moc \ + job.moc \ + keygenerationjob.moc \ + keylistjob.moc \ + listallkeysjob.moc \ + multideletejob.moc \ + qgpgmeadduseridjob.moc \ + qgpgmechangeexpiryjob.moc \ + qgpgmechangeownertrustjob.moc \ + qgpgmechangepasswdjob.moc \ + qgpgmedecryptjob.moc \ + qgpgmedecryptverifyjob.moc \ + qgpgmedeletejob.moc \ + qgpgmedownloadjob.moc \ + qgpgmeencryptjob.moc \ + qgpgmeexportjob.moc \ + qgpgmeimportfromkeyserverjob.moc \ + qgpgmeimportjob.moc \ + qgpgmekeygenerationjob.moc \ + qgpgmekeylistjob.moc \ + qgpgmelistallkeysjob.moc \ + qgpgmerefreshkeysjob.moc \ + qgpgmesecretkeyexportjob.moc \ + qgpgmesignencryptjob.moc \ + qgpgmesignjob.moc \ + qgpgmesignkeyjob.moc \ + qgpgmeverifydetachedjob.moc \ + qgpgmeverifyopaquejob.moc \ + qgpgmewkspublishjob.moc \ + tofupolicyjob.moc \ + qgpgmetofupolicyjob.moc \ + refreshkeysjob.moc \ + signencryptjob.moc \ + signjob.moc \ + signkeyjob.moc \ + specialjob.moc \ + verifydetachedjob.moc \ + verifyopaquejob.moc \ + keyformailboxjob.moc \ + wkspublishjob.moc \ + qgpgmekeyformailboxjob.moc \ + defaultkeygenerationjob.moc + +qgpgmeincludedir = $(includedir)/qgpgme +qgpgmeinclude_HEADERS = $(qgpgme_headers) +camelcaseincludedir = $(includedir)/QGpgME +camelcaseinclude_HEADERS = $(camelcase_headers) +nodist_include_HEADERS = qgpgme_version.h + +libqgpgme_la_SOURCES = $(qgpgme_sources) $(qgpgme_headers) $(private_qgpgme_headers) + +AM_CPPFLAGS = -I$(top_srcdir)/lang/cpp/src -I$(top_builddir)/src \ + @GPGME_QT_CFLAGS@ @GPG_ERROR_CFLAGS@ @LIBASSUAN_CFLAGS@ \ + -DBUILDING_QGPGME + +libqgpgme_la_LIBADD = ../../cpp/src/libgpgmepp.la ../../../src/libgpgme.la \ + @LIBASSUAN_LIBS@ @GPGME_QT_LIBS@ +libqgpgme_la_LDFLAGS = -version-info \ + @LIBQGPGME_LT_CURRENT@:@LIBQGPGME_LT_REVISION@:@LIBQGPGME_LT_AGE@ + +if HAVE_W32_SYSTEM +libsuffix=.dll.a +else +libsuffix=.so +endif + +QGpgmeConfig.cmake: QGpgmeConfig.cmake.in + sed -e 's|[@]resolved_libdir@|$(libdir)|g' < "$<" > "$@" + sed -e 's|[@]libsuffix@|$(libsuffix)|g' < "$@" > "$@".2 + mv "$@".2 "$@" + +$(camelcase_headers): Makefile.am + echo -n "#include \"qgpgme/" > "$@" + echo -n "$@" | tr '[:upper:]' '[:lower:]' >> "$@" + echo ".h\"" >> "$@" + +install-cmake-files: QGpgmeConfig.cmake QGpgmeConfigVersion.cmake + -$(INSTALL) -d $(DESTDIR)$(libdir)/cmake/Gpgmepp + $(INSTALL) QGpgmeConfig.cmake \ + $(DESTDIR)$(libdir)/cmake/Gpgmepp/QGpgmeConfig.cmake + $(INSTALL) QGpgmeConfigVersion.cmake \ + $(DESTDIR)$(libdir)/cmake/Gpgmepp/QGpgmeConfigVersion.cmake + +uninstall-cmake-files: + -rm $(DESTDIR)$(libdir)/cmake/Gpgmepp/QGpgmeConfigVersion.cmake + -rm $(DESTDIR)$(libdir)/cmake/Gpgmepp/QGpgmeConfig.cmake + -rmdir $(DESTDIR)$(libdir)/cmake/Gpgmepp/ + +install-data-local: install-cmake-files + +uninstall-local: uninstall-cmake-files + +BUILT_SOURCES = $(qgpgme_moc_sources) $(camelcase_headers) + +CLEANFILES = $(qgpgme_moc_sources) $(camelcase_headers) QGpgmeConfig.cmake + +nodist_libqgpgme_la_SOURCES = $(qgpgme_moc_sources) + +.h.moc: + $(MOC) `test -f '$<' || echo '$(srcdir)/'`$< -o $@ diff --git a/lang/qt/src/Makefile.in b/lang/qt/src/Makefile.in new file mode 100644 index 0000000..d10eca3 --- /dev/null +++ b/lang/qt/src/Makefile.in @@ -0,0 +1,1123 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = lang/qt/src +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/build-aux/mkinstalldirs \ + $(srcdir)/QGpgmeConfig.cmake.in.in \ + $(srcdir)/QGpgmeConfigVersion.cmake.in \ + $(srcdir)/qgpgme_version.h.in $(top_srcdir)/build-aux/depcomp \ + $(camelcaseinclude_HEADERS) $(qgpgmeinclude_HEADERS) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ + $(top_srcdir)/m4/ax_pkg_swig.m4 \ + $(top_srcdir)/m4/ax_python_devel.m4 \ + $(top_srcdir)/m4/glib-2.0.m4 $(top_srcdir)/m4/glibc21.m4 \ + $(top_srcdir)/m4/gnupg-ttyname.m4 \ + $(top_srcdir)/m4/gpg-error.m4 $(top_srcdir)/m4/libassuan.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \ + $(top_srcdir)/m4/qt.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = QGpgmeConfig.cmake.in QGpgmeConfigVersion.cmake \ + qgpgme_version.h +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" \ + "$(DESTDIR)$(camelcaseincludedir)" "$(DESTDIR)$(includedir)" \ + "$(DESTDIR)$(qgpgmeincludedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libqgpgme_la_DEPENDENCIES = ../../cpp/src/libgpgmepp.la \ + ../../../src/libgpgme.la +am__objects_1 = dataprovider.lo job.lo qgpgmeadduseridjob.lo \ + qgpgmebackend.lo qgpgmechangeexpiryjob.lo \ + qgpgmechangeownertrustjob.lo qgpgmechangepasswdjob.lo \ + qgpgmedecryptjob.lo qgpgmedecryptverifyjob.lo \ + qgpgmedeletejob.lo qgpgmedownloadjob.lo qgpgmeencryptjob.lo \ + qgpgmeexportjob.lo qgpgmeimportfromkeyserverjob.lo \ + qgpgmeimportjob.lo qgpgmekeygenerationjob.lo \ + qgpgmekeylistjob.lo qgpgmelistallkeysjob.lo \ + qgpgmenewcryptoconfig.lo qgpgmerefreshkeysjob.lo \ + qgpgmesecretkeyexportjob.lo qgpgmesignencryptjob.lo \ + qgpgmesignjob.lo qgpgmesignkeyjob.lo \ + qgpgmeverifydetachedjob.lo qgpgmeverifyopaquejob.lo \ + threadedjobmixin.lo qgpgmekeyformailboxjob.lo \ + gpgme_backend_debug.lo qgpgmetofupolicyjob.lo \ + defaultkeygenerationjob.lo qgpgmewkspublishjob.lo +am__objects_2 = +am_libqgpgme_la_OBJECTS = $(am__objects_1) $(am__objects_2) \ + $(am__objects_2) +nodist_libqgpgme_la_OBJECTS = $(am__objects_2) +libqgpgme_la_OBJECTS = $(am_libqgpgme_la_OBJECTS) \ + $(nodist_libqgpgme_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libqgpgme_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(libqgpgme_la_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_@AM_V@) +am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) +am__v_CXX_0 = @echo " CXX " $@; +am__v_CXX_1 = +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) +am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) +am__v_CXXLD_0 = @echo " CXXLD " $@; +am__v_CXXLD_1 = +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libqgpgme_la_SOURCES) $(nodist_libqgpgme_la_SOURCES) +DIST_SOURCES = $(libqgpgme_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(camelcaseinclude_HEADERS) $(nodist_include_HEADERS) \ + $(qgpgmeinclude_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_FILEVERSION = @BUILD_FILEVERSION@ +BUILD_REVISION = @BUILD_REVISION@ +BUILD_TIMESTAMP = @BUILD_TIMESTAMP@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CC_FOR_BUILD = @CC_FOR_BUILD@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOXYGEN = @DOXYGEN@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLED_LANGUAGES = @ENABLED_LANGUAGES@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GITLOG_TO_CHANGELOG = @GITLOG_TO_CHANGELOG@ +GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ +GPGME_CONFIG_API_VERSION = @GPGME_CONFIG_API_VERSION@ +GPGME_CONFIG_AVAIL_LANG = @GPGME_CONFIG_AVAIL_LANG@ +GPGME_CONFIG_CFLAGS = @GPGME_CONFIG_CFLAGS@ +GPGME_CONFIG_HOST = @GPGME_CONFIG_HOST@ +GPGME_CONFIG_LIBS = @GPGME_CONFIG_LIBS@ +GPGME_QTTEST_CFLAGS = @GPGME_QTTEST_CFLAGS@ +GPGME_QTTEST_LIBS = @GPGME_QTTEST_LIBS@ +GPGME_QT_CFLAGS = @GPGME_QT_CFLAGS@ +GPGME_QT_LIBS = @GPGME_QT_LIBS@ +GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ +GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@ +GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ +GPG_ERROR_MT_CFLAGS = @GPG_ERROR_MT_CFLAGS@ +GPG_ERROR_MT_LIBS = @GPG_ERROR_MT_LIBS@ +GRAPHVIZ = @GRAPHVIZ@ +GREP = @GREP@ +HAVE_CXX11 = @HAVE_CXX11@ +HAVE_DOT = @HAVE_DOT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBASSUAN_CFLAGS = @LIBASSUAN_CFLAGS@ +LIBASSUAN_CONFIG = @LIBASSUAN_CONFIG@ +LIBASSUAN_LIBS = @LIBASSUAN_LIBS@ +LIBGPGMEPP_LT_AGE = @LIBGPGMEPP_LT_AGE@ +LIBGPGMEPP_LT_CURRENT = @LIBGPGMEPP_LT_CURRENT@ +LIBGPGMEPP_LT_REVISION = @LIBGPGMEPP_LT_REVISION@ +LIBGPGME_LT_AGE = @LIBGPGME_LT_AGE@ +LIBGPGME_LT_CURRENT = @LIBGPGME_LT_CURRENT@ +LIBGPGME_LT_REVISION = @LIBGPGME_LT_REVISION@ +LIBOBJS = @LIBOBJS@ +LIBQGPGME_LT_AGE = @LIBQGPGME_LT_AGE@ +LIBQGPGME_LT_CURRENT = @LIBQGPGME_LT_CURRENT@ +LIBQGPGME_LT_REVISION = @LIBQGPGME_LT_REVISION@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MOC = @MOC@ +MOC2 = @MOC2@ +NEED__FILE_OFFSET_BITS = @NEED__FILE_OFFSET_BITS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHONS = @PYTHONS@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@ +PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ +PYTHON_VERSION = @PYTHON_VERSION@ +PYTHON_VERSIONS = @PYTHON_VERSIONS@ +QTCHOOSER = @QTCHOOSER@ +RANLIB = @RANLIB@ +RC = @RC@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +SWIG = @SWIG@ +SWIG_LIB = @SWIG_LIB@ +SYSROOT = @SYSROOT@ +VERSION = @VERSION@ +VERSION_NUMBER = @VERSION_NUMBER@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +emacs_local_vars_begin = @emacs_local_vars_begin@ +emacs_local_vars_end = @emacs_local_vars_end@ +emacs_local_vars_read_only = @emacs_local_vars_read_only@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# Makefile.am for GPGMEPP. +# Copyright (C) 2016 Intevation GmbH +# +# This file is part of GPGMEPP. +# +# GPGME-CL is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# GPGME-CL is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA +lib_LTLIBRARIES = libqgpgme.la +EXTRA_DIST = QGpgmeConfig.cmake.in.in QGpgmeConfigVersion.cmake.in \ + gpgme_backend_debug.h qgpgme_version.h.in + +qgpgme_sources = \ + dataprovider.cpp job.cpp qgpgmeadduseridjob.cpp \ + qgpgmebackend.cpp qgpgmechangeexpiryjob.cpp qgpgmechangeownertrustjob.cpp \ + qgpgmechangepasswdjob.cpp qgpgmedecryptjob.cpp \ + qgpgmedecryptverifyjob.cpp qgpgmedeletejob.cpp qgpgmedownloadjob.cpp \ + qgpgmeencryptjob.cpp qgpgmeexportjob.cpp qgpgmeimportfromkeyserverjob.cpp \ + qgpgmeimportjob.cpp qgpgmekeygenerationjob.cpp qgpgmekeylistjob.cpp \ + qgpgmelistallkeysjob.cpp qgpgmenewcryptoconfig.cpp \ + qgpgmerefreshkeysjob.cpp \ + qgpgmesecretkeyexportjob.cpp qgpgmesignencryptjob.cpp \ + qgpgmesignjob.cpp qgpgmesignkeyjob.cpp qgpgmeverifydetachedjob.cpp \ + qgpgmeverifyopaquejob.cpp threadedjobmixin.cpp \ + qgpgmekeyformailboxjob.cpp gpgme_backend_debug.cpp \ + qgpgmetofupolicyjob.cpp \ + defaultkeygenerationjob.cpp qgpgmewkspublishjob.cpp + + +# If you add one here make sure that you also add one in camelcase +qgpgme_headers = \ + adduseridjob.h \ + changeexpiryjob.h \ + changeownertrustjob.h \ + changepasswdjob.h \ + dataprovider.h \ + decryptjob.h \ + decryptverifyjob.h \ + downloadjob.h \ + encryptjob.h \ + exportjob.h \ + hierarchicalkeylistjob.h \ + job.h \ + keyformailboxjob.h \ + multideletejob.h \ + protocol.h \ + qgpgme_export.h \ + qgpgmenewcryptoconfig.h \ + signjob.h \ + signkeyjob.h \ + signencryptjob.h \ + verifyopaquejob.h \ + refreshkeysjob.h \ + cryptoconfig.h \ + deletejob.h \ + importfromkeyserverjob.h \ + importjob.h \ + keygenerationjob.h \ + keylistjob.h \ + listallkeysjob.h \ + verifydetachedjob.h \ + defaultkeygenerationjob.h \ + tofupolicyjob.h \ + wkspublishjob.h + +camelcase_headers = \ + AddUserIDJob \ + ChangeExpiryJob \ + ChangeOwnerTrustJob \ + ChangePasswdJob \ + DataProvider \ + DecryptJob \ + DecryptVerifyJob \ + DownloadJob \ + EncryptJob \ + ExportJob \ + HierarchicalKeyKistJob \ + Job \ + MultiDeleteJob \ + Protocol \ + QGpgMENewCryptoConfig \ + SignJob \ + SignKeyJob \ + SignEncryptJob \ + VerifyOpaqueJob \ + RefreshKeysJob \ + CryptoConfig \ + DeleteJob \ + ImportFromKeyserverJob \ + ImportJob \ + KeyGenerationJob \ + KeyListJob \ + ListAllKeysJob \ + VerifyDetachedJob \ + KeyForMailboxJob \ + DefaultKeyGenerationJob \ + WKSPublishJob \ + TofuPolicyJob + +private_qgpgme_headers = \ + qgpgme_export.h \ + abstractimportjob.h \ + protocol_p.h \ + qgpgmeadduseridjob.h \ + qgpgmebackend.h \ + qgpgmechangeexpiryjob.h \ + qgpgmechangeownertrustjob.h \ + qgpgmechangepasswdjob.h \ + qgpgmedecryptjob.h \ + qgpgmedecryptverifyjob.h \ + qgpgmedeletejob.h \ + qgpgmedownloadjob.h \ + qgpgmeencryptjob.h \ + qgpgmeexportjob.h \ + qgpgmeimportfromkeyserverjob.h \ + qgpgmeimportjob.h \ + qgpgmekeygenerationjob.h \ + qgpgmekeylistjob.h \ + qgpgmelistallkeysjob.h \ + qgpgmerefreshkeysjob.h \ + qgpgmesecretkeyexportjob.h \ + qgpgmesignencryptjob.h \ + qgpgmesignjob.h \ + qgpgmesignkeyjob.h \ + qgpgmeverifydetachedjob.h \ + qgpgmeverifyopaquejob.h \ + qgpgmekeyformailboxjob.h \ + qgpgmewkspublishjob.h \ + qgpgmetofupolicyjob.h \ + specialjob.h \ + threadedjobmixin.h + +qgpgme_moc_sources = \ + abstractimportjob.moc \ + adduseridjob.moc \ + changeexpiryjob.moc \ + changeownertrustjob.moc \ + changepasswdjob.moc \ + decryptjob.moc \ + decryptverifyjob.moc \ + deletejob.moc \ + downloadjob.moc \ + encryptjob.moc \ + exportjob.moc \ + hierarchicalkeylistjob.moc \ + importfromkeyserverjob.moc \ + importjob.moc \ + job.moc \ + keygenerationjob.moc \ + keylistjob.moc \ + listallkeysjob.moc \ + multideletejob.moc \ + qgpgmeadduseridjob.moc \ + qgpgmechangeexpiryjob.moc \ + qgpgmechangeownertrustjob.moc \ + qgpgmechangepasswdjob.moc \ + qgpgmedecryptjob.moc \ + qgpgmedecryptverifyjob.moc \ + qgpgmedeletejob.moc \ + qgpgmedownloadjob.moc \ + qgpgmeencryptjob.moc \ + qgpgmeexportjob.moc \ + qgpgmeimportfromkeyserverjob.moc \ + qgpgmeimportjob.moc \ + qgpgmekeygenerationjob.moc \ + qgpgmekeylistjob.moc \ + qgpgmelistallkeysjob.moc \ + qgpgmerefreshkeysjob.moc \ + qgpgmesecretkeyexportjob.moc \ + qgpgmesignencryptjob.moc \ + qgpgmesignjob.moc \ + qgpgmesignkeyjob.moc \ + qgpgmeverifydetachedjob.moc \ + qgpgmeverifyopaquejob.moc \ + qgpgmewkspublishjob.moc \ + tofupolicyjob.moc \ + qgpgmetofupolicyjob.moc \ + refreshkeysjob.moc \ + signencryptjob.moc \ + signjob.moc \ + signkeyjob.moc \ + specialjob.moc \ + verifydetachedjob.moc \ + verifyopaquejob.moc \ + keyformailboxjob.moc \ + wkspublishjob.moc \ + qgpgmekeyformailboxjob.moc \ + defaultkeygenerationjob.moc + +qgpgmeincludedir = $(includedir)/qgpgme +qgpgmeinclude_HEADERS = $(qgpgme_headers) +camelcaseincludedir = $(includedir)/QGpgME +camelcaseinclude_HEADERS = $(camelcase_headers) +nodist_include_HEADERS = qgpgme_version.h +libqgpgme_la_SOURCES = $(qgpgme_sources) $(qgpgme_headers) $(private_qgpgme_headers) +AM_CPPFLAGS = -I$(top_srcdir)/lang/cpp/src -I$(top_builddir)/src \ + @GPGME_QT_CFLAGS@ @GPG_ERROR_CFLAGS@ @LIBASSUAN_CFLAGS@ \ + -DBUILDING_QGPGME + +libqgpgme_la_LIBADD = ../../cpp/src/libgpgmepp.la ../../../src/libgpgme.la \ + @LIBASSUAN_LIBS@ @GPGME_QT_LIBS@ + +libqgpgme_la_LDFLAGS = -version-info \ + @LIBQGPGME_LT_CURRENT@:@LIBQGPGME_LT_REVISION@:@LIBQGPGME_LT_AGE@ + +@HAVE_W32_SYSTEM_FALSE@libsuffix = .so +@HAVE_W32_SYSTEM_TRUE@libsuffix = .dll.a +BUILT_SOURCES = $(qgpgme_moc_sources) $(camelcase_headers) +CLEANFILES = $(qgpgme_moc_sources) $(camelcase_headers) QGpgmeConfig.cmake +nodist_libqgpgme_la_SOURCES = $(qgpgme_moc_sources) +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .cpp .h .lo .moc .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lang/qt/src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu lang/qt/src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +QGpgmeConfig.cmake.in: $(top_builddir)/config.status $(srcdir)/QGpgmeConfig.cmake.in.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +QGpgmeConfigVersion.cmake: $(top_builddir)/config.status $(srcdir)/QGpgmeConfigVersion.cmake.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +qgpgme_version.h: $(top_builddir)/config.status $(srcdir)/qgpgme_version.h.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libqgpgme.la: $(libqgpgme_la_OBJECTS) $(libqgpgme_la_DEPENDENCIES) $(EXTRA_libqgpgme_la_DEPENDENCIES) + $(AM_V_CXXLD)$(libqgpgme_la_LINK) -rpath $(libdir) $(libqgpgme_la_OBJECTS) $(libqgpgme_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dataprovider.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/defaultkeygenerationjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpgme_backend_debug.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/job.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmeadduseridjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmebackend.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmechangeexpiryjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmechangeownertrustjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmechangepasswdjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmedecryptjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmedecryptverifyjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmedeletejob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmedownloadjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmeencryptjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmeexportjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmeimportfromkeyserverjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmeimportjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmekeyformailboxjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmekeygenerationjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmekeylistjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmelistallkeysjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmenewcryptoconfig.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmerefreshkeysjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmesecretkeyexportjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmesignencryptjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmesignjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmesignkeyjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmetofupolicyjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmeverifydetachedjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmeverifyopaquejob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qgpgmewkspublishjob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/threadedjobmixin.Plo@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-camelcaseincludeHEADERS: $(camelcaseinclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(camelcaseinclude_HEADERS)'; test -n "$(camelcaseincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(camelcaseincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(camelcaseincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(camelcaseincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(camelcaseincludedir)" || exit $$?; \ + done + +uninstall-camelcaseincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(camelcaseinclude_HEADERS)'; test -n "$(camelcaseincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(camelcaseincludedir)'; $(am__uninstall_files_from_dir) +install-nodist_includeHEADERS: $(nodist_include_HEADERS) + @$(NORMAL_INSTALL) + @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-nodist_includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) +install-qgpgmeincludeHEADERS: $(qgpgmeinclude_HEADERS) + @$(NORMAL_INSTALL) + @list='$(qgpgmeinclude_HEADERS)'; test -n "$(qgpgmeincludedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(qgpgmeincludedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(qgpgmeincludedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(qgpgmeincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(qgpgmeincludedir)" || exit $$?; \ + done + +uninstall-qgpgmeincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(qgpgmeinclude_HEADERS)'; test -n "$(qgpgmeincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(qgpgmeincludedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(camelcaseincludedir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(qgpgmeincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-camelcaseincludeHEADERS install-data-local \ + install-nodist_includeHEADERS install-qgpgmeincludeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-camelcaseincludeHEADERS \ + uninstall-libLTLIBRARIES uninstall-local \ + uninstall-nodist_includeHEADERS uninstall-qgpgmeincludeHEADERS + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am \ + install-camelcaseincludeHEADERS install-data install-data-am \ + install-data-local install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libLTLIBRARIES install-man \ + install-nodist_includeHEADERS install-pdf install-pdf-am \ + install-ps install-ps-am install-qgpgmeincludeHEADERS \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-camelcaseincludeHEADERS uninstall-libLTLIBRARIES \ + uninstall-local uninstall-nodist_includeHEADERS \ + uninstall-qgpgmeincludeHEADERS + + +QGpgmeConfig.cmake: QGpgmeConfig.cmake.in + sed -e 's|[@]resolved_libdir@|$(libdir)|g' < "$<" > "$@" + sed -e 's|[@]libsuffix@|$(libsuffix)|g' < "$@" > "$@".2 + mv "$@".2 "$@" + +$(camelcase_headers): Makefile.am + echo -n "#include \"qgpgme/" > "$@" + echo -n "$@" | tr '[:upper:]' '[:lower:]' >> "$@" + echo ".h\"" >> "$@" + +install-cmake-files: QGpgmeConfig.cmake QGpgmeConfigVersion.cmake + -$(INSTALL) -d $(DESTDIR)$(libdir)/cmake/Gpgmepp + $(INSTALL) QGpgmeConfig.cmake \ + $(DESTDIR)$(libdir)/cmake/Gpgmepp/QGpgmeConfig.cmake + $(INSTALL) QGpgmeConfigVersion.cmake \ + $(DESTDIR)$(libdir)/cmake/Gpgmepp/QGpgmeConfigVersion.cmake + +uninstall-cmake-files: + -rm $(DESTDIR)$(libdir)/cmake/Gpgmepp/QGpgmeConfigVersion.cmake + -rm $(DESTDIR)$(libdir)/cmake/Gpgmepp/QGpgmeConfig.cmake + -rmdir $(DESTDIR)$(libdir)/cmake/Gpgmepp/ + +install-data-local: install-cmake-files + +uninstall-local: uninstall-cmake-files + +.h.moc: + $(MOC) `test -f '$<' || echo '$(srcdir)/'`$< -o $@ + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/lang/qt/src/MultiDeleteJob b/lang/qt/src/MultiDeleteJob new file mode 100644 index 0000000..e398c79 --- /dev/null +++ b/lang/qt/src/MultiDeleteJob @@ -0,0 +1 @@ +#include "qgpgme/multideletejob.h" diff --git a/lang/qt/src/Protocol b/lang/qt/src/Protocol new file mode 100644 index 0000000..6f92b75 --- /dev/null +++ b/lang/qt/src/Protocol @@ -0,0 +1 @@ +#include "qgpgme/protocol.h" diff --git a/lang/qt/src/QGpgMENewCryptoConfig b/lang/qt/src/QGpgMENewCryptoConfig new file mode 100644 index 0000000..99f353f --- /dev/null +++ b/lang/qt/src/QGpgMENewCryptoConfig @@ -0,0 +1 @@ +#include "qgpgme/qgpgmenewcryptoconfig.h" diff --git a/lang/qt/src/QGpgmeConfig.cmake.in.in b/lang/qt/src/QGpgmeConfig.cmake.in.in new file mode 100644 index 0000000..3d19696 --- /dev/null +++ b/lang/qt/src/QGpgmeConfig.cmake.in.in @@ -0,0 +1,107 @@ +# CMake Config file for QGPGME. +# Copyright (C) 2016 Intevation GmbH +# +# This file is part of GPGME. +# +# GPGME-CL is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# GPGME-CL is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA + +# based on a generated file from cmake. +# Generated by CMake 3.0.2 + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget QGpgme KF5::QGpgme) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) + +# Create imported target QGpgme +add_library(QGpgme SHARED IMPORTED) + +set_target_properties(QGpgme PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include;${_IMPORT_PREFIX}/include/qgpgme" + INTERFACE_LINK_LIBRARIES "Gpgmepp;Qt5::Core" + IMPORTED_LOCATION "@resolved_libdir@/libqgpgme@libsuffix@" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/lang/qt/src/QGpgmeConfigVersion.cmake.in b/lang/qt/src/QGpgmeConfigVersion.cmake.in new file mode 100644 index 0000000..04a12cb --- /dev/null +++ b/lang/qt/src/QGpgmeConfigVersion.cmake.in @@ -0,0 +1,31 @@ +# CMake Version file for QGPGME. +# Copyright (C) 2016 Intevation GmbH +# +# This file is part of GPGME. +# +# GPGME-CL is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# GPGME-CL is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA + +# based on a generated file from cmake. +set(PACKAGE_VERSION "@LIBQGPGME_LT_CURRENT@.@LIBQGPGME_LT_AGE@.@LIBQGPGME_LT_REVISION@.@BUILD_REVISION@") + +if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}") + set(PACKAGE_VERSION_EXACT TRUE) + endif() +endif() diff --git a/lang/qt/src/RefreshKeysJob b/lang/qt/src/RefreshKeysJob new file mode 100644 index 0000000..678d8d0 --- /dev/null +++ b/lang/qt/src/RefreshKeysJob @@ -0,0 +1 @@ +#include "qgpgme/refreshkeysjob.h" diff --git a/lang/qt/src/SignEncryptJob b/lang/qt/src/SignEncryptJob new file mode 100644 index 0000000..4075e49 --- /dev/null +++ b/lang/qt/src/SignEncryptJob @@ -0,0 +1 @@ +#include "qgpgme/signencryptjob.h" diff --git a/lang/qt/src/SignJob b/lang/qt/src/SignJob new file mode 100644 index 0000000..135cab1 --- /dev/null +++ b/lang/qt/src/SignJob @@ -0,0 +1 @@ +#include "qgpgme/signjob.h" diff --git a/lang/qt/src/SignKeyJob b/lang/qt/src/SignKeyJob new file mode 100644 index 0000000..094753c --- /dev/null +++ b/lang/qt/src/SignKeyJob @@ -0,0 +1 @@ +#include "qgpgme/signkeyjob.h" diff --git a/lang/qt/src/TofuPolicyJob b/lang/qt/src/TofuPolicyJob new file mode 100644 index 0000000..e379942 --- /dev/null +++ b/lang/qt/src/TofuPolicyJob @@ -0,0 +1 @@ +#include "qgpgme/tofupolicyjob.h" diff --git a/lang/qt/src/VerifyDetachedJob b/lang/qt/src/VerifyDetachedJob new file mode 100644 index 0000000..445fe27 --- /dev/null +++ b/lang/qt/src/VerifyDetachedJob @@ -0,0 +1 @@ +#include "qgpgme/verifydetachedjob.h" diff --git a/lang/qt/src/VerifyOpaqueJob b/lang/qt/src/VerifyOpaqueJob new file mode 100644 index 0000000..5292a70 --- /dev/null +++ b/lang/qt/src/VerifyOpaqueJob @@ -0,0 +1 @@ +#include "qgpgme/verifyopaquejob.h" diff --git a/lang/qt/src/WKSPublishJob b/lang/qt/src/WKSPublishJob new file mode 100644 index 0000000..747f7c8 --- /dev/null +++ b/lang/qt/src/WKSPublishJob @@ -0,0 +1 @@ +#include "qgpgme/wkspublishjob.h" diff --git a/lang/qt/src/abstractimportjob.h b/lang/qt/src/abstractimportjob.h new file mode 100644 index 0000000..572f203 --- /dev/null +++ b/lang/qt/src/abstractimportjob.h @@ -0,0 +1,64 @@ +/* + abstractimportjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2009 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __KLEO_ABSTRACTIMPORTJOB_H__ +#define __KLEO_ABSTRACTIMPORTJOB_H__ + +#include "job.h" + +#include "qgpgme_export.h" + +namespace GpgME +{ +class Error; +class ImportResult; +} + +namespace QGpgME +{ + +class QGPGME_EXPORT AbstractImportJob : public Job +{ + Q_OBJECT +protected: + explicit AbstractImportJob(QObject *parent); +public: + ~AbstractImportJob(); + +Q_SIGNALS: + void result(const GpgME::ImportResult &result, const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error()); +}; + +} + +#endif // __KLEO_IMPORTJOB_H__ diff --git a/lang/qt/src/adduseridjob.h b/lang/qt/src/adduseridjob.h new file mode 100644 index 0000000..1b5676f --- /dev/null +++ b/lang/qt/src/adduseridjob.h @@ -0,0 +1,84 @@ +/* + adduseridjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __KLEO_ADDUSERIDJOB_H__ +#define __KLEO_ADDUSERIDJOB_H__ + +#include "job.h" + +#include + +namespace GpgME +{ +class Error; +class Key; +} + +namespace QGpgME +{ + +/** + @short An abstract base class to asynchronously add UIDs to OpenPGP keys + + To use a AddUserIDJob, first obtain an instance from the + CryptoBackend implementation, connect the progress() and result() + signals to suitable slots and then start the job with a call + to start(). This call might fail, in which case the AddUserIDJob + instance will have scheduled it's own destruction with a call to + QObject::deleteLater(). + + After result() is emitted, the AddUserIDJob will schedule it's own + destruction by calling QObject::deleteLater(). +*/ +class QGPGME_EXPORT AddUserIDJob : public Job +{ + Q_OBJECT +protected: + explicit AddUserIDJob(QObject *parent); +public: + ~AddUserIDJob(); + + /** + Starts the operation. \a key is the key to add the UID to. \a + name, \a email and \a comment are the components of the user id. + */ + virtual GpgME::Error start(const GpgME::Key &key, const QString &name, + const QString &email, const QString &comment = QString()) = 0; + +Q_SIGNALS: + void result(const GpgME::Error &result, const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error()); +}; + +} + +#endif // __KLEO_ADDUSERIDJOB_H__ diff --git a/lang/qt/src/changeexpiryjob.h b/lang/qt/src/changeexpiryjob.h new file mode 100644 index 0000000..7902cb8 --- /dev/null +++ b/lang/qt/src/changeexpiryjob.h @@ -0,0 +1,84 @@ +/* + changeexpiryjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __KLEO_CHANGEEXPIRYJOB_H__ +#define __KLEO_CHANGEEXPIRYJOB_H__ + +#include "job.h" + +namespace GpgME +{ +class Error; +class Key; +} + +class QDateTime; + +namespace QGpgME +{ + +/** + @short An abstract base class to change expiry asynchronously + + To use a ChangeExpiryJob, first obtain an instance from the + CryptoBackend implementation, connect the progress() and result() + signals to suitable slots and then start the job with a call + to start(). This call might fail, in which case the ChangeExpiryJob + instance will have scheduled it's own destruction with a call to + QObject::deleteLater(). + + After result() is emitted, the ChangeExpiryJob will schedule it's own + destruction by calling QObject::deleteLater(). +*/ +class QGPGME_EXPORT ChangeExpiryJob : public Job +{ + Q_OBJECT +protected: + explicit ChangeExpiryJob(QObject *parent); +public: + ~ChangeExpiryJob(); + + /** + Starts the change-expiry operation. \a key is the key to change + the expiry of. \a expiry is the new expiry time. If \a expiry + is not valid, \a key is set to never expire. + */ + virtual GpgME::Error start(const GpgME::Key &key, const QDateTime &expiry) = 0; + +Q_SIGNALS: + void result(const GpgME::Error &result, const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error()); +}; + +} + +#endif // __KLEO_CHANGEEXPIRYJOB_H__ diff --git a/lang/qt/src/changeownertrustjob.h b/lang/qt/src/changeownertrustjob.h new file mode 100644 index 0000000..75c1163 --- /dev/null +++ b/lang/qt/src/changeownertrustjob.h @@ -0,0 +1,81 @@ +/* + changeownertrustjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __KLEO_CHANGEOWNERTRUST_H__ +#define __KLEO_CHANGEOWNERTRUST_H__ + +#include "job.h" + +#ifdef BUILDING_QGPGME +# include "key.h" +#else +# include +#endif + +namespace QGpgME +{ + +/** + @short An abstract base class to change owner trust asynchronously + + To use a ChangeOwnerTrustJob, first obtain an instance from the + CryptoBackend implementation, connect the progress() and result() + signals to suitable slots and then start the job with a call + to start(). This call might fail, in which case the ChangeOwnerTrustJob + instance will have scheduled it's own destruction with a call to + QObject::deleteLater(). + + After result() is emitted, the ChangeOwnerTrustJob will schedule it's own + destruction by calling QObject::deleteLater(). +*/ +class QGPGME_EXPORT ChangeOwnerTrustJob : public Job +{ + Q_OBJECT +protected: + explicit ChangeOwnerTrustJob(QObject *parent); +public: + ~ChangeOwnerTrustJob(); + + /** + Starts the change-owner trust operation. \a key is the key to change + the owner trust of . \a trust is the new trust level. + */ + virtual GpgME::Error start(const GpgME::Key &key, GpgME::Key::OwnerTrust trust) = 0; + +Q_SIGNALS: + void result(const GpgME::Error &result, const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error()); +}; + +} + +#endif // __KLEO_CHANGEOWNERTRUSTJOB_H__ diff --git a/lang/qt/src/changepasswdjob.h b/lang/qt/src/changepasswdjob.h new file mode 100644 index 0000000..7290898 --- /dev/null +++ b/lang/qt/src/changepasswdjob.h @@ -0,0 +1,82 @@ +/* + changepasswdjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2010 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __KLEO_CHANGEPASSWDJOB_H__ +#define __KLEO_CHANGEPASSWDJOB_H__ + +#include "job.h" + +namespace GpgME +{ +class Error; +class Key; +} + +namespace QGpgME +{ + +/** + @short An abstract base class to change a key's passphrase asynchronously + + To use a ChangePasswdJob, first obtain an instance from the + CryptoBackend implementation, connect the progress() and result() + signals to suitable slots and then start the job with a call + to start(). This call might fail, in which case the ChangePasswdJob + instance will have scheduled it's own destruction with a call to + QObject::deleteLater(). + + After result() is emitted, the ChangePasswdJob will schedule it's own + destruction by calling QObject::deleteLater(). +*/ +class QGPGME_EXPORT ChangePasswdJob : public Job +{ + Q_OBJECT +protected: + explicit ChangePasswdJob(QObject *parent); +public: + ~ChangePasswdJob(); + + /** + Starts the passphrase-change operation. \a key is the key to + change the passphrase of. The passphrase is queried by the + backend directly, you cannot give it to the job beforehand. + */ + virtual GpgME::Error start(const GpgME::Key &key) = 0; + +Q_SIGNALS: + void result(const GpgME::Error &result, const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error()); +}; + +} + +#endif // __KLEO_CHANGEPASSWDJOB_H__ diff --git a/lang/qt/src/cryptoconfig.h b/lang/qt/src/cryptoconfig.h new file mode 100644 index 0000000..c3f0c7e --- /dev/null +++ b/lang/qt/src/cryptoconfig.h @@ -0,0 +1,400 @@ +/* + cryptoconfig.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef CRYPTOCONFIG_H +#define CRYPTOCONFIG_H + +#include "qgpgme_export.h" +#ifdef __cplusplus +/* we read this file from a C compiler, and are only interested in the + * enums... */ + +#include + +#include + +/* Start reading this file from the bottom up :) */ + +namespace QGpgME +{ + +/** + * Description of a single option + */ +class QGPGME_EXPORT CryptoConfigEntry +{ + +public: +#endif /* __cplusplus */ + /** + @li basic This option should always be offered to the user. + @li advanced This option may be offered to advanced users. + @li expert This option should only be offered to expert users. + */ + enum Level { Level_Basic = 0, + Level_Advanced = 1, + Level_Expert = 2 + }; + + /** + Type of the argument + @li ArgType_None The option is set or not set, but no argument. + @li ArgType_String An unformatted string. + @li ArgType_Int A signed integer number. + @li ArgType_UInt An unsigned integer number. + @li ArgType_Path A string that describes the pathname of a file. + The file does not necessarily need to exist. + Separated from string so that e.g. a FileDialog can be used. + @li ArgType_DirPath A string that describes the pathname of a directory. + The directory does not necessarily need to exist. + Separated from path so that e.g. a FileDialog can be used which only + allows directories to be selected. + @li ArgType_LDAPURL A LDAP URL + Separated from URL so that a more specific widget can be shown, hiding the url syntax + */ + enum ArgType { ArgType_None = 0, + ArgType_String = 1, + ArgType_Int = 2, + ArgType_UInt = 3, + ArgType_Path = 4, + /* Nr. 5 was URL historically. */ + ArgType_LDAPURL = 6, + ArgType_DirPath = 7, + + NumArgType + }; + +#ifdef __cplusplus + virtual ~CryptoConfigEntry() {} + + /** + * Return the internal name of this entry + */ + virtual QString name() const = 0; + + /** + * @return user-visible description of this entry + */ + virtual QString description() const = 0; + + /** + * @return "component/group/name" + */ + virtual QString path() const = 0; + + /** + * @return true if the argument is optional + */ + virtual bool isOptional() const = 0; + + /** + * @return true if the entry is readonly + */ + virtual bool isReadOnly() const = 0; + + /** + * @return true if the argument can be given multiple times + */ + virtual bool isList() const = 0; + + /** + * @return true if the argument can be changed at runtime + */ + virtual bool isRuntime() const = 0; + + /** + * User level + */ + virtual Level level() const = 0; + + /** + * Argument type + */ + virtual ArgType argType() const = 0; + + /** + * Return true if the option is set, i.e. different from default + */ + virtual bool isSet() const = 0; + + /** + * Return value as a bool (only allowed for ArgType_None) + */ + virtual bool boolValue() const = 0; + + /** + * Return value as a string (available for all argtypes) + * The returned string can be empty (explicitly set to empty) or null (not set). + */ + virtual QString stringValue() const = 0; + + /** + * Return value as a signed int + */ + virtual int intValue() const = 0; + + /** + * Return value as an unsigned int + */ + virtual unsigned int uintValue() const = 0; + + /** + * Return value as a URL (only meaningful for Path and URL argtypes) + */ + virtual QUrl urlValue() const = 0; + + /** + * Return number of times the option is set (only valid for ArgType_None, if isList()) + */ + virtual unsigned int numberOfTimesSet() const = 0; + + /** + * Return value as a list of signed ints + */ + virtual std::vector intValueList() const = 0; + + /** + * Return value as a list of unsigned ints + */ + virtual std::vector uintValueList() const = 0; + + /** + * Return value as a list of URLs (only meaningful for Path and URL argtypes, if isList()) + */ + virtual QList urlValueList() const = 0; + + /** + * Reset an option to its default value + */ + virtual void resetToDefault() = 0; + + /** + * Define whether the option is set or not (only allowed for ArgType_None) + * #### TODO: and for options with optional args + */ + virtual void setBoolValue(bool) = 0; + + /** + * Set string value (allowed for all argtypes) + */ + virtual void setStringValue(const QString &) = 0; + + /** + * Set a new signed int value + */ + virtual void setIntValue(int) = 0; + + /** + * Set a new unsigned int value + */ + virtual void setUIntValue(unsigned int) = 0; + + /** + * Set value as a URL (only meaningful for Path (if local) and URL argtypes) + */ + virtual void setURLValue(const QUrl &) = 0; + + /** + * Set the number of times the option is set (only valid for ArgType_None, if isList()) + */ + virtual void setNumberOfTimesSet(unsigned int) = 0; + + /** + * Set a new list of signed int values + */ + virtual void setIntValueList(const std::vector &) = 0; + + /** + * Set a new list of unsigned int values + */ + virtual void setUIntValueList(const std::vector &) = 0; + + /** + * Set value as a URL list (only meaningful for Path (if all URLs are local) and URL argtypes, if isList()) + */ + virtual void setURLValueList(const QList &) = 0; + + /** + * @return true if the value was changed + */ + virtual bool isDirty() const = 0; +}; + +/** + * Group containing a set of config options + */ +class QGPGME_EXPORT CryptoConfigGroup +{ + +public: + virtual ~CryptoConfigGroup() {} + + /** + * Return the internal name of this group + */ + virtual QString name() const = 0; + + /** + * Return the name of the icon for this group + */ + virtual QString iconName() const = 0; + + /** + * @return user-visible description of this group + */ + virtual QString description() const = 0; + + /** + * @return "component/group" + */ + virtual QString path() const = 0; + + /** + * User level + */ + virtual CryptoConfigEntry::Level level() const = 0; + + /** + * Returns the list of entries that are known by this group. + * + * @return list of group entry names. + **/ + virtual QStringList entryList() const = 0; + + /** + * @return the configuration object for a given entry in this group + * The object is owned by CryptoConfigGroup, don't delete it. + * Groups cannot be nested, so all entries returned here are pure entries, no groups. + */ + virtual CryptoConfigEntry *entry(const QString &name) const = 0; +}; + +/** + * Crypto config for one component (e.g. gpg-agent, dirmngr etc.) + */ +class QGPGME_EXPORT CryptoConfigComponent +{ + +public: + virtual ~CryptoConfigComponent() {} + + /** + * Return the internal name of this component + */ + virtual QString name() const = 0; + + /** + * Return the name of the icon for this component + */ + virtual QString iconName() const = 0; + + /** + * Return user-visible description of this component + */ + virtual QString description() const = 0; + + /** + * Returns the list of groups that are known about. + * + * @return list of group names. One of them can be "", which is the group where all + * "toplevel" options (belonging to no group) are. + */ + virtual QStringList groupList() const = 0; + + /** + * @return the configuration object for a given group + * The object is owned by CryptoConfigComponent, don't delete it. + */ + virtual CryptoConfigGroup *group(const QString &name) const = 0; + +}; + +/** + * Main interface to crypto configuration. + */ +class QGPGME_EXPORT CryptoConfig +{ + +public: + virtual ~CryptoConfig() {} + + /** + * Returns the list of known components (e.g. "gpg-agent", "dirmngr" etc.). + * Use @ref component() to retrieve more information about each one. + * @return list of component names. + **/ + virtual QStringList componentList() const = 0; + + /** + * @return the configuration object for a given component + * The object is owned by CryptoConfig, don't delete it. + */ + virtual CryptoConfigComponent *component(const QString &name) const = 0; + + /** + * Convenience method to get hold of a single configuration entry when + * its component, group and name are known. This can be used to read + * the value and/or to set a value to it. + * + * @return the configuration object for a single configuration entry, 0 if not found. + * The object is owned by CryptoConfig, don't delete it. + */ + CryptoConfigEntry *entry(const QString &componentName, const QString &groupName, const QString &entryName) const + { + const QGpgME::CryptoConfigComponent *comp = component(componentName); + const QGpgME::CryptoConfigGroup *group = comp ? comp->group(groupName) : 0; + return group ? group->entry(entryName) : 0; + } + + /** + * Write back changes + * + * @param runtime If this option is set, the changes will take effect at run-time, as + * far as this is possible. Otherwise, they will take effect at the next + * start of the respective backend programs. + */ + virtual void sync(bool runtime) = 0; + + /** + * Tells the CryptoConfig to discard any cached information, including + * all components, groups and entries. + * Call this to free some memory when you won't be using the object + * for some time. + * DON'T call this if you're holding pointers to components, groups or entries. + */ + virtual void clear() = 0; +}; + +} +#endif /* __cplusplus */ +#endif /* CRYPTOCONFIG_H */ diff --git a/lang/qt/src/dataprovider.cpp b/lang/qt/src/dataprovider.cpp new file mode 100644 index 0000000..533b67d --- /dev/null +++ b/lang/qt/src/dataprovider.cpp @@ -0,0 +1,282 @@ +/* dataprovider.cpp + Copyright (C) 2004 Klar�vdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + This file is part of QGPGME. + + QGPGME is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + QGPGME is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with QGPGME; see the file COPYING.LIB. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +// -*- c++ -*- + +#include + +#include + +#include +#include + +#include +#include +#include + +using namespace QGpgME; +using namespace GpgME; + +// +// +// QByteArrayDataProvider +// +// + +static bool resizeAndInit(QByteArray &ba, size_t newSize) +{ + const size_t oldSize = ba.size(); + ba.resize(newSize); + const bool ok = (newSize == static_cast(ba.size())); + if (ok) { + memset(ba.data() + oldSize, 0, newSize - oldSize); + } + return ok; +} + +QByteArrayDataProvider::QByteArrayDataProvider() + : GpgME::DataProvider(), mOff(0) {} + +QByteArrayDataProvider::QByteArrayDataProvider(const QByteArray &initialData) + : GpgME::DataProvider(), mArray(initialData), mOff(0) {} + +QByteArrayDataProvider::~QByteArrayDataProvider() {} + +ssize_t QByteArrayDataProvider::read(void *buffer, size_t bufSize) +{ +#ifndef NDEBUG + //qDebug( "QByteArrayDataProvider::read( %p, %d )", buffer, bufSize ); +#endif + if (bufSize == 0) { + return 0; + } + if (!buffer) { + Error::setSystemError(GPG_ERR_EINVAL); + return -1; + } + if (mOff >= mArray.size()) { + return 0; // EOF + } + size_t amount = qMin(bufSize, static_cast(mArray.size() - mOff)); + assert(amount > 0); + memcpy(buffer, mArray.data() + mOff, amount); + mOff += amount; + return amount; +} + +ssize_t QByteArrayDataProvider::write(const void *buffer, size_t bufSize) +{ +#ifndef NDEBUG + //qDebug( "QByteArrayDataProvider::write( %p, %lu )", buffer, static_cast( bufSize ) ); +#endif + if (bufSize == 0) { + return 0; + } + if (!buffer) { + Error::setSystemError(GPG_ERR_EINVAL); + return -1; + } + if (mOff >= mArray.size()) { + resizeAndInit(mArray, mOff + bufSize); + } + if (mOff >= mArray.size()) { + Error::setSystemError(GPG_ERR_EIO); + return -1; + } + assert(bufSize <= static_cast(mArray.size()) - mOff); + memcpy(mArray.data() + mOff, buffer, bufSize); + mOff += bufSize; + return bufSize; +} + +off_t QByteArrayDataProvider::seek(off_t offset, int whence) +{ +#ifndef NDEBUG + //qDebug( "QByteArrayDataProvider::seek( %d, %d )", int(offset), whence ); +#endif + int newOffset = mOff; + switch (whence) { + case SEEK_SET: + newOffset = offset; + break; + case SEEK_CUR: + newOffset += offset; + break; + case SEEK_END: + newOffset = mArray.size() + offset; + break; + default: + Error::setSystemError(GPG_ERR_EINVAL); + return (off_t) - 1; + } + return mOff = newOffset; +} + +void QByteArrayDataProvider::release() +{ +#ifndef NDEBUG + //qDebug( "QByteArrayDataProvider::release()" ); +#endif + mArray = QByteArray(); +} + +// +// +// QIODeviceDataProvider +// +// + +QIODeviceDataProvider::QIODeviceDataProvider(const std::shared_ptr &io) + : GpgME::DataProvider(), + mIO(io), + mErrorOccurred(false), + mHaveQProcess(qobject_cast(io.get())) +{ + assert(mIO); +} + +QIODeviceDataProvider::~QIODeviceDataProvider() {} + +bool QIODeviceDataProvider::isSupported(Operation op) const +{ + const QProcess *const proc = qobject_cast(mIO.get()); + bool canRead = true; + if (proc) { + canRead = proc->readChannel() == QProcess::StandardOutput; + } + + switch (op) { + case Read: return mIO->isReadable() && canRead; + case Write: return mIO->isWritable(); + case Seek: return !mIO->isSequential(); + case Release: return true; + default: return false; + } +} + +static qint64 blocking_read(const std::shared_ptr &io, char *buffer, qint64 maxSize) +{ + while (!io->bytesAvailable()) { + if (!io->waitForReadyRead(-1)) { + if (const QProcess *const p = qobject_cast(io.get())) { + if (p->error() == QProcess::UnknownError && + p->exitStatus() == QProcess::NormalExit && + p->exitCode() == 0) { + return 0; + } else { + Error::setSystemError(GPG_ERR_EIO); + return -1; + } + } else { + return 0; // assume EOF (loses error cases :/ ) + } + } + } + return io->read(buffer, maxSize); +} + +ssize_t QIODeviceDataProvider::read(void *buffer, size_t bufSize) +{ +#ifndef NDEBUG + //qDebug( "QIODeviceDataProvider::read( %p, %lu )", buffer, bufSize ); +#endif + if (bufSize == 0) { + return 0; + } + if (!buffer) { + Error::setSystemError(GPG_ERR_EINVAL); + return -1; + } + const qint64 numRead = mHaveQProcess + ? blocking_read(mIO, static_cast(buffer), bufSize) + : mIO->read(static_cast(buffer), bufSize); + + //workaround: some QIODevices (known example: QProcess) might not return 0 (EOF), but immediately -1 when finished. If no + //errno is set, gpgme doesn't detect the error and loops forever. So return 0 on the very first -1 in case errno is 0 + + ssize_t rc = numRead; + if (numRead < 0 && !Error::hasSystemError()) { + if (mErrorOccurred) { + Error::setSystemError(GPG_ERR_EIO); + } else { + rc = 0; + } + } + if (numRead < 0) { + mErrorOccurred = true; + } + return rc; +} + +ssize_t QIODeviceDataProvider::write(const void *buffer, size_t bufSize) +{ +#ifndef NDEBUG + //qDebug( "QIODeviceDataProvider::write( %p, %lu )", buffer, static_cast( bufSize ) ); +#endif + if (bufSize == 0) { + return 0; + } + if (!buffer) { + Error::setSystemError(GPG_ERR_EINVAL); + return -1; + } + + return mIO->write(static_cast(buffer), bufSize); +} + +off_t QIODeviceDataProvider::seek(off_t offset, int whence) +{ +#ifndef NDEBUG + //qDebug( "QIODeviceDataProvider::seek( %d, %d )", int(offset), whence ); +#endif + if (mIO->isSequential()) { + Error::setSystemError(GPG_ERR_ESPIPE); + return (off_t) - 1; + } + qint64 newOffset = mIO->pos(); + switch (whence) { + case SEEK_SET: + newOffset = offset; + break; + case SEEK_CUR: + newOffset += offset; + break; + case SEEK_END: + newOffset = mIO->size() + offset; + break; + default: + Error::setSystemError(GPG_ERR_EINVAL); + return (off_t) - 1; + } + if (!mIO->seek(newOffset)) { + Error::setSystemError(GPG_ERR_EINVAL); + return (off_t) - 1; + } + return newOffset; +} + +void QIODeviceDataProvider::release() +{ +#ifndef NDEBUG + //qDebug( "QIODeviceDataProvider::release()" ); +#endif + mIO->close(); +} diff --git a/lang/qt/src/dataprovider.h b/lang/qt/src/dataprovider.h new file mode 100644 index 0000000..337f264 --- /dev/null +++ b/lang/qt/src/dataprovider.h @@ -0,0 +1,95 @@ +/* dataprovider.h + Copyright (C) 2004 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + This file is part of QGPGME. + + QGPGME is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + QGPGME is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with QGPGME; see the file COPYING.LIB. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +// -*- c++ -*- +#ifndef __QGPGME_DATAPROVIDER_H__ +#define __QGPGME_DATAPROVIDER_H__ + +#include "qgpgme_export.h" +#include +#include + +#include + + +class QIODevice; + +namespace QGpgME +{ + +class QGPGME_EXPORT QByteArrayDataProvider : public GpgME::DataProvider +{ +public: + QByteArrayDataProvider(); + explicit QByteArrayDataProvider(const QByteArray &initialData); + ~QByteArrayDataProvider(); + + const QByteArray &data() const + { + return mArray; + } + +private: + // these shall only be accessed through the dataprovider + // interface, where they're public: + bool isSupported(Operation) const + { + return true; + } + ssize_t read(void *buffer, size_t bufSize); + ssize_t write(const void *buffer, size_t bufSize); + off_t seek(off_t offset, int whence); + void release(); + +private: + QByteArray mArray; + off_t mOff; +}; + +class QGPGME_EXPORT QIODeviceDataProvider : public GpgME::DataProvider +{ +public: + explicit QIODeviceDataProvider(const std::shared_ptr &initialData); + ~QIODeviceDataProvider(); + + const std::shared_ptr &ioDevice() const + { + return mIO; + } + +private: + // these shall only be accessed through the dataprovider + // interface, where they're public: + bool isSupported(Operation) const; + ssize_t read(void *buffer, size_t bufSize); + ssize_t write(const void *buffer, size_t bufSize); + off_t seek(off_t offset, int whence); + void release(); + +private: + const std::shared_ptr mIO; + bool mErrorOccurred : 1; + bool mHaveQProcess : 1; +}; + +} // namespace QGpgME + +#endif diff --git a/lang/qt/src/decryptjob.h b/lang/qt/src/decryptjob.h new file mode 100644 index 0000000..c4fc86f --- /dev/null +++ b/lang/qt/src/decryptjob.h @@ -0,0 +1,100 @@ +/* + decryptjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004, 2007 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __KLEO_DECRYPTJOB_H__ +#define __KLEO_DECRYPTJOB_H__ + +#include "job.h" + +#include + +class QByteArray; +class QIODevice; + +namespace GpgME +{ +class Error; +class DecryptionResult; +} + +namespace QGpgME +{ + +/** + @short An abstract base class for asynchronous decrypters + + To use a DecryptJob, first obtain an instance from the + CryptoBackend implementation, connect the progress() and result() + signals to suitable slots and then start the decryption with a + call to start(). This call might fail, in which case the + DecryptJob instance will have scheduled it's own destruction with + a call to QObject::deleteLater(). + + After result() is emitted, the DecryptJob will schedule it's own + destruction by calling QObject::deleteLater(). +*/ +class QGPGME_EXPORT DecryptJob : public Job +{ + Q_OBJECT +protected: + explicit DecryptJob(QObject *parent); +public: + ~DecryptJob(); + + /** + Starts the decryption operation. \a cipherText is the data to + decrypt. + */ + virtual QGPGME_DEPRECATED_EXPORT GpgME::Error start(const QByteArray &cipherText) = 0; + + /*! + \overload + + If \a plainText is non-null, the plaintext is written + there. Otherwise, it will be delivered in the second argument + of result(). + + \throws GpgME::Exception if starting fails + */ + virtual void start(const std::shared_ptr &cipherText, const std::shared_ptr &plainText = std::shared_ptr()) = 0; + + virtual GpgME::DecryptionResult exec(const QByteArray &cipherText, + QByteArray &plainText) = 0; + +Q_SIGNALS: + void result(const GpgME::DecryptionResult &result, const QByteArray &plainText, const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error()); +}; + +} + +#endif // __KLEO_DECRYPTJOB_H__ diff --git a/lang/qt/src/decryptverifyjob.h b/lang/qt/src/decryptverifyjob.h new file mode 100644 index 0000000..97af008 --- /dev/null +++ b/lang/qt/src/decryptverifyjob.h @@ -0,0 +1,105 @@ +/* + decryptverifyjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004, 2007 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __KLEO_DECRYPTVERIFYJOB_H__ +#define __KLEO_DECRYPTVERIFYJOB_H__ + +#include "job.h" + +#include + +class QByteArray; +class QIODevice; + +namespace GpgME +{ +class Error; +class DecryptionResult; +class VerificationResult; +} + +namespace QGpgME +{ + +/** + @short An abstract base class for asynchronous combined decrypters and verifiers + + To use a DecryptVerifyJob, first obtain an instance from the + CryptoBackend implementation, connect the progress() and result() + signals to suitable slots and then start the operation with a + call to start(). This call might fail, in which case the + DecryptVerifyJob instance will have scheduled it's own destruction with + a call to QObject::deleteLater(). + + After result() is emitted, the DecryptVerifyJob will schedule it's own + destruction by calling QObject::deleteLater(). +*/ +class QGPGME_EXPORT DecryptVerifyJob : public Job +{ + Q_OBJECT +protected: + explicit DecryptVerifyJob(QObject *parent); +public: + ~DecryptVerifyJob(); + + /** + Starts the combined decryption and verification operation. + \a cipherText is the data to decrypt and later verify. + */ + virtual QGPGME_DEPRECATED_EXPORT GpgME::Error start(const QByteArray &cipherText) = 0; + + /*! + \overload + + If \a plainText is non-null, the plaintext is written + there. Otherwise, it will be delivered in the third argument + of result(). + + \throws GpgME::Exception if starting fails + */ + virtual void start(const std::shared_ptr &cipherText, const std::shared_ptr &plainText = std::shared_ptr()) = 0; + + /** Synchronous equivalent of start() */ + virtual std::pair + exec(const QByteArray &cipherText, QByteArray &plainText) = 0; + +Q_SIGNALS: + void result(const GpgME::DecryptionResult &decryptionresult, + const GpgME::VerificationResult &verificationresult, + const QByteArray &plainText, const QString &auditLogAsHtml = QString(), + const GpgME::Error &auditLogError = GpgME::Error()); +}; + +} + +#endif // __KLEO_DECRYPTVERIFYJOB_H__ diff --git a/lang/qt/src/defaultkeygenerationjob.cpp b/lang/qt/src/defaultkeygenerationjob.cpp new file mode 100644 index 0000000..8257a72 --- /dev/null +++ b/lang/qt/src/defaultkeygenerationjob.cpp @@ -0,0 +1,125 @@ +/* defaultkeygenerationjob.cpp + + Copyright (c) 2016 Klarälvdalens Datakonsult AB + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "defaultkeygenerationjob.h" +#include "protocol.h" +#include "keygenerationjob.h" + +#include +#include + +using namespace QGpgME; + +namespace QGpgME { + +class DefaultKeyGenerationJob::Private +{ +public: + Private() + {} + + ~Private() + { + if (job) { + job->deleteLater(); + } + } + + QPointer job; +}; +} + + +DefaultKeyGenerationJob::DefaultKeyGenerationJob(QObject* parent) + : Job(parent) + , d(new DefaultKeyGenerationJob::Private()) +{ +} + +DefaultKeyGenerationJob::~DefaultKeyGenerationJob() +{ + delete d; +} + +QString DefaultKeyGenerationJob::auditLogAsHtml() const +{ + return d->job ? d->job->auditLogAsHtml() : QString(); +} + +GpgME::Error DefaultKeyGenerationJob::auditLogError() const +{ + return d->job ? d->job->auditLogError() : GpgME::Error(); +} + +void DefaultKeyGenerationJob::slotCancel() +{ + if (d->job) { + d->job->slotCancel(); + } +} + +GpgME::Error DefaultKeyGenerationJob::start(const QString &email, const QString &name) +{ + const QString args = QStringLiteral("\n" + "%ask-passphrase\n" + "key-type: RSA\n" + "key-length: 2048\n" + "key-usage: sign\n" + "subkey-type: RSA\n" + "subkey-length: 2048\n" + "subkey-usage: encrypt\n" + "name-email: %1\n" + "name-real: %2\n" + "").arg(email, name); + + d->job = openpgp()->keyGenerationJob(); + d->job->installEventFilter(this); + connect(d->job, &KeyGenerationJob::result, + this, &DefaultKeyGenerationJob::result); + connect(d->job, &KeyGenerationJob::done, + this, &DefaultKeyGenerationJob::done); + connect(d->job, &KeyGenerationJob::done, + this, &QObject::deleteLater); + return d->job->start(args); +} + +bool DefaultKeyGenerationJob::eventFilter(QObject *watched, QEvent *event) +{ + // Intercept the KeyGenerationJob's deferred delete event. We want the job + // to live at least as long as we do so we can delegate calls to it. We will + // delete the job manually afterwards. + if (watched == d->job && event->type() == QEvent::DeferredDelete) { + return true; + } + + return Job::eventFilter(watched, event); +} + +#include "defaultkeygenerationjob.moc" diff --git a/lang/qt/src/defaultkeygenerationjob.h b/lang/qt/src/defaultkeygenerationjob.h new file mode 100644 index 0000000..5b7334c --- /dev/null +++ b/lang/qt/src/defaultkeygenerationjob.h @@ -0,0 +1,76 @@ +/* defaultkeygenerationjob.h + + Copyright (c) 2016 Klarälvdalens Datakonsult AB + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ +#ifndef QGPGME_DEFAULTKEYGENERATION_H +#define QGPGME_DEFAULTKEYGENERATION_H + +#include "job.h" + +#include "qgpgme_export.h" + +namespace GpgME { +class KeyGenerationResult; +} + +namespace QGpgME{ + +/** + * Generates a PGP RSA/2048 bit key pair for given name and email address. + */ +class QGPGME_EXPORT DefaultKeyGenerationJob : public Job +{ + Q_OBJECT +public: + explicit DefaultKeyGenerationJob(QObject *parent = Q_NULLPTR); + ~DefaultKeyGenerationJob(); + + GpgME::Error start(const QString &email, const QString &name); + + QString auditLogAsHtml() const Q_DECL_OVERRIDE; + GpgME::Error auditLogError() const Q_DECL_OVERRIDE; + + +public Q_SLOTS: + void slotCancel() Q_DECL_OVERRIDE; + +Q_SIGNALS: + void result(const GpgME::KeyGenerationResult &result, const QByteArray &pubkeyData, + const QString &auditLogAsHtml, const GpgME::Error &auditLogError); + +protected: + bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE; + +private: + class Private; + Private * const d; +}; + +} + +#endif diff --git a/lang/qt/src/deletejob.h b/lang/qt/src/deletejob.h new file mode 100644 index 0000000..f8479b1 --- /dev/null +++ b/lang/qt/src/deletejob.h @@ -0,0 +1,83 @@ +/* + deletejob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __KLEO_DELETEJOB_H__ +#define __KLEO_DELETEJOB_H__ + +#include "qgpgme_export.h" +#include "job.h" + +namespace GpgME +{ +class Error; +class Key; +} + +namespace QGpgME +{ + +/** + @short An abstract base class for asynchronous deleters + + To use a DeleteJob, first obtain an instance from the + CryptoBackend implementation, connect the progress() and result() + signals to suitable slots and then start the delete with a call + to start(). This call might fail, in which case the DeleteJob + instance will have scheduled it's own destruction with a call to + QObject::deleteLater(). + + After result() is emitted, the DeleteJob will schedule it's own + destruction by calling QObject::deleteLater(). +*/ +class QGPGME_EXPORT DeleteJob : public Job +{ + Q_OBJECT +protected: + explicit DeleteJob(QObject *parent); +public: + ~DeleteJob(); + + /** + Starts the delete operation. \a key represents the key to + delete, \a allowSecretKeyDeletion specifies if a key may also + be deleted if the secret key part is available, too. + */ + virtual GpgME::Error start(const GpgME::Key &key, bool allowSecretKeyDeletion = false) = 0; + +Q_SIGNALS: + void result(const GpgME::Error &result, const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error()); +}; + +} + +#endif // __KLEO_DELETEJOB_H__ diff --git a/lang/qt/src/downloadjob.h b/lang/qt/src/downloadjob.h new file mode 100644 index 0000000..09eecf6 --- /dev/null +++ b/lang/qt/src/downloadjob.h @@ -0,0 +1,103 @@ +/* + downloadjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __KLEO_DOWNLOADJOB_H__ +#define __KLEO_DOWNLOADJOB_H__ + +#include "job.h" + +#include + +#include + +namespace GpgME +{ +class Error; +} + +class QStringList; +class QIODevice; +class QByteArray; + +namespace QGpgME +{ + +/** + @short An abstract base class for asynchronous downloaders + + To use a DownloadJob, first obtain an instance from the + CryptoBackend implementation, connect the progress() and result() + signals to suitable slots and then start the download with a call + to start(). This call might fail, in which case the DownloadJob + instance will have scheduled it's own destruction with a call to + QObject::deleteLater(). + + After result() is emitted, the DownloadJob will schedule it's own + destruction by calling QObject::deleteLater(). +*/ +class QGPGME_EXPORT DownloadJob : public Job +{ + Q_OBJECT +protected: + explicit DownloadJob(QObject *parent); +public: + ~DownloadJob(); + + /** + Starts the download operation. \a fingerprint is the + fingerprint of the key to download. If \a fingerprint is empty, + contains only whitespace or anything other than a fingerprint, + the result is undefined. + + Output is written to \a keyData, if given. Otherwise, it is + passed as the second argument of result(). + */ + virtual GpgME::Error start(const QByteArray &fingerprint, + const std::shared_ptr &keyData) = 0; + + /** + Starts the download operation. \a fingerprints is a list of + fingerprints used to specify the list of keys downloaded. Empty + patterns are ignored. If \a fingerprints is empty, contains + only empty strings or anything other than fingerprints, the + result is undefined. + */ + virtual QGPGME_DEPRECATED_EXPORT GpgME::Error start(const QStringList &fingerprints) = 0; + +Q_SIGNALS: + void result(const GpgME::Error &result, const QByteArray &keyData, const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error()); +}; + +} + +#endif // __KLEO_DOWNLOADJOB_H__ diff --git a/lang/qt/src/encryptjob.h b/lang/qt/src/encryptjob.h new file mode 100644 index 0000000..4ff9c82 --- /dev/null +++ b/lang/qt/src/encryptjob.h @@ -0,0 +1,136 @@ +/* + encryptjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004, 2007 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __KLEO_ENCRYPTJOB_H__ +#define __KLEO_ENCRYPTJOB_H__ + +#include "job.h" + +#include +#include + +#ifdef BUILDING_QGPGME +# include "context.h" +#else +# include +#endif + +class QByteArray; +class QIODevice; + +namespace GpgME +{ +class Error; +class Key; +class EncryptionResult; +} + +namespace QGpgME +{ + +/** + @short An abstract base class for asynchronous encrypters + + To use a EncryptJob, first obtain an instance from the + CryptoBackend implementation, connect the progress() and result() + signals to suitable slots and then start the encryption with a + call to start(). This call might fail, in which case the + EncryptJob instance will have scheduled it's own destruction with + a call to QObject::deleteLater(). + + After result() is emitted, the EncryptJob will schedule it's own + destruction by calling QObject::deleteLater(). +*/ +class QGPGME_EXPORT EncryptJob : public Job +{ + Q_OBJECT +protected: + explicit EncryptJob(QObject *parent); +public: + ~EncryptJob(); + + /** + Starts the encryption operation. \a recipients is the a list of + keys to encrypt \a plainText to. Empty (null) keys are + ignored. If \a recipients is empty, performs symmetric + (passphrase) encryption. + + If \a alwaysTrust is true, validity checking for the keys will + not be performed, but full validity assumed for all keys + without further checks. + */ + virtual QGPGME_DEPRECATED_EXPORT GpgME::Error start(const std::vector &recipients, + const QByteArray &plainText, bool alwaysTrust = false) = 0; + + /*! + \overload + + If \a cipherText is non-null, the ciphertext is written + there. Otherwise, it will be delivered in the second argument of + result(). + + \throws GpgME::Exception if starting fails + */ + virtual void start(const std::vector &recipients, + const std::shared_ptr &plainText, + const std::shared_ptr &cipherText = std::shared_ptr(), + bool alwaysTrust = false) = 0; + + virtual GpgME::EncryptionResult exec(const std::vector &recipients, + const QByteArray &plainText, + bool alwaysTrust, QByteArray &cipherText) = 0; + /*! + This is a hack to request BASE64 output (instead of whatever + comes out normally). + */ + virtual void setOutputIsBase64Encoded(bool) = 0; + + /** Like start but with an additional argument for EncryptionFlags for + * more flexibility. */ + virtual void start(const std::vector &recipients, + const std::shared_ptr &plainText, + const std::shared_ptr &cipherText = std::shared_ptr(), + const GpgME::Context::EncryptionFlags flags = GpgME::Context::None) = 0; + + /** Like exec but with an additional argument for EncryptionFlags for + * more flexibility. */ + virtual GpgME::EncryptionResult exec(const std::vector &recipients, + const QByteArray &plainText, + const GpgME::Context::EncryptionFlags flags, QByteArray &cipherText) = 0; +Q_SIGNALS: + void result(const GpgME::EncryptionResult &result, const QByteArray &cipherText, const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error()); +}; + +} + +#endif // __KLEO_ENCRYPTJOB_H__ diff --git a/lang/qt/src/exportjob.h b/lang/qt/src/exportjob.h new file mode 100644 index 0000000..583d4c0 --- /dev/null +++ b/lang/qt/src/exportjob.h @@ -0,0 +1,87 @@ +/* + exportjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __QGPGME_EXPORTJOB_H__ +#define __QGPGME_EXPORTJOB_H__ + +#include "qgpgme_export.h" +#include "job.h" + +#include + +namespace GpgME +{ +class Error; +} + +class QStringList; + +namespace QGpgME +{ + +/** + @short An abstract base class for asynchronous exporters + + To use a ExportJob, first obtain an instance from the + CryptoBackend implementation, connect the progress() and result() + signals to suitable slots and then start the export with a call + to start(). This call might fail, in which case the ExportJob + instance will have scheduled it's own destruction with a call to + QObject::deleteLater(). + + After result() is emitted, the ExportJob will schedule it's own + destruction by calling QObject::deleteLater(). +*/ +class QGPGME_EXPORT ExportJob : public Job +{ + Q_OBJECT +protected: + explicit ExportJob(QObject *parent); +public: + ~ExportJob(); + + /** + Starts the export operation. \a patterns is a list of patterns + used to restrict the list of keys exported. Empty patterns are + ignored. If \a patterns is empty or contains only empty + strings, all available keys are exported. + */ + virtual GpgME::Error start(const QStringList &patterns) = 0; + +Q_SIGNALS: + void result(const GpgME::Error &result, const QByteArray &keyData, const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error()); +}; + +} + +#endif // __QGPGME_EXPORTJOB_H__ diff --git a/lang/qt/src/gpgme_backend_debug.cpp b/lang/qt/src/gpgme_backend_debug.cpp new file mode 100644 index 0000000..6dfb313 --- /dev/null +++ b/lang/qt/src/gpgme_backend_debug.cpp @@ -0,0 +1,10 @@ +// This file is autogenerated by CMake: DO NOT EDIT + +#include "gpgme_backend_debug.h" + + +#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) +Q_LOGGING_CATEGORY(GPGPME_BACKEND_LOG, "log_gpgme_backend", QtWarningMsg) +#else +Q_LOGGING_CATEGORY(GPGPME_BACKEND_LOG, "log_gpgme_backend") +#endif diff --git a/lang/qt/src/gpgme_backend_debug.h b/lang/qt/src/gpgme_backend_debug.h new file mode 100644 index 0000000..5ac93db --- /dev/null +++ b/lang/qt/src/gpgme_backend_debug.h @@ -0,0 +1,11 @@ +// This file is autogenerated by CMake: DO NOT EDIT + +#ifndef GPGPME_BACKEND_LOG_H +#define GPGPME_BACKEND_LOG_H + +#include + +Q_DECLARE_LOGGING_CATEGORY(GPGPME_BACKEND_LOG) + + +#endif diff --git a/lang/qt/src/hierarchicalkeylistjob.h b/lang/qt/src/hierarchicalkeylistjob.h new file mode 100644 index 0000000..2ec187d --- /dev/null +++ b/lang/qt/src/hierarchicalkeylistjob.h @@ -0,0 +1,125 @@ +/* + hierarchicalkeylistjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __KLEO_HIERARCHICALKEYLISTJOB_H__ +#define __KLEO_HIERARCHICALKEYLISTJOB_H__ + +#include "qgpgme_export.h" +#include "keylistjob.h" +#include "cryptobackend.h" + +#ifdef BUILDING_QGPGME +# include "keylistresult.h" +#else +#include +#endif + +#include + +#include + +namespace GpgME +{ +class Error; +class Key; +} + +namespace QGpgME +{ +class KeyListJob; +} + +namespace QGpgME +{ + +/** + @short A convenience job that additionally fetches all available issuers. + + To use a HierarchicalKeyListJob, pass it a CryptoBackend + implementation, connect the progress() and result() signals to + suitable slots and then start the keylisting with a call to + start(). This call might fail, in which case the + HierarchicalKeyListJob instance will have scheduled it's own + destruction with a call to QObject::deleteLater(). + + After result() is emitted, the HierarchicalKeyListJob will + schedule its own destruction by calling QObject::deleteLater(). +*/ +class QGPGME_EXPORT HierarchicalKeyListJob : public KeyListJob +{ + Q_OBJECT +public: + explicit HierarchicalKeyListJob(const Protocol *protocol, + bool remote = false, bool includeSigs = false, + bool validating = false); + ~HierarchicalKeyListJob(); + + /** + Starts the keylist operation. \a patterns is a list of patterns + used to restrict the list of keys returned. Empty patterns are + ignored. \a patterns must not be empty or contain only empty + patterns; use the normal KeyListJob for a full listing. + + The \a secretOnly parameter is ignored by + HierarchicalKeyListJob and must be set to false. + */ + GpgME::Error start(const QStringList &patterns, bool secretOnly = false) Q_DECL_OVERRIDE; + + GpgME::KeyListResult exec(const QStringList &patterns, bool secretOnly, + std::vector &keys) Q_DECL_OVERRIDE; + +private Q_SLOTS: + void slotResult(const GpgME::KeyListResult &); + void slotNextKey(const GpgME::Key &key); + /* from Job */ + void slotCancel() Q_DECL_OVERRIDE; + +private: + GpgME::Error startAJob(); + +private: + const Protocol *const mProtocol; + const bool mRemote; + const bool mIncludeSigs; + const bool mValidating; + bool mTruncated; + std::set mSentSet; // keys already sent (prevent duplicates even if the backend should return them) + std::set mScheduledSet; // keys already scheduled (by starting a job for them) + std::set mNextSet; // keys to schedule for the next iteraton + GpgME::KeyListResult mIntermediateResult; + QPointer mJob; +}; + +} + +#endif // __KLEO_HIERARCHICALKEYLISTJOB_H__ diff --git a/lang/qt/src/importfromkeyserverjob.h b/lang/qt/src/importfromkeyserverjob.h new file mode 100644 index 0000000..f548ea7 --- /dev/null +++ b/lang/qt/src/importfromkeyserverjob.h @@ -0,0 +1,84 @@ +/* + importfromkeyserverjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __KLEO_IMPORTFROMKEYSERVERJOB_H__ +#define __KLEO_IMPORTFROMKEYSERVERJOB_H__ + +#include "abstractimportjob.h" +#include "qgpgme_export.h" + +namespace GpgME +{ +class Key; +class Error; +class ImportResult; +} + +#include + +namespace QGpgME +{ + +/** + @short An abstract base class for asynchronous keyserver-importers + + To use a ImportJob, first obtain an instance from the + CryptoBackend implementation, connect the progress() and result() + signals to suitable slots and then start the import with a call + to start(). This call might fail, in which case the ImportJob + instance will have scheduled it's own destruction with a call to + QObject::deleteLater(). + + After result() is emitted, the ImportJob will schedule it's own + destruction by calling QObject::deleteLater(). +*/ +class QGPGME_EXPORT ImportFromKeyserverJob : public AbstractImportJob +{ + Q_OBJECT +protected: + explicit ImportFromKeyserverJob(QObject *parent); +public: + ~ImportFromKeyserverJob(); + + /** + Starts the importing operation. \a keyData contains the data to + import from. + */ + virtual GpgME::Error start(const std::vector &keys) = 0; + + virtual GpgME::ImportResult exec(const std::vector &keys) = 0; +}; + +} + +#endif // __KLEO_IMPORTFROMKEYSERVERJOB_H__ diff --git a/lang/qt/src/importjob.h b/lang/qt/src/importjob.h new file mode 100644 index 0000000..5c7b24d --- /dev/null +++ b/lang/qt/src/importjob.h @@ -0,0 +1,83 @@ +/* + importjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __KLEO_IMPORTJOB_H__ +#define __KLEO_IMPORTJOB_H__ + +#include "abstractimportjob.h" +#include "qgpgme_export.h" + +#include + +namespace GpgME +{ +class Error; +class ImportResult; +} + +namespace QGpgME +{ + +/** + @short An abstract base class for asynchronous importers + + To use a ImportJob, first obtain an instance from the + CryptoBackend implementation, connect the progress() and result() + signals to suitable slots and then start the import with a call + to start(). This call might fail, in which case the ImportJob + instance will have scheduled it's own destruction with a call to + QObject::deleteLater(). + + After result() is emitted, the ImportJob will schedule it's own + destruction by calling QObject::deleteLater(). +*/ +class QGPGME_EXPORT ImportJob : public AbstractImportJob +{ + Q_OBJECT +protected: + explicit ImportJob(QObject *parent); +public: + ~ImportJob(); + + /** + Starts the importing operation. \a keyData contains the data to + import from. + */ + virtual GpgME::Error start(const QByteArray &keyData) = 0; + + virtual GpgME::ImportResult exec(const QByteArray &keyData) = 0; +}; + +} + +#endif // __KLEO_IMPORTJOB_H__ diff --git a/lang/qt/src/job.cpp b/lang/qt/src/job.cpp new file mode 100644 index 0000000..8936ea5 --- /dev/null +++ b/lang/qt/src/job.cpp @@ -0,0 +1,159 @@ +/* + job.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2005 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "job.h" + +#include "keylistjob.h" +#include "listallkeysjob.h" +#include "encryptjob.h" +#include "decryptjob.h" +#include "decryptverifyjob.h" +#include "signjob.h" +#include "signkeyjob.h" +#include "signencryptjob.h" +#include "verifydetachedjob.h" +#include "verifyopaquejob.h" +#include "keygenerationjob.h" +#include "importjob.h" +#include "importfromkeyserverjob.h" +#include "exportjob.h" +#include "changeexpiryjob.h" +#include "changeownertrustjob.h" +#include "changepasswdjob.h" +#include "downloadjob.h" +#include "deletejob.h" +#include "refreshkeysjob.h" +#include "adduseridjob.h" +#include "specialjob.h" +#include "keyformailboxjob.h" +#include "wkspublishjob.h" +#include "tofupolicyjob.h" + +#include +#include + +#include + +QGpgME::Job::Job(QObject *parent) + : QObject(parent) +{ + if (QCoreApplication *app = QCoreApplication::instance()) { + connect(app, &QCoreApplication::aboutToQuit, this, &Job::slotCancel); + } +} + +QGpgME::Job::~Job() +{ + +} + +QString QGpgME::Job::auditLogAsHtml() const +{ + qDebug() << "QGpgME::Job::auditLogAsHtml() should be reimplemented in Kleo::Job subclasses!"; + return QString(); +} + +GpgME::Error QGpgME::Job::auditLogError() const +{ + qDebug() << "QGpgME::Job::auditLogError() should be reimplemented in Kleo::Job subclasses!"; + return GpgME::Error::fromCode(GPG_ERR_NOT_IMPLEMENTED); +} + +bool QGpgME::Job::isAuditLogSupported() const +{ + return auditLogError().code() != GPG_ERR_NOT_IMPLEMENTED; +} + +#define make_job_subclass_ext(x,y) \ + QGpgME::x::x( QObject * parent ) : y( parent ) {} \ + QGpgME::x::~x() {} + +#define make_job_subclass(x) make_job_subclass_ext(x,Job) + +make_job_subclass(KeyListJob) +make_job_subclass(ListAllKeysJob) +make_job_subclass(EncryptJob) +make_job_subclass(DecryptJob) +make_job_subclass(DecryptVerifyJob) +make_job_subclass(SignJob) +make_job_subclass(SignEncryptJob) +make_job_subclass(SignKeyJob) +make_job_subclass(VerifyDetachedJob) +make_job_subclass(VerifyOpaqueJob) +make_job_subclass(KeyGenerationJob) +make_job_subclass(AbstractImportJob) +make_job_subclass_ext(ImportJob, AbstractImportJob) +make_job_subclass_ext(ImportFromKeyserverJob, AbstractImportJob) +make_job_subclass(ExportJob) +make_job_subclass(ChangeExpiryJob) +make_job_subclass(ChangeOwnerTrustJob) +make_job_subclass(ChangePasswdJob) +make_job_subclass(DownloadJob) +make_job_subclass(DeleteJob) +make_job_subclass(RefreshKeysJob) +make_job_subclass(AddUserIDJob) +make_job_subclass(SpecialJob) +make_job_subclass(KeyForMailboxJob) +make_job_subclass(WKSPublishJob) +make_job_subclass(TofuPolicyJob) + +#undef make_job_subclass + +#include "job.moc" + +#include "keylistjob.moc" +#include "listallkeysjob.moc" +#include "encryptjob.moc" +#include "decryptjob.moc" +#include "decryptverifyjob.moc" +#include "signjob.moc" +#include "signencryptjob.moc" +#include "signkeyjob.moc" +#include "verifydetachedjob.moc" +#include "verifyopaquejob.moc" +#include "keygenerationjob.moc" +#include "abstractimportjob.moc" +#include "importjob.moc" +#include "importfromkeyserverjob.moc" +#include "exportjob.moc" +#include "changeexpiryjob.moc" +#include "changeownertrustjob.moc" +#include "changepasswdjob.moc" +#include "downloadjob.moc" +#include "deletejob.moc" +#include "refreshkeysjob.moc" +#include "adduseridjob.moc" +#include "specialjob.moc" +#include "keyformailboxjob.moc" +#include "wkspublishjob.moc" +#include "tofupolicyjob.moc" diff --git a/lang/qt/src/job.h b/lang/qt/src/job.h new file mode 100644 index 0000000..5767729 --- /dev/null +++ b/lang/qt/src/job.h @@ -0,0 +1,92 @@ +/* + job.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __KLEO_JOB_H__ +#define __KLEO_JOB_H__ + +#include "qgpgme_export.h" + +#include +#include + +#ifdef BUILDING_QGPGME +# include "error.h" +#else +# include +#endif + +class QWidget; + +namespace QGpgME +{ + +/** + @short An abstract base class for asynchronous crypto operations + + During the operation, you might receive progress updates through + the progress() signal as they arrive, but an implementation is + free to not send progress information. You should show a busy + progressbar until the first progress() signal is received. + + The done() signal is emitted _before_ the result() signals of + subclasses and should be used to hide and/or reset progress bars, + not to learn of the end of the operation. Use the result() + signals for that. + + To cancel the operation, simply call slotCancel(). The result() + signal of subclasses will still be emitted, though, and will + carry the information that the operation was canceled. +*/ +class QGPGME_EXPORT Job : public QObject +{ + Q_OBJECT +protected: + explicit Job(QObject *parent); +public: + ~Job(); + + virtual QString auditLogAsHtml() const; + virtual GpgME::Error auditLogError() const; + bool isAuditLogSupported() const; + +public Q_SLOTS: + virtual void slotCancel() = 0; + +Q_SIGNALS: + void progress(const QString &what, int current, int total); + void done(); +}; + +} + +#endif // __KLEO_JOB_H__ diff --git a/lang/qt/src/keyformailboxjob.h b/lang/qt/src/keyformailboxjob.h new file mode 100644 index 0000000..d8b6c6b --- /dev/null +++ b/lang/qt/src/keyformailboxjob.h @@ -0,0 +1,106 @@ +/* + keyformailboxjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ +#ifndef __KLEO_KEYFORMAILBOX_H__ +#define __KLEO_KEYFORMAILBOX_H__ + +#include + +#include "job.h" + +#ifdef BUILDING_QGPGME +# include "key.h" +#else +# include +#endif + +namespace GpgME +{ +class Error; +class KeyListResult; +} + +namespace QGpgME +{ + +/** + @short Get the best key to use for a Mailbox + + To use the keyformailboxjob, first obtain an instance from the + CryptoBackend and either exec it or start and + conncet the result() signals to a suitable slot. + The job will be automatically deleted in which + case the KeylistJob instance will have schedules it's own + destruction with a call to QObject::deleteLater(). + + The best key is defined as the key with a UID that has an + E-Mail that matches the mailbox provided. If multiple + keys are found the one with the highest validity is returned. + + After result() is emitted, the + KeyListJob will schedule it's own destruction by calling + QObject::deleteLater(). +*/ +class QGPGME_EXPORT KeyForMailboxJob: public Job +{ + Q_OBJECT +protected: + explicit KeyForMailboxJob(QObject *parent); + +public: + ~KeyForMailboxJob(); + + /** + Starts the operation. \a mailbox is the mailbox to + look for. + + The result is the same as for the LocateKeysJob. + + If \a canEncrypt is true, only keys that have a subkey for encryption + usage are returned. Use this if you need to select a + key for signing. + */ + virtual GpgME::Error start(const QString &mailbox, bool canEncrypt = true) = 0; + + virtual GpgME::KeyListResult exec(const QString &mailbox, bool canEncrypt, GpgME::Key &key, GpgME::UserID &uid) = 0; + +Q_SIGNALS: + /** The result. \a Key is the key found or a Null key. + * + * The userid is the uid where the mailbox matches. + * + * The auditlog params are always null / empty. + */ + void result(const GpgME::KeyListResult &result, const GpgME::Key &key, const GpgME::UserID &uid, const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error()); +}; + +} +#endif diff --git a/lang/qt/src/keygenerationjob.h b/lang/qt/src/keygenerationjob.h new file mode 100644 index 0000000..a0beeac --- /dev/null +++ b/lang/qt/src/keygenerationjob.h @@ -0,0 +1,85 @@ +/* + keygenerationjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __KLEO_KEYGENERATIONJOB_H__ +#define __KLEO_KEYGENERATIONJOB_H__ + +#include "job.h" +#include "qgpgme_export.h" + +#include + +namespace GpgME +{ +class Error; +class KeyGenerationResult; +} + +namespace QGpgME +{ + +/** + @short An abstract base class for asynchronous key generation + + To use a KeyGenerationJob, first obtain an instance from the + CryptoBackend implementation, connect the progress() and result() + signals to suitable slots and then start the key generation with + a call to start(). This call might fail, in which case the + KeyGenerationJob instance will have scheduled it's own + destruction with a call to QObject::deleteLater(). + + After result() is emitted, the KeyGenerationJob will schedule it's own + destruction by calling QObject::deleteLater(). +*/ +class QGPGME_EXPORT KeyGenerationJob : public Job +{ + Q_OBJECT +protected: + explicit KeyGenerationJob(QObject *parent); +public: + ~KeyGenerationJob(); + + /** + Starts the key generation operation. \a parameters is a + backend-specific string containing the parameters of the key to + create (length, capabilities, etc). + */ + virtual GpgME::Error start(const QString ¶meters) = 0; + +Q_SIGNALS: + void result(const GpgME::KeyGenerationResult &result, const QByteArray &pubKeyData, const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error()); +}; + +} + +#endif // __KLEO_KEYGENERATIONJOB_H__ diff --git a/lang/qt/src/keylistjob.h b/lang/qt/src/keylistjob.h new file mode 100644 index 0000000..8dc736e --- /dev/null +++ b/lang/qt/src/keylistjob.h @@ -0,0 +1,109 @@ +/* + keylistjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __KLEO_KEYLISTJOB_H__ +#define __KLEO_KEYLISTJOB_H__ + +#include "job.h" +#include "qgpgme_export.h" + +#ifdef BUILDING_QGPGME +# include "key.h" +#else +# include +#endif + +#include + +namespace GpgME +{ +class Error; +class KeyListResult; +} + +class QStringList; + +namespace QGpgME +{ + +/** + @short An abstract base class for asynchronous key listers + + To use a KeyListJob, first obtain an instance from the + CryptoBackend implementation, connect the nextKey(), progress() + and result() signals to suitable slots and then start the key + listing with a call to start(). This call might fail, in which + case the KeylistJob instance will have schedules it's own + destruction with a call to QObject::deleteLater(). + + During keylisting, you will receive new key objects through the + nextKey() signal as they arrive. After result() is emitted, the + KeyListJob will schedule it's own destruction by calling + QObject::deleteLater(). +*/ +class QGPGME_EXPORT KeyListJob : public Job +{ + Q_OBJECT +protected: + explicit KeyListJob(QObject *parent); + +public: + ~KeyListJob(); + + /** + Starts the keylist operation. \a pattern is a list of patterns + used to restrict the list of keys returned. Empty patterns are + ignored. If \a pattern is empty or contains only empty strings, + all keys are returned (however, the backend is free to truncate + the result and should do so; when this happens, it will be + reported by the reult object). + + If \a secretOnly is true, only keys for which the secret key is + also available are returned. Use this if you need to select a + key for signing. + */ + virtual GpgME::Error start(const QStringList &patterns, bool secretOnly = false) = 0; + + virtual GpgME::KeyListResult exec(const QStringList &patterns, bool secretOnly, std::vector &keys) = 0; + + /** Add a flag to the keylistmode used. */ + virtual void addMode(GpgME::KeyListMode mode) = 0; + +Q_SIGNALS: + void nextKey(const GpgME::Key &key); + void result(const GpgME::KeyListResult &result, const std::vector &keys = std::vector(), const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error()); +}; + +} + +#endif // __KLEO_KEYLISTJOB_H__ diff --git a/lang/qt/src/listallkeysjob.h b/lang/qt/src/listallkeysjob.h new file mode 100644 index 0000000..4fbb469 --- /dev/null +++ b/lang/qt/src/listallkeysjob.h @@ -0,0 +1,104 @@ +/* + listallkeysjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __KLEO_LISTALLKEYSJOB_H__ +#define __KLEO_LISTALLKEYSJOB_H__ + +#include "job.h" +#include "qgpgme_export.h" + +#ifdef BUILDING_QGPGME +# include "key.h" +#else +# include +#endif + +#include + +namespace GpgME +{ +class Error; +class KeyListResult; +} + +namespace QGpgME +{ + +/** + @short An abstract base class for asynchronously listing all keys + + To use a ListAllKeysJob, first obtain an instance from the + CryptoBackend implementation, connect the progress() + and result() signals to suitable slots and then start the key + listing with a call to start(). This call might fail, in which + case the ListAllKeysJob instance will have schedules it's own + destruction with a call to QObject::deleteLater(). + + After result() is emitted, the ListAllKeysJob will schedule it's + own destruction by calling QObject::deleteLater(). + + This is potentially much faster than a KeyListJob with empty + pattern. +*/ +class QGPGME_EXPORT ListAllKeysJob : public Job +{ + Q_OBJECT +protected: + explicit ListAllKeysJob(QObject *parent); + +public: + ~ListAllKeysJob(); + + /** + Starts the listallkeys operation. In general, all keys are + returned (however, the backend is free to truncate the result + and should do so; when this happens, it will be reported by the + result object). + + If \a mergeKeys is true, secret keys are merged into public + keys. + */ + virtual GpgME::Error start(bool mergeKeys = false) = 0; + + /** + Synchronous version of start(). + */ + virtual GpgME::KeyListResult exec(std::vector &pub, std::vector &sec, bool mergeKeys = false) = 0; + +Q_SIGNALS: + void result(const GpgME::KeyListResult &result, const std::vector &pub = std::vector(), const std::vector &sec = std::vector(), const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error()); +}; + +} + +#endif // __KLEO_LISTALLKEYSJOB_H__ diff --git a/lang/qt/src/multideletejob.h b/lang/qt/src/multideletejob.h new file mode 100644 index 0000000..8915cd1 --- /dev/null +++ b/lang/qt/src/multideletejob.h @@ -0,0 +1,107 @@ +/* + multideletejob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __KLEO_MULTIDELETEJOB_H__ +#define __KLEO_MULTIDELETEJOB_H__ + +#include "qgpgme_export.h" +#include "job.h" +#include "cryptobackend.h" + +#include + +#include + +namespace GpgME +{ +class Error; +class Key; +} + +namespace QGpgME +{ +class DeleteJob; +} + +namespace QGpgME +{ + +/** + @short A convenience class bundling together multiple DeleteJobs. + + To use a MultiDeleteJob, pass it a CryptoBackend implementation, + connect the progress() and result() signals to suitable slots and + then start the delete with a call to start(). This call might + fail, in which case the MultiDeleteJob instance will have scheduled + it's own destruction with a call to QObject::deleteLater(). + + After result() is emitted, the MultiDeleteJob will schedule it's own + destruction by calling QObject::deleteLater(). +*/ +class QGPGME_EXPORT MultiDeleteJob : public Job +{ + Q_OBJECT +public: + explicit MultiDeleteJob(const Protocol *protocol); + ~MultiDeleteJob(); + + /** + Starts the delete operation. \a keys is the list of keys to + delete, \a allowSecretKeyDeletion specifies if a key may also + be deleted if the secret key part is available, too. + */ + GpgME::Error start(const std::vector &keys, bool allowSecretKeyDeletion = false); + + /* from Job */ + void slotCancel() Q_DECL_OVERRIDE; + +Q_SIGNALS: + void result(const GpgME::Error &result, const GpgME::Key &errorKey); + +private Q_SLOTS: + void slotResult(const GpgME::Error &); + +private: + GpgME::Error startAJob(); + +private: + const Protocol *mProtocol; + QPointer mJob; + std::vector mKeys; + std::vector::const_iterator mIt; + bool mAllowSecretKeyDeletion; +}; + +} + +#endif // __KLEO_MULTIDELETEJOB_H__ diff --git a/lang/qt/src/protocol.h b/lang/qt/src/protocol.h new file mode 100644 index 0000000..40ddcb5 --- /dev/null +++ b/lang/qt/src/protocol.h @@ -0,0 +1,183 @@ +/* + protocol.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2005 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ +#ifndef __QGPGME_PROTOCOL_H__ +#define __QGPGME_PROTOCOL_H__ + +#include +#include + +#include "qgpgme_export.h" + +namespace QGpgME { +class CryptoConfig; +class KeyListJob; +class ListAllKeysJob; +class KeyGenerationJob; +class ImportJob; +class ImportFromKeyserverJob; +class ExportJob; +class DownloadJob; +class DeleteJob; +class EncryptJob; +class DecryptJob; +class SignJob; +class SignKeyJob; +class VerifyDetachedJob; +class VerifyOpaqueJob; +class SignEncryptJob; +class DecryptVerifyJob; +class RefreshKeysJob; +class ChangeExpiryJob; +class ChangeOwnerTrustJob; +class ChangePasswdJob; +class AddUserIDJob; +class SpecialJob; +class KeyForMailboxJob; +class WKSPublishJob; +class TofuPolicyJob; + +/** The main entry point for QGpgME Comes in OpenPGP and SMIME(CMS) flavors. + * + * Use the proctocol class to obtain an instance of a job. Jobs + * provide async API for GnuPG that can be connected to signals / slots. + * + * A job is usually started with start() and emits a result signal. + * The parameters of the result signal depend on the job but the last + * two are always a QString for the auditlog and an GpgME::Error for + * an eventual error. + * + * In case async API is used and the result signal is emited a + * job schedules its own deletion. + * + * Most jobs also provide a synchronous call exec in which case + * you have to explicitly delete the job if you don't need it anymore. + * + * \code + * // Async example: + * KeyListJob *job = openpgp()->keyListJob(); + * connect(job, &KeyListJob::result, job, [this, job](KeyListResult, std::vector keys, QString, Error) + * { + * // keys and resuls can now be used. + * }); + * \endcode + * + * \code + * // Sync eaxmple: + * KeyListJob *job = openpgp()->keyListJob(false, false, false); + * std::vector keys; + * GpgME::KeyListResult result = job->exec(QStringList() << + * QStringLiteral("alfa@example.net"), + * false, keys); + * delete job; + * \endcode + */ +class QGPGME_EXPORT Protocol +{ +public: + virtual ~Protocol() {} + + virtual QString name() const = 0; + + virtual QString displayName() const = 0; + + virtual KeyListJob *keyListJob(bool remote = false, bool includeSigs = false, bool validate = false) const = 0; + virtual ListAllKeysJob *listAllKeysJob(bool includeSigs = false, bool validate = false) const = 0; + virtual EncryptJob *encryptJob(bool armor = false, bool textmode = false) const = 0; + virtual DecryptJob *decryptJob() const = 0; + virtual SignJob *signJob(bool armor = false, bool textMode = false) const = 0; + virtual VerifyDetachedJob *verifyDetachedJob(bool textmode = false) const = 0; + virtual VerifyOpaqueJob *verifyOpaqueJob(bool textmode = false) const = 0; + virtual KeyGenerationJob *keyGenerationJob() const = 0; + 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; + virtual DownloadJob *downloadJob(bool armor = false) const = 0; + virtual DeleteJob *deleteJob() const = 0; + virtual SignEncryptJob *signEncryptJob(bool armor = false, bool textMode = false) const = 0; + virtual DecryptVerifyJob *decryptVerifyJob(bool textmode = false) const = 0; + virtual RefreshKeysJob *refreshKeysJob() const = 0; + virtual ChangeExpiryJob *changeExpiryJob() const = 0; + virtual SignKeyJob *signKeyJob() const = 0; + virtual ChangePasswdJob *changePasswdJob() const = 0; + virtual ChangeOwnerTrustJob *changeOwnerTrustJob() const = 0; + virtual AddUserIDJob *addUserIDJob() const = 0; + virtual SpecialJob *specialJob(const char *type, const QMap &args) const = 0; + + /** A key locate job. + * + * This tries to find a key in local + * and remote sources, if the key was remote it is imported + * by GnuPG. Same as KeyListJob but intended to be used + * to locate keys automatically. This ends up calling --locate-keys. + * + * Only available for OpenPGP + * + * Results are validated. As if keyListJob was called + * with both includeSigs and validate options. + */ + virtual KeyListJob *locateKeysJob() const = 0; + /** Find the best key to use for a mailbox. */ + virtual KeyForMailboxJob *keyForMailboxJob() const = 0; + + /** A Job for interacting with gnupg's wks tools. */ + virtual WKSPublishJob *wksPublishJob() const = 0; + + /** A Job to set tofu policy */ + virtual TofuPolicyJob *tofuPolicyJob() const = 0; +}; + +/** Obtain a reference to the OpenPGP Protocol. + * + * The reference is to a static object. + * @returns Refrence to the OpenPGP Protocol. + */ +QGPGME_EXPORT Protocol *openpgp(); + +/** Obtain a reference to the smime Protocol. + * + * The reference is to a static object. + * @returns Refrence to the smime Protocol. + */ +QGPGME_EXPORT Protocol *smime(); + +/** Obtain a reference to a cryptoConfig object. + * + * The reference is to a static object. + * @returns reference to cryptoConfig object. + */ +QGPGME_EXPORT CryptoConfig *cryptoConfig(); + +} +#endif diff --git a/lang/qt/src/protocol_p.h b/lang/qt/src/protocol_p.h new file mode 100644 index 0000000..7f66fa4 --- /dev/null +++ b/lang/qt/src/protocol_p.h @@ -0,0 +1,419 @@ +/* + protocol_p.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2005 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ +#ifndef __QGPGME_PROTOCOL_P_H__ +#define __QGPGME_PROTOCOL_P_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 "qgpgmekeyformailboxjob.h" +#include "qgpgmewkspublishjob.h" +#include "qgpgmetofupolicyjob.h" + +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 &) 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::KeyListJob *locateKeysJob() const Q_DECL_OVERRIDE + { + if (mProtocol != GpgME::OpenPGP) { + return Q_NULLPTR; + } + GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); + if (!context) { + return Q_NULLPTR; + } + context->setKeyListMode(GpgME::Extern | GpgME::Local | GpgME::Signatures | GpgME::Validate); + return new QGpgME::QGpgMEKeyListJob(context); + } + + QGpgME::KeyForMailboxJob *keyForMailboxJob() const Q_DECL_OVERRIDE + { + GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); + if (!context) { + return Q_NULLPTR; + } + return new QGpgME::QGpgMEKeyForMailboxJob(context); + } + + QGpgME::WKSPublishJob *wksPublishJob() const Q_DECL_OVERRIDE + { + if (mProtocol != GpgME::OpenPGP) { + return Q_NULLPTR; + } + auto context = GpgME::Context::createForEngine(GpgME::SpawnEngine); + if (!context) { + return Q_NULLPTR; + } + return new QGpgME::QGpgMEWKSPublishJob(context.release()); + } + + QGpgME::TofuPolicyJob *tofuPolicyJob() const Q_DECL_OVERRIDE + { + if (mProtocol != GpgME::OpenPGP) { + return Q_NULLPTR; + } + GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol); + if (!context) { + return Q_NULLPTR; + } + return new QGpgME::QGpgMETofuPolicyJob(context); + } +}; + +} +#endif diff --git a/lang/qt/src/qgpgme_export.h b/lang/qt/src/qgpgme_export.h new file mode 100644 index 0000000..ceb3888 --- /dev/null +++ b/lang/qt/src/qgpgme_export.h @@ -0,0 +1,73 @@ +/*qgpgme_export.h - Export macros for qgpgme + Copyright (C) 2016, Intevation GmbH + + This file is part of GPGME++. + + GPGME++ is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + GPGME++ is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with GPGME++; see the file COPYING.LIB. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef QGPGME_EXPORT_H +#define QGPGME_EXPORT_H + +#ifdef QGPGME_STATIC_DEFINE +# define QGPGME_EXPORT +# define QGPGME_NO_EXPORT +#else +# ifndef QGPGME_EXPORT +# ifdef BUILDING_QGPGME + /* We are building this library */ +# ifdef WIN32 +# define QGPGME_EXPORT __declspec(dllexport) +# else +# define QGPGME_EXPORT __attribute__((visibility("default"))) +# endif +# else + /* We are using this library */ +# ifdef WIN32 +# define QGPGME_EXPORT __declspec(dllimport) +# else +# define QGPGME_EXPORT __attribute__((visibility("default"))) +# endif +# endif +# endif + +# ifndef QGPGME_NO_EXPORT +# ifdef WIN32 +# define QGPGME_NO_EXPORT +# else +# define QGPGME_NO_EXPORT __attribute__((visibility("hidden"))) +# endif +# endif +#endif + +#ifndef QGPGME_DEPRECATED +# define QGPGME_DEPRECATED __attribute__ ((__deprecated__)) +#endif + +#ifndef QGPGME_DEPRECATED_EXPORT +# define QGPGME_DEPRECATED_EXPORT QGPGME_EXPORT QGPGME_DEPRECATED +#endif + +#ifndef QGPGME_DEPRECATED_NO_EXPORT +# define QGPGME_DEPRECATED_NO_EXPORT QGPGME_NO_EXPORT QGPGME_DEPRECATED +#endif + +#define DEFINE_NO_DEPRECATED 0 +#if DEFINE_NO_DEPRECATED +# define QGPGME_NO_DEPRECATED +#endif + +#endif diff --git a/lang/qt/src/qgpgme_version.h.in b/lang/qt/src/qgpgme_version.h.in new file mode 100644 index 0000000..9fbe965 --- /dev/null +++ b/lang/qt/src/qgpgme_version.h.in @@ -0,0 +1,32 @@ +/*qgpgme_version.h - Version macros for qgpgme + Copyright (C) 2016, Intevation GmbH + + This file is part of GPGME++. + + GPGME++ is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + GPGME++ is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with GPGME++; see the file COPYING.LIB. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + + +#ifndef QGPGME_VERSION_H +#define QGPGME_VERSION_H + +#define QGPGME_VERSION_STRING "@LIBQGPGME_LT_CURRENT@.@LIBQGPGME_LT_AGE@.@LIBQGPGME_LT_REVISION@" +#define QGPGME_VERSION_MAJOR @LIBQGPGME_LT_CURRENT@ +#define QGPGME_VERSION_MINOR @LIBQGPGME_LT_AGE@ +#define QGPGME_VERSION_PATCH @LIBQGPGME_LT_REVISION@ +#define QGPGME_VERSION ((@LIBQGPGME_LT_CURRENT@<<16)|(@LIBQGPGME_LT_AGE@<<8)|(@LIBQGPGME_LT_REVISION@)) + +#endif diff --git a/lang/qt/src/qgpgmeadduseridjob.cpp b/lang/qt/src/qgpgmeadduseridjob.cpp new file mode 100644 index 0000000..eb3bfab --- /dev/null +++ b/lang/qt/src/qgpgmeadduseridjob.cpp @@ -0,0 +1,80 @@ +/* + qgpgmeadduseridjob.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "qgpgmeadduseridjob.h" + +#include "dataprovider.h" + +#include "context.h" +#include "data.h" +#include "gpgadduserideditinteractor.h" +#include "key.h" + +#include +#include + +using namespace QGpgME; +using namespace GpgME; + +QGpgMEAddUserIDJob::QGpgMEAddUserIDJob(Context *context) + : mixin_type(context) +{ + lateInitialization(); +} + +QGpgMEAddUserIDJob::~QGpgMEAddUserIDJob() {} + +static QGpgMEAddUserIDJob::result_type add_user_id(Context *ctx, const Key &key, const QString &name, const QString &email, const QString &comment) +{ + + GpgAddUserIDEditInteractor *gau = new GpgAddUserIDEditInteractor; + + gau->setNameUtf8(name.toUtf8().constData()); + gau->setEmailUtf8(email.toUtf8().constData()); + gau->setCommentUtf8(comment.toUtf8().constData()); + + QGpgME::QByteArrayDataProvider dp; + Data data(&dp); + assert(!data.isNull()); + const Error err = ctx->edit(key, std::unique_ptr (gau), data); + Error ae; + const QString log = _detail::audit_log_as_html(ctx, ae); + return std::make_tuple(err, log, ae); +} + +Error QGpgMEAddUserIDJob::start(const Key &key, const QString &name, const QString &email, const QString &comment) +{ + run(std::bind(&add_user_id, std::placeholders::_1, key, name, email, comment)); + return Error(); +} +#include "qgpgmeadduseridjob.moc" diff --git a/lang/qt/src/qgpgmeadduseridjob.h b/lang/qt/src/qgpgmeadduseridjob.h new file mode 100644 index 0000000..294eb6c --- /dev/null +++ b/lang/qt/src/qgpgmeadduseridjob.h @@ -0,0 +1,65 @@ +/* + qgpgmeadduseridjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __QGPGME_QGPGMEADDUSERIDJOB_H__ +#define __QGPGME_QGPGMEADDUSERIDJOB_H__ + +#include "adduseridjob.h" + +#include "threadedjobmixin.h" + +namespace QGpgME +{ + +class QGpgMEAddUserIDJob +#ifdef Q_MOC_RUN + : public AddUserIDJob +#else + : public _detail::ThreadedJobMixin +#endif +{ + Q_OBJECT +#ifdef Q_MOC_RUN +private Q_SLOTS: + void slotFinished(); +#endif +public: + explicit QGpgMEAddUserIDJob(GpgME::Context *context); + ~QGpgMEAddUserIDJob(); + + /* from AddUserIDJob */ + GpgME::Error start(const GpgME::Key &key, const QString &name, const QString &email, const QString &comment) Q_DECL_OVERRIDE; +}; +} + +#endif // __QGPGME_QGPGMEADDUSERIDJOB_H__ diff --git a/lang/qt/src/qgpgmebackend.cpp b/lang/qt/src/qgpgmebackend.cpp new file mode 100644 index 0000000..797e58a --- /dev/null +++ b/lang/qt/src/qgpgmebackend.cpp @@ -0,0 +1,203 @@ +/* + qgpgmebackend.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2005 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "qgpgmebackend.h" + + +#include "error.h" +#include "engineinfo.h" + +#include "protocol_p.h" + +#include +#include + +const char QGpgME::QGpgMEBackend::OpenPGP[] = "OpenPGP"; +const char QGpgME::QGpgMEBackend::SMIME[] = "SMIME"; + + +QGpgME::QGpgMEBackend::QGpgMEBackend() + : mCryptoConfig(0), + mOpenPGPProtocol(0), + mSMIMEProtocol(0) +{ + GpgME::initializeLibrary(); +} + +QGpgME::QGpgMEBackend::~QGpgMEBackend() +{ + delete mCryptoConfig; mCryptoConfig = 0; + delete mOpenPGPProtocol; mOpenPGPProtocol = 0; + delete mSMIMEProtocol; mSMIMEProtocol = 0; +} + +QString QGpgME::QGpgMEBackend::name() const +{ + return QStringLiteral("gpgme"); +} + +QString QGpgME::QGpgMEBackend::displayName() const +{ + return QStringLiteral("GpgME"); +} + +QGpgME::CryptoConfig *QGpgME::QGpgMEBackend::config() const +{ + if (!mCryptoConfig) { + if (GpgME::hasFeature(GpgME::GpgConfEngineFeature, 0)) { + mCryptoConfig = new QGpgMENewCryptoConfig; + } + } + return mCryptoConfig; +} + +static bool check(GpgME::Protocol proto, QString *reason) +{ + if (!GpgME::checkEngine(proto)) { + return true; + } + if (!reason) { + return false; + } + // error, check why: +#if 0 +Port away from localised string or delete. + const GpgME::EngineInfo ei = GpgME::engineInfo(proto); + if (ei.isNull()) { + *reason = i18n("GPGME was compiled without support for %1.", proto == GpgME::CMS ? QLatin1String("S/MIME") : QLatin1String("OpenPGP")); + } else if (ei.fileName() && !ei.version()) { + *reason = i18n("Engine %1 is not installed properly.", QFile::decodeName(ei.fileName())); + } else if (ei.fileName() && ei.version() && ei.requiredVersion()) + *reason = i18n("Engine %1 version %2 installed, " + "but at least version %3 is required.", + QFile::decodeName(ei.fileName()), QLatin1String(ei.version()), QLatin1String(ei.requiredVersion())); + else { + *reason = i18n("Unknown problem with engine for protocol %1.", proto == GpgME::CMS ? QLatin1String("S/MIME") : QLatin1String("OpenPGP")); + } +#endif + return false; +} + +bool QGpgME::QGpgMEBackend::checkForOpenPGP(QString *reason) const +{ + return check(GpgME::OpenPGP, reason); +} + +bool QGpgME::QGpgMEBackend::checkForSMIME(QString *reason) const +{ + return check(GpgME::CMS, reason); +} + +bool QGpgME::QGpgMEBackend::checkForProtocol(const char *name, QString *reason) const +{ + if (qstricmp(name, OpenPGP) == 0) { + return check(GpgME::OpenPGP, reason); + } + if (qstricmp(name, SMIME) == 0) { + return check(GpgME::CMS, reason); + } + if (reason) { + *reason = QStringLiteral("Unsupported protocol \"%1\"").arg(QLatin1String(name)); + } + return false; +} + +QGpgME::Protocol *QGpgME::QGpgMEBackend::openpgp() const +{ + if (!mOpenPGPProtocol) + if (checkForOpenPGP()) { + mOpenPGPProtocol = new ::Protocol(GpgME::OpenPGP); + } + return mOpenPGPProtocol; +} + +QGpgME::Protocol *QGpgME::QGpgMEBackend::smime() const +{ + if (!mSMIMEProtocol) + if (checkForSMIME()) { + mSMIMEProtocol = new ::Protocol(GpgME::CMS); + } + return mSMIMEProtocol; +} + +QGpgME::Protocol *QGpgME::QGpgMEBackend::protocol(const char *name) const +{ + if (qstricmp(name, OpenPGP) == 0) { + return openpgp(); + } + if (qstricmp(name, SMIME) == 0) { + return smime(); + } + return 0; +} + +bool QGpgME::QGpgMEBackend::supportsProtocol(const char *name) const +{ + return qstricmp(name, OpenPGP) == 0 || qstricmp(name, SMIME) == 0; +} + +const char *QGpgME::QGpgMEBackend::enumerateProtocols(int i) const +{ + switch (i) { + case 0: return OpenPGP; + case 1: return SMIME; + default: return 0; + } +} + +static QGpgME::QGpgMEBackend *gpgmeBackend; + +QGpgME::CryptoConfig *QGpgME::cryptoConfig() +{ + if (!gpgmeBackend) { + gpgmeBackend = new QGpgME::QGpgMEBackend(); + } + return gpgmeBackend->config(); + +} + +QGpgME::Protocol *QGpgME::openpgp() +{ + if (!gpgmeBackend) { + gpgmeBackend = new QGpgME::QGpgMEBackend(); + } + return gpgmeBackend->openpgp(); +} + +QGpgME::Protocol *QGpgME::smime() +{ + if (!gpgmeBackend) { + gpgmeBackend = new QGpgME::QGpgMEBackend(); + } + return gpgmeBackend->smime(); +} diff --git a/lang/qt/src/qgpgmebackend.h b/lang/qt/src/qgpgmebackend.h new file mode 100644 index 0000000..cca8b71 --- /dev/null +++ b/lang/qt/src/qgpgmebackend.h @@ -0,0 +1,92 @@ +/* + qgpgmebackend.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2005 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __QGPGME_QGPGMEBACKEND_H__ +#define __QGPGME_QGPGMEBACKEND_H__ + +#include + +#include "protocol.h" + +class QString; +template class QMap; + +namespace QGpgME +{ +class CryptoConfig; +class Protocol; + + +class QGpgMEBackend +{ +public: + QGpgMEBackend(); + ~QGpgMEBackend(); + + QString name() const; + QString displayName() const; + + CryptoConfig *config() const; + + Protocol *openpgp() const; + Protocol *smime() const; + Protocol *protocol(const char *name) const; + + static const char OpenPGP[]; + static const char SMIME[]; + + bool checkForOpenPGP(QString *reason = Q_NULLPTR) const; + bool checkForSMIME(QString *reason = Q_NULLPTR) const; + bool checkForProtocol(const char *name, QString *reason) const; + + bool supportsOpenPGP() const + { + return true; + } + bool supportsSMIME() const + { + return true; + } + bool supportsProtocol(const char *name) const; + + const char *enumerateProtocols(int i) const; + +private: + mutable QGpgME::CryptoConfig *mCryptoConfig; + mutable Protocol *mOpenPGPProtocol; + mutable Protocol *mSMIMEProtocol; +}; + +} + +#endif // __QGPGME_QGPGMEBACKEND_H__ diff --git a/lang/qt/src/qgpgmechangeexpiryjob.cpp b/lang/qt/src/qgpgmechangeexpiryjob.cpp new file mode 100644 index 0000000..43ceee3 --- /dev/null +++ b/lang/qt/src/qgpgmechangeexpiryjob.cpp @@ -0,0 +1,80 @@ +/* + qgpgmechangeexpiryjob.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "qgpgmechangeexpiryjob.h" + +#include "dataprovider.h" + +#include "context.h" +#include "data.h" +#include "gpgsetexpirytimeeditinteractor.h" +#include "key.h" + +#include + +#include +#include +#include + +using namespace QGpgME; +using namespace GpgME; + +QGpgMEChangeExpiryJob::QGpgMEChangeExpiryJob(Context *context) + : mixin_type(context) +{ + lateInitialization(); +} + +QGpgMEChangeExpiryJob::~QGpgMEChangeExpiryJob() {} + +static QGpgMEChangeExpiryJob::result_type change_expiry(Context *ctx, const Key &key, const QDateTime &expiry) +{ + EditInteractor *ei = expiry.isValid() + ? new GpgSetExpiryTimeEditInteractor(expiry.date().toString(Qt::ISODate).toStdString()) + : new GpgSetExpiryTimeEditInteractor(); + + QGpgME::QByteArrayDataProvider dp; + Data data(&dp); + assert(!data.isNull()); + const Error err = ctx->edit(key, std::unique_ptr (ei), data); + Error ae; + const QString log = _detail::audit_log_as_html(ctx, ae); + return std::make_tuple(err, log, ae); +} + +Error QGpgMEChangeExpiryJob::start(const Key &key, const QDateTime &expiry) +{ + run(std::bind(&change_expiry, std::placeholders::_1, key, expiry)); + return Error(); +} +#include "qgpgmechangeexpiryjob.moc" diff --git a/lang/qt/src/qgpgmechangeexpiryjob.h b/lang/qt/src/qgpgmechangeexpiryjob.h new file mode 100644 index 0000000..4abdf78 --- /dev/null +++ b/lang/qt/src/qgpgmechangeexpiryjob.h @@ -0,0 +1,66 @@ +/* + qgpgmechangeexpiryjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __QGPGME_QGPGMECHANGEEXPIRYJOB_H__ +#define __QGPGME_QGPGMECHANGEEXPIRYJOB_H__ + +#include "changeexpiryjob.h" + +#include "threadedjobmixin.h" + +namespace QGpgME +{ + +class QGpgMEChangeExpiryJob +#ifdef Q_MOC_RUN + : public ChangeExpiryJob +#else + : public _detail::ThreadedJobMixin +#endif +{ + Q_OBJECT +#ifdef Q_MOC_RUN +private Q_SLOTS: + void slotFinished(); +#endif +public: + explicit QGpgMEChangeExpiryJob(GpgME::Context *context); + ~QGpgMEChangeExpiryJob(); + + /* from ChangeExpiryJob */ + GpgME::Error start(const GpgME::Key &key, const QDateTime &expiry) Q_DECL_OVERRIDE; +}; + +} + +#endif // __QGPGME_QGPGMECHANGEEXPIRYJOB_H__ diff --git a/lang/qt/src/qgpgmechangeownertrustjob.cpp b/lang/qt/src/qgpgmechangeownertrustjob.cpp new file mode 100644 index 0000000..55131d9 --- /dev/null +++ b/lang/qt/src/qgpgmechangeownertrustjob.cpp @@ -0,0 +1,76 @@ +/* + qgpgmechangeownertrustjob.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "qgpgmechangeownertrustjob.h" + +#include "dataprovider.h" + +#include "context.h" +#include "data.h" +#include "gpgsetownertrusteditinteractor.h" +#include "key.h" + +#include +#include + +using namespace QGpgME; +using namespace GpgME; + +QGpgMEChangeOwnerTrustJob::QGpgMEChangeOwnerTrustJob(Context *context) + : mixin_type(context) +{ + lateInitialization(); +} + +QGpgMEChangeOwnerTrustJob::~QGpgMEChangeOwnerTrustJob() {} + +static QGpgMEChangeOwnerTrustJob::result_type change_ownertrust(Context *ctx, const Key &key, Key::OwnerTrust trust) +{ + EditInteractor *ei = new GpgSetOwnerTrustEditInteractor(trust); + + QGpgME::QByteArrayDataProvider dp; + Data data(&dp); + assert(!data.isNull()); + + const Error err = ctx->edit(key, std::unique_ptr(ei), data); + Error ae; + const QString log = _detail::audit_log_as_html(ctx, ae); + return std::make_tuple(err, log, ae); +} + +Error QGpgMEChangeOwnerTrustJob::start(const Key &key, Key::OwnerTrust trust) +{ + run(std::bind(&change_ownertrust, std::placeholders::_1, key, trust)); + return Error(); +} +#include "qgpgmechangeownertrustjob.moc" diff --git a/lang/qt/src/qgpgmechangeownertrustjob.h b/lang/qt/src/qgpgmechangeownertrustjob.h new file mode 100644 index 0000000..7740616 --- /dev/null +++ b/lang/qt/src/qgpgmechangeownertrustjob.h @@ -0,0 +1,65 @@ +/* + qgpgmechangeexpiryjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __QGPGME_QGPGMECHANGEOWNERTRUSTJOB_H__ +#define __QGPGME_QGPGMECHANGEOWNERTRUSTJOB_H__ + +#include "changeownertrustjob.h" + +#include "threadedjobmixin.h" + +namespace QGpgME +{ + +class QGpgMEChangeOwnerTrustJob +#ifdef Q_MOC_RUN + : public ChangeOwnerTrustJob +#else + : public _detail::ThreadedJobMixin +#endif +{ + Q_OBJECT +#ifdef Q_MOC_RUN +private Q_SLOTS: + void slotFinished(); +#endif +public: + explicit QGpgMEChangeOwnerTrustJob(GpgME::Context *context); + ~QGpgMEChangeOwnerTrustJob(); + + /* from ChangeOwnerTrustJob */ + GpgME::Error start(const GpgME::Key &key, GpgME::Key::OwnerTrust trust) Q_DECL_OVERRIDE; +}; +} + +#endif // __QGPGME_QGPGMECHANGEOWNERTRUSTJOB_H__ diff --git a/lang/qt/src/qgpgmechangepasswdjob.cpp b/lang/qt/src/qgpgmechangepasswdjob.cpp new file mode 100644 index 0000000..0aec927 --- /dev/null +++ b/lang/qt/src/qgpgmechangepasswdjob.cpp @@ -0,0 +1,79 @@ +/* + qgpgmechangepasswdjob.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2010 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "qgpgmechangepasswdjob.h" + +#include "dataprovider.h" + +#include "context.h" +#include "data.h" +#include "key.h" + +#include +#include + +using namespace QGpgME; +using namespace GpgME; + +QGpgMEChangePasswdJob::QGpgMEChangePasswdJob(Context *context) + : mixin_type(context) +{ + lateInitialization(); +} + +QGpgMEChangePasswdJob::~QGpgMEChangePasswdJob() {} + +static QGpgMEChangePasswdJob::result_type change_passwd(Context *ctx, const Key &key) +{ +#if 0 // in case we want to fall back to edit interactor for gpg... + std::unique_ptr ei(new GpgChangePasswdEditInteractor); + + QGpgME::QByteArrayDataProvider dp; + Data data(&dp); + assert(!data.isNull()); + const Error err = ctx->edit(key, ei, data); +#else + const Error err = ctx->passwd(key); +#endif + Error ae; + const QString log = _detail::audit_log_as_html(ctx, ae); + return std::make_tuple(err, log, ae); +} + +Error QGpgMEChangePasswdJob::start(const Key &key) +{ + run(std::bind(&change_passwd, std::placeholders::_1, key)); + return Error(); +} + +#include "qgpgmechangepasswdjob.moc" diff --git a/lang/qt/src/qgpgmechangepasswdjob.h b/lang/qt/src/qgpgmechangepasswdjob.h new file mode 100644 index 0000000..e37789e --- /dev/null +++ b/lang/qt/src/qgpgmechangepasswdjob.h @@ -0,0 +1,66 @@ +/* + qgpgmechangepasswdjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2010 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __QGPGME_QGPGMECHANGEPASSWDJOB_H__ +#define __QGPGME_QGPGMECHANGEPASSWDJOB_H__ + +#include "changepasswdjob.h" + +#include "threadedjobmixin.h" + +namespace QGpgME +{ + +class QGpgMEChangePasswdJob +#ifdef Q_MOC_RUN + : public ChangePasswdJob +#else + : public _detail::ThreadedJobMixin +#endif +{ + Q_OBJECT +#ifdef Q_MOC_RUN +private Q_SLOTS: + void slotFinished(); +#endif +public: + explicit QGpgMEChangePasswdJob(GpgME::Context *context); + ~QGpgMEChangePasswdJob(); + + /* from ChangePasswdJob */ + GpgME::Error start(const GpgME::Key &key) Q_DECL_OVERRIDE; +}; + +} + +#endif // __QGPGME_QGPGMECHANGEPASSWDJOB_H__ diff --git a/lang/qt/src/qgpgmedecryptjob.cpp b/lang/qt/src/qgpgmedecryptjob.cpp new file mode 100644 index 0000000..7116449 --- /dev/null +++ b/lang/qt/src/qgpgmedecryptjob.cpp @@ -0,0 +1,128 @@ +/* + qgpgmedecryptjob.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "qgpgmedecryptjob.h" + +#include "dataprovider.h" + +#include "context.h" +#include "decryptionresult.h" +#include "data.h" + +#include + +#include + +using namespace QGpgME; +using namespace GpgME; + +QGpgMEDecryptJob::QGpgMEDecryptJob(Context *context) + : mixin_type(context) +{ + lateInitialization(); +} + +QGpgMEDecryptJob::~QGpgMEDecryptJob() {} + +static QGpgMEDecryptJob::result_type decrypt(Context *ctx, QThread *thread, + const std::weak_ptr &cipherText_, + const std::weak_ptr &plainText_) +{ + + const std::shared_ptr cipherText = cipherText_.lock(); + const std::shared_ptr plainText = plainText_.lock(); + + const _detail::ToThreadMover ctMover(cipherText, thread); + const _detail::ToThreadMover ptMover(plainText, thread); + + QGpgME::QIODeviceDataProvider in(cipherText); + const Data indata(&in); + + if (!plainText) { + QGpgME::QByteArrayDataProvider out; + Data outdata(&out); + + const DecryptionResult res = ctx->decrypt(indata, outdata); + Error ae; + const QString log = _detail::audit_log_as_html(ctx, ae); + return std::make_tuple(res, out.data(), log, ae); + } else { + QGpgME::QIODeviceDataProvider out(plainText); + Data outdata(&out); + + const DecryptionResult res = ctx->decrypt(indata, outdata); + Error ae; + const QString log = _detail::audit_log_as_html(ctx, ae); + return std::make_tuple(res, QByteArray(), log, ae); + } + +} + +static QGpgMEDecryptJob::result_type decrypt_qba(Context *ctx, const QByteArray &cipherText) +{ + const std::shared_ptr buffer(new QBuffer); + buffer->setData(cipherText); + if (!buffer->open(QIODevice::ReadOnly)) { + assert(!"This should never happen: QBuffer::open() failed"); + } + return decrypt(ctx, 0, buffer, std::shared_ptr()); +} + +Error QGpgMEDecryptJob::start(const QByteArray &cipherText) +{ + run(std::bind(&decrypt_qba, std::placeholders::_1, cipherText)); + return Error(); +} + +void QGpgMEDecryptJob::start(const std::shared_ptr &cipherText, const std::shared_ptr &plainText) +{ + run(std::bind(&decrypt, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4), cipherText, plainText); +} + +GpgME::DecryptionResult QGpgME::QGpgMEDecryptJob::exec(const QByteArray &cipherText, + QByteArray &plainText) +{ + const result_type r = decrypt_qba(context(), cipherText); + plainText = std::get<1>(r); + resultHook(r); + return mResult; +} + +//PENDING(marc) implement showErrorDialog() + +void QGpgMEDecryptJob::resultHook(const result_type &tuple) +{ + mResult = std::get<0>(tuple); +} + +#include "qgpgmedecryptjob.moc" diff --git a/lang/qt/src/qgpgmedecryptjob.h b/lang/qt/src/qgpgmedecryptjob.h new file mode 100644 index 0000000..5335e84 --- /dev/null +++ b/lang/qt/src/qgpgmedecryptjob.h @@ -0,0 +1,84 @@ +/* + qgpgmedecryptjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __QGPGME_QGPGMEDECRYPTJOB_H__ +#define __QGPGME_QGPGMEDECRYPTJOB_H__ + +#include "decryptjob.h" + +#include "threadedjobmixin.h" + +#ifdef BUILDING_QGPGME +# include "decryptionresult.h" +#else +#include +#endif + +namespace QGpgME +{ + +class QGpgMEDecryptJob +#ifdef Q_MOC_RUN + : public DecryptJob +#else + : public _detail::ThreadedJobMixin > +#endif +{ + Q_OBJECT +#ifdef Q_MOC_RUN +private Q_SLOTS: + void slotFinished(); +#endif +public: + explicit QGpgMEDecryptJob(GpgME::Context *context); + ~QGpgMEDecryptJob(); + + /* from DecryptJob */ + GpgME::Error start(const QByteArray &cipherText) Q_DECL_OVERRIDE; + + /* from DecryptJob */ + void start(const std::shared_ptr &cipherText, const std::shared_ptr &plainText) Q_DECL_OVERRIDE; + + /* from DecryptJob */ + GpgME::DecryptionResult exec(const QByteArray &cipherText, + QByteArray &plainText) Q_DECL_OVERRIDE; + + /* from ThreadedJobMixin */ + void resultHook(const result_type &r) Q_DECL_OVERRIDE; + +private: + GpgME::DecryptionResult mResult; +}; + +} +#endif // __QGPGME_QGPGMEDECRYPTJOB_H__ diff --git a/lang/qt/src/qgpgmedecryptverifyjob.cpp b/lang/qt/src/qgpgmedecryptverifyjob.cpp new file mode 100644 index 0000000..d46a9b5 --- /dev/null +++ b/lang/qt/src/qgpgmedecryptverifyjob.cpp @@ -0,0 +1,135 @@ +/* + qgpgmedecryptverifyjob.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "qgpgmedecryptverifyjob.h" + +#include "dataprovider.h" + +#include "context.h" +#include "decryptionresult.h" +#include "verificationresult.h" +#include "data.h" + +#include +#include "gpgme_backend_debug.h" + +#include + +#include + +using namespace QGpgME; +using namespace GpgME; + +QGpgMEDecryptVerifyJob::QGpgMEDecryptVerifyJob(Context *context) + : mixin_type(context) +{ + lateInitialization(); +} + +QGpgMEDecryptVerifyJob::~QGpgMEDecryptVerifyJob() {} + +static QGpgMEDecryptVerifyJob::result_type decrypt_verify(Context *ctx, QThread *thread, + const std::weak_ptr &cipherText_, + const std::weak_ptr &plainText_) +{ + + qCDebug(GPGPME_BACKEND_LOG); + + const std::shared_ptr cipherText = cipherText_.lock(); + const std::shared_ptr plainText = plainText_.lock(); + + const _detail::ToThreadMover ctMover(cipherText, thread); + const _detail::ToThreadMover ptMover(plainText, thread); + + QGpgME::QIODeviceDataProvider in(cipherText); + const Data indata(&in); + + if (!plainText) { + QGpgME::QByteArrayDataProvider out; + Data outdata(&out); + + const std::pair res = ctx->decryptAndVerify(indata, outdata); + Error ae; + const QString log = _detail::audit_log_as_html(ctx, ae); + qCDebug(GPGPME_BACKEND_LOG) << "End no plainText. Error: " << ae; + return std::make_tuple(res.first, res.second, out.data(), log, ae); + } else { + QGpgME::QIODeviceDataProvider out(plainText); + Data outdata(&out); + + const std::pair res = ctx->decryptAndVerify(indata, outdata); + Error ae; + const QString log = _detail::audit_log_as_html(ctx, ae); + qCDebug(GPGPME_BACKEND_LOG) << "End plainText. Error: " << ae; + return std::make_tuple(res.first, res.second, QByteArray(), log, ae); + } + +} + +static QGpgMEDecryptVerifyJob::result_type decrypt_verify_qba(Context *ctx, const QByteArray &cipherText) +{ + const std::shared_ptr buffer(new QBuffer); + buffer->setData(cipherText); + if (!buffer->open(QIODevice::ReadOnly)) { + assert(!"This should never happen: QBuffer::open() failed"); + } + return decrypt_verify(ctx, 0, buffer, std::shared_ptr()); +} + +Error QGpgMEDecryptVerifyJob::start(const QByteArray &cipherText) +{ + run(std::bind(&decrypt_verify_qba, std::placeholders::_1, cipherText)); + return Error(); +} + +void QGpgMEDecryptVerifyJob::start(const std::shared_ptr &cipherText, const std::shared_ptr &plainText) +{ + run(std::bind(&decrypt_verify, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4), cipherText, plainText); +} + +std::pair +QGpgME::QGpgMEDecryptVerifyJob::exec(const QByteArray &cipherText, QByteArray &plainText) +{ + const result_type r = decrypt_verify_qba(context(), cipherText); + plainText = std::get<2>(r); + resultHook(r); + return mResult; +} + +//PENDING(marc) implement showErrorDialog() + +void QGpgMEDecryptVerifyJob::resultHook(const result_type &tuple) +{ + mResult = std::make_pair(std::get<0>(tuple), std::get<1>(tuple)); +} +#include "qgpgmedecryptverifyjob.moc" diff --git a/lang/qt/src/qgpgmedecryptverifyjob.h b/lang/qt/src/qgpgmedecryptverifyjob.h new file mode 100644 index 0000000..de2bce7 --- /dev/null +++ b/lang/qt/src/qgpgmedecryptverifyjob.h @@ -0,0 +1,89 @@ +/* + qgpgmedecryptverifyjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __QGPGME_QGPGMEDECRYPTVERIFYJOB_H__ +#define __QGPGME_QGPGMEDECRYPTVERIFYJOB_H__ + +#include "decryptverifyjob.h" + +#include "threadedjobmixin.h" + +#ifdef BUILDING_QGPGME +# include "decryptionresult.h" +#else +#include +#endif +#ifdef BUILDING_QGPGME +# include "verificationresult.h" +#else +#include +#endif + +namespace QGpgME +{ + +class QGpgMEDecryptVerifyJob +#ifdef Q_MOC_RUN + : public DecryptVerifyJob +#else + : public _detail::ThreadedJobMixin > +#endif +{ + Q_OBJECT +#ifdef Q_MOC_RUN +private Q_SLOTS: + void slotFinished(); +#endif +public: + explicit QGpgMEDecryptVerifyJob(GpgME::Context *context); + ~QGpgMEDecryptVerifyJob(); + + /* from DecryptVerifyJob */ + GpgME::Error start(const QByteArray &cipherText) Q_DECL_OVERRIDE; + + /* from DecryptVerifyJob */ + void start(const std::shared_ptr &cipherText, const std::shared_ptr &plainText) Q_DECL_OVERRIDE; + + /* from DecryptVerifyJob */ + std::pair + exec(const QByteArray &cipherText, QByteArray &plainText) Q_DECL_OVERRIDE; + + /* from ThreadedJobMixin */ + void resultHook(const result_type &r) Q_DECL_OVERRIDE; + +private: + std::pair mResult; +}; + +} +#endif // __QGPGME_QGPGMEDECRYPTVERIFYJOB_H__ diff --git a/lang/qt/src/qgpgmedeletejob.cpp b/lang/qt/src/qgpgmedeletejob.cpp new file mode 100644 index 0000000..323aec4 --- /dev/null +++ b/lang/qt/src/qgpgmedeletejob.cpp @@ -0,0 +1,65 @@ +/* + qgpgmedeletejob.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "qgpgmedeletejob.h" + +#include "context.h" +#include "key.h" + +#include + +using namespace QGpgME; +using namespace GpgME; + +QGpgMEDeleteJob::QGpgMEDeleteJob(Context *context) + : mixin_type(context) +{ + lateInitialization(); +} + +QGpgMEDeleteJob::~QGpgMEDeleteJob() {} + +static QGpgMEDeleteJob::result_type delete_key(Context *ctx, const Key &key, bool allowSecretKeyDeletion) +{ + const Error err = ctx->deleteKey(key, allowSecretKeyDeletion); + Error ae; + const QString log = _detail::audit_log_as_html(ctx, ae); + return std::make_tuple(err, log, ae); +} + +Error QGpgMEDeleteJob::start(const Key &key, bool allowSecretKeyDeletion) +{ + run(std::bind(&delete_key, std::placeholders::_1, key, allowSecretKeyDeletion)); + return Error(); +} +#include "qgpgmedeletejob.moc" diff --git a/lang/qt/src/qgpgmedeletejob.h b/lang/qt/src/qgpgmedeletejob.h new file mode 100644 index 0000000..992442f --- /dev/null +++ b/lang/qt/src/qgpgmedeletejob.h @@ -0,0 +1,71 @@ +/* + qgpgmedeletejob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __QGPGME_QGPGMEDELETEJOB_H__ +#define __QGPGME_QGPGMEDELETEJOB_H__ + +#include "deletejob.h" + +#include "threadedjobmixin.h" + +namespace GpgME +{ +class Key; +} + +namespace QGpgME +{ + +class QGpgMEDeleteJob +#ifdef Q_MOC_RUN + : public DeleteJob +#else + : public _detail::ThreadedJobMixin +#endif +{ + Q_OBJECT +#ifdef Q_MOC_RUN +public Q_SLOTS: + void slotFinished(); +#endif +public: + explicit QGpgMEDeleteJob(GpgME::Context *context); + ~QGpgMEDeleteJob(); + + /* from DeleteJob */ + GpgME::Error start(const GpgME::Key &key, bool allowSecretKeyDeletion) Q_DECL_OVERRIDE; +}; + +} + +#endif // __QGPGME_QGPGMEDELETEJOB_H__ diff --git a/lang/qt/src/qgpgmedownloadjob.cpp b/lang/qt/src/qgpgmedownloadjob.cpp new file mode 100644 index 0000000..48cc907 --- /dev/null +++ b/lang/qt/src/qgpgmedownloadjob.cpp @@ -0,0 +1,100 @@ +/* + qgpgmedownloadjob.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "qgpgmedownloadjob.h" + +#include "dataprovider.h" + +#include "context.h" +#include "data.h" + +#include + +#include + +using namespace QGpgME; +using namespace GpgME; + +QGpgMEDownloadJob::QGpgMEDownloadJob(Context *context) + : mixin_type(context) +{ + lateInitialization(); +} + +QGpgMEDownloadJob::~QGpgMEDownloadJob() {} + +static QGpgMEDownloadJob::result_type download_qsl(Context *ctx, const QStringList &pats) +{ + QGpgME::QByteArrayDataProvider dp; + Data data(&dp); + + const _detail::PatternConverter pc(pats); + + const Error err = ctx->exportPublicKeys(pc.patterns(), data); + Error ae; + const QString log = _detail::audit_log_as_html(ctx, ae); + return std::make_tuple(err, dp.data(), log, ae); +} + +static QGpgMEDownloadJob::result_type download(Context *ctx, QThread *thread, const QByteArray &fpr, const std::weak_ptr &keyData_) +{ + const std::shared_ptr keyData = keyData_.lock(); + if (!keyData) { + return download_qsl(ctx, QStringList(QString::fromUtf8(fpr))); + } + + const _detail::ToThreadMover kdMover(keyData, thread); + + QGpgME::QIODeviceDataProvider dp(keyData); + Data data(&dp); + + const _detail::PatternConverter pc(fpr); + + const Error err = ctx->exportPublicKeys(pc.patterns(), data); + Error ae; + const QString log = _detail::audit_log_as_html(ctx, ae); + return std::make_tuple(err, QByteArray(), log, ae); +} + +Error QGpgMEDownloadJob::start(const QStringList &pats) +{ + run(std::bind(&download_qsl, std::placeholders::_1, pats)); + return Error(); +} + +Error QGpgMEDownloadJob::start(const QByteArray &fpr, const std::shared_ptr &keyData) +{ + run(std::bind(&download, std::placeholders::_1, std::placeholders::_2, fpr, std::placeholders::_3), keyData); + return Error(); +} +#include "qgpgmedownloadjob.moc" diff --git a/lang/qt/src/qgpgmedownloadjob.h b/lang/qt/src/qgpgmedownloadjob.h new file mode 100644 index 0000000..4091190 --- /dev/null +++ b/lang/qt/src/qgpgmedownloadjob.h @@ -0,0 +1,69 @@ +/* + qgpgmedownloadjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __QGPGME_QGPGMEDOWNLOADJOB_H__ +#define __QGPGME_QGPGMEDOWNLOADJOB_H__ + +#include "downloadjob.h" + +#include "threadedjobmixin.h" + +namespace QGpgME +{ + +class QGpgMEDownloadJob +#ifdef Q_MOC_RUN + : public DownloadJob +#else + : public _detail::ThreadedJobMixin > +#endif +{ + Q_OBJECT +#ifdef Q_MOC_RUN +public Q_SLOTS: + void slotFinished(); +#endif +public: + explicit QGpgMEDownloadJob(GpgME::Context *context); + ~QGpgMEDownloadJob(); + + /* from DownloadJob */ + GpgME::Error start(const QStringList &fingerprints) Q_DECL_OVERRIDE; + + /* from DownloadJob */ + GpgME::Error start(const QByteArray &fingerprint, const std::shared_ptr &keyData) Q_DECL_OVERRIDE; +}; + +} + +#endif // __QGPGME_QGPGMEDOWNLOADJOB_H__ diff --git a/lang/qt/src/qgpgmeencryptjob.cpp b/lang/qt/src/qgpgmeencryptjob.cpp new file mode 100644 index 0000000..82c8ed8 --- /dev/null +++ b/lang/qt/src/qgpgmeencryptjob.cpp @@ -0,0 +1,170 @@ +/* + qgpgmeencryptjob.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2007,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "qgpgmeencryptjob.h" + +#include "dataprovider.h" + +#include "context.h" +#include "encryptionresult.h" +#include "data.h" + +#include + + +#include + +using namespace QGpgME; +using namespace GpgME; + +QGpgMEEncryptJob::QGpgMEEncryptJob(Context *context) + : mixin_type(context), + mOutputIsBase64Encoded(false) +{ + lateInitialization(); +} + +QGpgMEEncryptJob::~QGpgMEEncryptJob() {} + +void QGpgMEEncryptJob::setOutputIsBase64Encoded(bool on) +{ + mOutputIsBase64Encoded = on; +} + +static QGpgMEEncryptJob::result_type encrypt(Context *ctx, QThread *thread, + const std::vector &recipients, + const std::weak_ptr &plainText_, + const std::weak_ptr &cipherText_, + const Context::EncryptionFlags eflags, + bool outputIsBsse64Encoded) +{ + + const std::shared_ptr plainText = plainText_.lock(); + const std::shared_ptr cipherText = cipherText_.lock(); + + const _detail::ToThreadMover ctMover(cipherText, thread); + const _detail::ToThreadMover ptMover(plainText, thread); + + QGpgME::QIODeviceDataProvider in(plainText); + const Data indata(&in); + + if (!cipherText) { + QGpgME::QByteArrayDataProvider out; + Data outdata(&out); + + if (outputIsBsse64Encoded) { + outdata.setEncoding(Data::Base64Encoding); + } + + const EncryptionResult res = ctx->encrypt(recipients, indata, outdata, eflags); + Error ae; + const QString log = _detail::audit_log_as_html(ctx, ae); + return std::make_tuple(res, out.data(), log, ae); + } else { + QGpgME::QIODeviceDataProvider out(cipherText); + Data outdata(&out); + + if (outputIsBsse64Encoded) { + outdata.setEncoding(Data::Base64Encoding); + } + + const EncryptionResult res = ctx->encrypt(recipients, indata, outdata, eflags); + Error ae; + const QString log = _detail::audit_log_as_html(ctx, ae); + return std::make_tuple(res, QByteArray(), log, ae); + } + +} + +static QGpgMEEncryptJob::result_type encrypt_qba(Context *ctx, const std::vector &recipients, const QByteArray &plainText, const Context::EncryptionFlags eflags, bool outputIsBsse64Encoded) +{ + const std::shared_ptr buffer(new QBuffer); + buffer->setData(plainText); + if (!buffer->open(QIODevice::ReadOnly)) { + assert(!"This should never happen: QBuffer::open() failed"); + } + return encrypt(ctx, 0, recipients, buffer, std::shared_ptr(), eflags, outputIsBsse64Encoded); +} + +Error QGpgMEEncryptJob::start(const std::vector &recipients, const QByteArray &plainText, bool alwaysTrust) +{ + run(std::bind(&encrypt_qba, std::placeholders::_1, recipients, plainText, + alwaysTrust ? Context::AlwaysTrust : Context::None, mOutputIsBase64Encoded)); + return Error(); +} + +void QGpgMEEncryptJob::start(const std::vector &recipients, const std::shared_ptr &plainText, + const std::shared_ptr &cipherText, const Context::EncryptionFlags eflags) +{ + run(std::bind(&encrypt, + std::placeholders::_1, std::placeholders::_2, + recipients, + std::placeholders::_3, std::placeholders::_4, + eflags, + mOutputIsBase64Encoded), + plainText, cipherText); +} + +EncryptionResult QGpgMEEncryptJob::exec(const std::vector &recipients, const QByteArray &plainText, + const Context::EncryptionFlags eflags, QByteArray &cipherText) +{ + const result_type r = encrypt_qba(context(), recipients, plainText, eflags, mOutputIsBase64Encoded); + cipherText = std::get<1>(r); + resultHook(r); + return mResult; +} + +void QGpgMEEncryptJob::start(const std::vector &recipients, const std::shared_ptr &plainText, const std::shared_ptr &cipherText, bool alwaysTrust) +{ + return start(recipients, plainText, cipherText, alwaysTrust ? Context::AlwaysTrust : Context::None); +} + +EncryptionResult QGpgMEEncryptJob::exec(const std::vector &recipients, const QByteArray &plainText, bool alwaysTrust, QByteArray &cipherText) +{ + return exec(recipients, plainText, alwaysTrust ? Context::AlwaysTrust : Context::None, cipherText); +} + +void QGpgMEEncryptJob::resultHook(const result_type &tuple) +{ + mResult = std::get<0>(tuple); +} + +#if 0 +void QGpgMEEncryptJob::showErrorDialog(QWidget *parent, const QString &caption) const +{ + if (mResult.error() && !mResult.error().isCanceled()) { + MessageBox::error(parent, mResult, this, caption); + } +} +#endif +#include "qgpgmeencryptjob.moc" diff --git a/lang/qt/src/qgpgmeencryptjob.h b/lang/qt/src/qgpgmeencryptjob.h new file mode 100644 index 0000000..42c1c78 --- /dev/null +++ b/lang/qt/src/qgpgmeencryptjob.h @@ -0,0 +1,109 @@ +/* + qgpgmeencryptjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2007,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __QGPGME_QGPGMEENCRYPTJOB_H__ +#define __QGPGME_QGPGMEENCRYPTJOB_H__ + +#include "encryptjob.h" + +#include "threadedjobmixin.h" + +#ifdef BUILDING_QGPGME +# include "encryptionresult.h" +#else +#include +#endif +#ifdef BUILDING_QGPGME +# include "key.h" +#else +#include +#endif + +namespace QGpgME +{ + +class QGpgMEEncryptJob +#ifdef Q_MOC_RUN + : public EncryptJob +#else + : public _detail::ThreadedJobMixin > +#endif +{ + Q_OBJECT +#ifdef Q_MOC_RUN +public Q_SLOTS: + void slotFinished(); +#endif +public: + explicit QGpgMEEncryptJob(GpgME::Context *context); + ~QGpgMEEncryptJob(); + + /* from EncryptJob */ + GpgME::Error start(const std::vector &recipients, + const QByteArray &plainText, bool alwaysTrust) Q_DECL_OVERRIDE; + + /* from EncryptJob */ + void start(const std::vector &recipients, + const std::shared_ptr &plainText, + const std::shared_ptr &cipherText, + bool alwaysTrust) Q_DECL_OVERRIDE; + + /* from EncryptJob */ + GpgME::EncryptionResult exec(const std::vector &recipients, + const QByteArray &plainText, bool alwaysTrust, + QByteArray &cipherText) Q_DECL_OVERRIDE; + /* from EncryptJob */ + void start(const std::vector &recipients, + const std::shared_ptr &plainText, + const std::shared_ptr &cipherText, + const GpgME::Context::EncryptionFlags flags) Q_DECL_OVERRIDE; + + /* from EncryptJob */ + GpgME::EncryptionResult exec(const std::vector &recipients, + const QByteArray &plainText, const GpgME::Context::EncryptionFlags flags, + QByteArray &cipherText) Q_DECL_OVERRIDE; + + /* from EncryptJob */ + void setOutputIsBase64Encoded(bool on) Q_DECL_OVERRIDE; + + /* from ThreadedJobMixin */ + void resultHook(const result_type &r) Q_DECL_OVERRIDE; + +private: + bool mOutputIsBase64Encoded; + GpgME::EncryptionResult mResult; +}; + +} + +#endif // __QGPGME_QGPGMEENCRYPTJOB_H__ diff --git a/lang/qt/src/qgpgmeexportjob.cpp b/lang/qt/src/qgpgmeexportjob.cpp new file mode 100644 index 0000000..dfc5fc9 --- /dev/null +++ b/lang/qt/src/qgpgmeexportjob.cpp @@ -0,0 +1,76 @@ +/* + qgpgmeexportjob.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "qgpgmeexportjob.h" + +#include "dataprovider.h" + +#include "context.h" +#include "data.h" +#include "key.h" + +#include + +#include + +using namespace QGpgME; +using namespace GpgME; + +QGpgMEExportJob::QGpgMEExportJob(Context *context) + : mixin_type(context) +{ + lateInitialization(); +} + +QGpgMEExportJob::~QGpgMEExportJob() {} + +static QGpgMEExportJob::result_type export_qba(Context *ctx, const QStringList &patterns) +{ + + const _detail::PatternConverter pc(patterns); + + QGpgME::QByteArrayDataProvider dp; + Data data(&dp); + + const Error err = ctx->exportPublicKeys(pc.patterns(), data); + Error ae; + const QString log = _detail::audit_log_as_html(ctx, ae); + return std::make_tuple(err, dp.data(), log, ae); +} + +Error QGpgMEExportJob::start(const QStringList &patterns) +{ + run(std::bind(&export_qba, std::placeholders::_1, patterns)); + return Error(); +} +#include "qgpgmeexportjob.moc" diff --git a/lang/qt/src/qgpgmeexportjob.h b/lang/qt/src/qgpgmeexportjob.h new file mode 100644 index 0000000..7561054 --- /dev/null +++ b/lang/qt/src/qgpgmeexportjob.h @@ -0,0 +1,66 @@ +/* + qgpgmeexportjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __QGPGME_QGPGMEEXPORTJOB_H__ +#define __QGPGME_QGPGMEEXPORTJOB_H__ + +#include "exportjob.h" + +#include "threadedjobmixin.h" + +namespace QGpgME +{ + +class QGpgMEExportJob +#ifdef Q_MOC_RUN + : public ExportJob +#else + : public _detail::ThreadedJobMixin > +#endif +{ + Q_OBJECT +#ifdef Q_MOC_RUN +public Q_SLOTS: + void slotFinished(); +#endif +public: + explicit QGpgMEExportJob(GpgME::Context *context); + ~QGpgMEExportJob(); + + /* from ExportJob */ + GpgME::Error start(const QStringList &patterns) Q_DECL_OVERRIDE; +}; + +} + +#endif // __QGPGME_QGPGMEEXPORTJOB_H__ diff --git a/lang/qt/src/qgpgmeimportfromkeyserverjob.cpp b/lang/qt/src/qgpgmeimportfromkeyserverjob.cpp new file mode 100644 index 0000000..0f19679 --- /dev/null +++ b/lang/qt/src/qgpgmeimportfromkeyserverjob.cpp @@ -0,0 +1,82 @@ +/* + qgpgmeimportfromkeyserverjob.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "qgpgmeimportfromkeyserverjob.h" + +#include "dataprovider.h" + +#include "context.h" +#include "data.h" +#include "key.h" + +#include + +using namespace QGpgME; +using namespace GpgME; + +QGpgMEImportFromKeyserverJob::QGpgMEImportFromKeyserverJob(Context *context) + : mixin_type(context) +{ + lateInitialization(); +} + +QGpgMEImportFromKeyserverJob::~QGpgMEImportFromKeyserverJob() {} + +static QGpgMEImportFromKeyserverJob::result_type importfromkeyserver(Context *ctx, const std::vector &keys) +{ + const ImportResult res = ctx->importKeys(keys); + Error ae; + const QString log = _detail::audit_log_as_html(ctx, ae); + return std::make_tuple(res, log, ae); +} + +Error QGpgMEImportFromKeyserverJob::start(const std::vector &keys) +{ + run(std::bind(&importfromkeyserver, std::placeholders::_1, keys)); + return Error(); +} + +GpgME::ImportResult QGpgME::QGpgMEImportFromKeyserverJob::exec(const std::vector &keys) +{ + const result_type r = importfromkeyserver(context(), keys); + resultHook(r); + return mResult; +} + +// PENDING(marc) implement showErrorDialog() + +void QGpgME::QGpgMEImportFromKeyserverJob::resultHook(const result_type &tuple) +{ + mResult = std::get<0>(tuple); +} +#include "qgpgmeimportfromkeyserverjob.moc" diff --git a/lang/qt/src/qgpgmeimportfromkeyserverjob.h b/lang/qt/src/qgpgmeimportfromkeyserverjob.h new file mode 100644 index 0000000..8c9f944 --- /dev/null +++ b/lang/qt/src/qgpgmeimportfromkeyserverjob.h @@ -0,0 +1,81 @@ +/* + qgpgmeimportfromkeyserverjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __QGPGME_QGPGMEIMPORTFROMKEYSERVERJOB_H__ +#define __QGPGME_QGPGMEIMPORTFROMKEYSERVERJOB_H__ + +#include "importfromkeyserverjob.h" + +#include "threadedjobmixin.h" + +#ifdef BUILDING_QGPGME +# include "importresult.h" +#else +#include +#endif + +namespace QGpgME +{ + +class QGpgMEImportFromKeyserverJob +#ifdef Q_MOC_RUN + : public ImportFromKeyserverJob +#else + : public _detail::ThreadedJobMixin > +#endif +{ + Q_OBJECT +#ifdef Q_MOC_RUN +public Q_SLOTS: + void slotFinished(); +#endif +public: + explicit QGpgMEImportFromKeyserverJob(GpgME::Context *context); + ~QGpgMEImportFromKeyserverJob(); + + /* from ImportFromKeyserverJob */ + GpgME::Error start(const std::vector &keys) Q_DECL_OVERRIDE; + + /* from ImportFromKeyserverJob */ + GpgME::ImportResult exec(const std::vector &keys) Q_DECL_OVERRIDE; + + /* from ThreadedJobMixin */ + void resultHook(const result_type &r) Q_DECL_OVERRIDE; + +private: + GpgME::ImportResult mResult; +}; + +} + +#endif // __QGPGME_QGPGMEIMPORTFROMKEYSERVERJOB_H__ diff --git a/lang/qt/src/qgpgmeimportjob.cpp b/lang/qt/src/qgpgmeimportjob.cpp new file mode 100644 index 0000000..f125b12 --- /dev/null +++ b/lang/qt/src/qgpgmeimportjob.cpp @@ -0,0 +1,85 @@ +/* + qgpgmeimportjob.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "qgpgmeimportjob.h" + +#include "dataprovider.h" + +#include "context.h" +#include "data.h" +#include "key.h" + +#include + +using namespace QGpgME; +using namespace GpgME; + +QGpgMEImportJob::QGpgMEImportJob(Context *context) + : mixin_type(context) +{ + lateInitialization(); +} + +QGpgMEImportJob::~QGpgMEImportJob() {} + +static QGpgMEImportJob::result_type import_qba(Context *ctx, const QByteArray &certData) +{ + QGpgME::QByteArrayDataProvider dp(certData); + Data data(&dp); + + const ImportResult res = ctx->importKeys(data); + Error ae; + const QString log = _detail::audit_log_as_html(ctx, ae); + return std::make_tuple(res, log, ae); +} + +Error QGpgMEImportJob::start(const QByteArray &certData) +{ + run(std::bind(&import_qba, std::placeholders::_1, certData)); + return Error(); +} + +GpgME::ImportResult QGpgME::QGpgMEImportJob::exec(const QByteArray &keyData) +{ + const result_type r = import_qba(context(), keyData); + resultHook(r); + return mResult; +} + +// PENDING(marc) implement showErrorDialog() + +void QGpgME::QGpgMEImportJob::resultHook(const result_type &tuple) +{ + mResult = std::get<0>(tuple); +} +#include "qgpgmeimportjob.moc" diff --git a/lang/qt/src/qgpgmeimportjob.h b/lang/qt/src/qgpgmeimportjob.h new file mode 100644 index 0000000..424cb50 --- /dev/null +++ b/lang/qt/src/qgpgmeimportjob.h @@ -0,0 +1,81 @@ +/* + qgpgmeimportjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __QGPGME_QGPGMEIMPORTJOB_H__ +#define __QGPGME_QGPGMEIMPORTJOB_H__ + +#include "importjob.h" + +#include "threadedjobmixin.h" + +#ifdef BUILDING_QGPGME +# include "importresult.h" +#else +#include +#endif + +namespace QGpgME +{ + +class QGpgMEImportJob +#ifdef Q_MOC_RUN + : public ImportJob +#else + : public _detail::ThreadedJobMixin > +#endif +{ + Q_OBJECT +#ifdef Q_MOC_RUN +public Q_SLOTS: + void slotFinished(); +#endif +public: + explicit QGpgMEImportJob(GpgME::Context *context); + ~QGpgMEImportJob(); + + /* from ImportJob */ + GpgME::Error start(const QByteArray &keyData) Q_DECL_OVERRIDE; + + /* from ImportJob */ + GpgME::ImportResult exec(const QByteArray &keyData) Q_DECL_OVERRIDE; + + /* from ThreadedJobMixin */ + void resultHook(const result_type &r) Q_DECL_OVERRIDE; + +private: + GpgME::ImportResult mResult; +}; + +} + +#endif // __QGPGME_QGPGMEIMPORTJOB_H__ diff --git a/lang/qt/src/qgpgmekeyformailboxjob.cpp b/lang/qt/src/qgpgmekeyformailboxjob.cpp new file mode 100644 index 0000000..803d0e6 --- /dev/null +++ b/lang/qt/src/qgpgmekeyformailboxjob.cpp @@ -0,0 +1,138 @@ +/* + qgpgmekeyformailboxjob.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "qgpgmekeyformailboxjob.h" +#include "qgpgmekeylistjob.h" + +#include + +#include + +using namespace GpgME; +using namespace QGpgME; + +QGpgMEKeyForMailboxJob::QGpgMEKeyForMailboxJob(Context *context) + : mixin_type(context) +{ + lateInitialization(); +} + +QGpgMEKeyForMailboxJob::~QGpgMEKeyForMailboxJob() {} + +static bool keyIsOk(const Key k) +{ + return !k.isExpired() && !k.isRevoked() && !k.isInvalid() && !k.isDisabled(); +} + +static bool uidIsOk(const UserID uid) +{ + return keyIsOk(uid.parent()) && !uid.isRevoked() && !uid.isInvalid(); +} + +static bool subkeyIsOk(const Subkey s) +{ + return !s.isRevoked() && !s.isInvalid() && !s.isDisabled(); +} + +static QGpgMEKeyForMailboxJob::result_type do_work(Context *ctx, const QString &mailbox, bool canEncrypt) +{ + /* Do a Keylisting. */ + ctx->setKeyListMode(GpgME::Extern | GpgME::Local | GpgME::Signatures | GpgME::Validate); + std::vector keys; + QGpgMEKeyListJob *keylist = new QGpgMEKeyListJob(ctx); + + KeyListResult result = keylist->exec(QStringList() << mailbox, false, keys); + + if (result.error()) { + return std::make_tuple(result, Key(), UserID(), QString(), Error()); + } + + // This should ideally be decided by GnuPG and this Job changed + // to just call the according API in GpgME + // See: https://bugs.gnupg.org/gnupg/issue2359 + Key keyC; + UserID uidC; + Q_FOREACH (const Key k, keys) { + if (canEncrypt && !k.canEncrypt()) { + continue; + } + /* First get the uid that matches the mailbox */ + Q_FOREACH (const UserID u, k.userIDs()) { + if (QString::fromUtf8(u.email()).toLower() == mailbox.toLower()) { + if (uidC.isNull()) { + keyC = k; + uidC = u; + } else if ((!uidIsOk(uidC) && uidIsOk(u)) || uidC.validity() < u.validity()) { + /* Validity of the new key is better. */ + uidC = u; + keyC = k; + } else if (uidC.validity() == u.validity() && uidIsOk(u)) { + /* Both are the same check which one is newer. */ + time_t oldTime = 0; + Q_FOREACH (const Subkey s, keyC.subkeys()) { + if ((canEncrypt && s.canEncrypt()) && subkeyIsOk(s)) { + oldTime = s.creationTime(); + } + } + time_t newTime = 0; + Q_FOREACH (const Subkey s, k.subkeys()) { + if ((canEncrypt && s.canEncrypt()) && subkeyIsOk(s)) { + newTime = s.creationTime(); + } + } + if (newTime > oldTime) { + uidC = u; + keyC = k; + } + } + } + } + } + return std::make_tuple(result, keyC, uidC, QString(), Error()); +} + +Error QGpgMEKeyForMailboxJob::start(const QString &mailbox, bool canEncrypt) +{ + run(std::bind(&do_work, std::placeholders::_1, mailbox, canEncrypt)); + return Error(); +} + +KeyListResult QGpgMEKeyForMailboxJob::exec(const QString &mailbox, bool canEncrypt, Key &key, UserID &uid) +{ + const result_type r = do_work(context(), mailbox, canEncrypt); + resultHook(r); + key = std::get<1>(r); + uid = std::get<2>(r); + return std::get<0>(r); +} + +#include "qgpgmekeyformailboxjob.moc" diff --git a/lang/qt/src/qgpgmekeyformailboxjob.h b/lang/qt/src/qgpgmekeyformailboxjob.h new file mode 100644 index 0000000..8ac2c1f --- /dev/null +++ b/lang/qt/src/qgpgmekeyformailboxjob.h @@ -0,0 +1,84 @@ +/* + qgpgmekeyformailboxjob.h + + This file is part of libkleopatra, the KDE keymanagement library + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __QGPGME_QGPGMEKEYFORMAILBOXJOB_H__ +#define __QGPGME_QGPGMEKEYFORMAILBOXJOB_H__ +#include "keyformailboxjob.h" + +#include "threadedjobmixin.h" + +#ifdef BUILDING_QGPGME +# include "keylistresult.h" +# include "key.h" +#else +# include +# include +#endif + +namespace QGpgME +{ + +class QGpgMEKeyForMailboxJob +#ifdef Q_MOC_RUN + : public KeyForMailboxJob +#else + : public _detail::ThreadedJobMixin > +#endif +{ + Q_OBJECT +#ifdef Q_MOC_RUN +public Q_SLOTS: + void slotFinished(); +#endif +public: + explicit QGpgMEKeyForMailboxJob(GpgME::Context *context); + ~QGpgMEKeyForMailboxJob(); + + /** + Starts the operation. \a mailbox is the mailbox to + look for. + + The result is the same as for the LocateKeysJob. + + If \a canEncrypt is true, only keys that have a subkey for encryption + usage are returned. Use this if you need to select a + key for signing. + */ + GpgME::Error start(const QString &mailbox, bool canEncrypt = true) Q_DECL_OVERRIDE; + + GpgME::KeyListResult exec(const QString &mailbox, bool canEncrypt, GpgME::Key &key, GpgME::UserID &uid) Q_DECL_OVERRIDE; +}; + +} +#endif diff --git a/lang/qt/src/qgpgmekeygenerationjob.cpp b/lang/qt/src/qgpgmekeygenerationjob.cpp new file mode 100644 index 0000000..cba6b76 --- /dev/null +++ b/lang/qt/src/qgpgmekeygenerationjob.cpp @@ -0,0 +1,71 @@ +/* + qgpgmekeygenerationjob.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "qgpgmekeygenerationjob.h" + +#include "dataprovider.h" + +#include "context.h" +#include "data.h" + +#include + +using namespace QGpgME; +using namespace GpgME; + +QGpgMEKeyGenerationJob::QGpgMEKeyGenerationJob(Context *context) + : mixin_type(context) +{ + lateInitialization(); +} + +QGpgMEKeyGenerationJob::~QGpgMEKeyGenerationJob() {} + +static QGpgMEKeyGenerationJob::result_type generate_key(Context *ctx, const QString ¶meters) +{ + QGpgME::QByteArrayDataProvider dp; + Data data = ctx->protocol() == CMS ? Data(&dp) : Data(Data::null); + assert(data.isNull() == (ctx->protocol() != CMS)); + + const KeyGenerationResult res = ctx->generateKey(parameters.toUtf8().constData(), data); + Error ae; + const QString log = _detail::audit_log_as_html(ctx, ae); + return std::make_tuple(res, dp.data(), log, ae); +} + +Error QGpgMEKeyGenerationJob::start(const QString ¶meters) +{ + run(std::bind(&generate_key, std::placeholders::_1, parameters)); + return Error(); +} +#include "qgpgmekeygenerationjob.moc" diff --git a/lang/qt/src/qgpgmekeygenerationjob.h b/lang/qt/src/qgpgmekeygenerationjob.h new file mode 100644 index 0000000..808b714 --- /dev/null +++ b/lang/qt/src/qgpgmekeygenerationjob.h @@ -0,0 +1,72 @@ +/* + qgpgmekeygenerationjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __QGPGME_QGPGMEKEYGENERATIONJOB_H__ +#define __QGPGME_QGPGMEKEYGENERATIONJOB_H__ + +#include "keygenerationjob.h" + +#include "threadedjobmixin.h" + +#ifdef BUILDING_QGPGME +# include "keygenerationresult.h" +#else +#include +#endif + +namespace QGpgME +{ + +class QGpgMEKeyGenerationJob +#ifdef Q_MOC_RUN + : public KeyGenerationJob +#else + : public _detail::ThreadedJobMixin > +#endif +{ + Q_OBJECT +#ifdef Q_MOC_RUN +private Q_SLOTS: + void slotFinished(); +#endif +public: + explicit QGpgMEKeyGenerationJob(GpgME::Context *context); + ~QGpgMEKeyGenerationJob(); + + /* from KeygenerationJob */ + GpgME::Error start(const QString ¶meters) Q_DECL_OVERRIDE; +}; + +} + +#endif // __QGPGME_QGPGMEKEYGENERATIONJOB_H__ diff --git a/lang/qt/src/qgpgmekeylistjob.cpp b/lang/qt/src/qgpgmekeylistjob.cpp new file mode 100644 index 0000000..1169c46 --- /dev/null +++ b/lang/qt/src/qgpgmekeylistjob.cpp @@ -0,0 +1,172 @@ +/* + qgpgmekeylistjob.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "qgpgmekeylistjob.h" + +#include "key.h" +#include "context.h" +#include "keylistresult.h" +#include + +#include + +#include + +#include +#include +#include + +using namespace QGpgME; +using namespace GpgME; + +QGpgMEKeyListJob::QGpgMEKeyListJob(Context *context) + : mixin_type(context), + mResult(), mSecretOnly(false) +{ + lateInitialization(); +} + +QGpgMEKeyListJob::~QGpgMEKeyListJob() {} + +static KeyListResult do_list_keys(Context *ctx, const QStringList &pats, std::vector &keys, bool secretOnly) +{ + + const _detail::PatternConverter pc(pats); + + if (const Error err = ctx->startKeyListing(pc.patterns(), secretOnly)) { + return KeyListResult(0, err); + } + + Error err; + do { + keys.push_back(ctx->nextKey(err)); + } while (!err); + + keys.pop_back(); + + const KeyListResult result = ctx->endKeyListing(); + ctx->cancelPendingOperation(); + return result; +} + +static QGpgMEKeyListJob::result_type list_keys(Context *ctx, QStringList pats, bool secretOnly) +{ + if (pats.size() < 2) { + std::vector keys; + const KeyListResult r = do_list_keys(ctx, pats, keys, secretOnly); + return std::make_tuple(r, keys, QString(), Error()); + } + + // The communication channel between gpgme and gpgsm is limited in + // the number of patterns that can be transported, but they won't + // say to how much, so we need to find out ourselves if we get a + // LINE_TOO_LONG error back... + + // We could of course just feed them single patterns, and that would + // probably be easier, but the performance penalty would currently + // be noticeable. + + unsigned int chunkSize = pats.size(); +retry: + std::vector keys; + keys.reserve(pats.size()); + KeyListResult result; + do { + const KeyListResult this_result = do_list_keys(ctx, pats.mid(0, chunkSize), keys, secretOnly); + if (this_result.error().code() == GPG_ERR_LINE_TOO_LONG) { + // got LINE_TOO_LONG, try a smaller chunksize: + chunkSize /= 2; + if (chunkSize < 1) + // chunks smaller than one can't be -> return the error. + { + return std::make_tuple(this_result, keys, QString(), Error()); + } else { + goto retry; + } + } else if (this_result.error().code() == GPG_ERR_EOF) { + // early end of keylisting (can happen when ~/.gnupg doesn't + // exist). Fakeing an empty result: + return std::make_tuple(KeyListResult(), std::vector(), QString(), Error()); + } + // ok, that seemed to work... + result.mergeWith(this_result); + if (result.error().code()) { + break; + } + pats = pats.mid(chunkSize); + } while (!pats.empty()); + return std::make_tuple(result, keys, QString(), Error()); +} + +Error QGpgMEKeyListJob::start(const QStringList &patterns, bool secretOnly) +{ + mSecretOnly = secretOnly; + run(std::bind(&list_keys, std::placeholders::_1, patterns, secretOnly)); + return Error(); +} + +KeyListResult QGpgMEKeyListJob::exec(const QStringList &patterns, bool secretOnly, std::vector &keys) +{ + mSecretOnly = secretOnly; + const result_type r = list_keys(context(), patterns, secretOnly); + resultHook(r); + keys = std::get<1>(r); + return std::get<0>(r); +} + +void QGpgMEKeyListJob::resultHook(const result_type &tuple) +{ + mResult = std::get<0>(tuple); + Q_FOREACH (const Key &key, std::get<1>(tuple)) { + Q_EMIT nextKey(key); + } +} + +void QGpgMEKeyListJob::addMode(KeyListMode mode) +{ + context()->addKeyListMode(mode); +} +#if 0 +void QGpgMEKeyListJob::showErrorDialog(QWidget *parent, const QString &caption) const +{ + if (!mResult.error() || mResult.error().isCanceled()) { + return; + } + const QString msg = i18n("

An error occurred while fetching " + "the keys from the backend:

" + "

%1

", + QString::fromLocal8Bit(mResult.error().asString())); + KMessageBox::error(parent, msg, caption); +} +#endif +#include "qgpgmekeylistjob.moc" diff --git a/lang/qt/src/qgpgmekeylistjob.h b/lang/qt/src/qgpgmekeylistjob.h new file mode 100644 index 0000000..2d5406a --- /dev/null +++ b/lang/qt/src/qgpgmekeylistjob.h @@ -0,0 +1,88 @@ +/* + qgpgmekeylistjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __QGPGME_QGPGMEKEYLISTJOB_H__ +#define __QGPGME_QGPGMEKEYLISTJOB_H__ + +#include "keylistjob.h" + +#include "threadedjobmixin.h" + +#ifdef BUILDING_QGPGME +# include "keylistresult.h" +#else +#include +#endif +#ifdef BUILDING_QGPGME +# include "key.h" +#else +#include +#endif + +namespace QGpgME +{ + +class QGpgMEKeyListJob +#ifdef Q_MOC_RUN + : public KeyListJob +#else + : public _detail::ThreadedJobMixin, QString, GpgME::Error> > +#endif +{ + Q_OBJECT +#ifdef Q_MOC_RUN +public Q_SLOTS: + void slotFinished(); +#endif +public: + explicit QGpgMEKeyListJob(GpgME::Context *context); + ~QGpgMEKeyListJob(); + + /* from KeyListJob */ + GpgME::Error start(const QStringList &patterns, bool secretOnly) Q_DECL_OVERRIDE; + + /* from KeyListJob */ + GpgME::KeyListResult exec(const QStringList &patterns, bool secretOnly, std::vector &keys) Q_DECL_OVERRIDE; + + void addMode(GpgME::KeyListMode mode) Q_DECL_OVERRIDE; + + /* from ThreadedJobMixin */ + void resultHook(const result_type &result) Q_DECL_OVERRIDE; +private: + GpgME::KeyListResult mResult; + bool mSecretOnly; +}; + +} + +#endif // __QGPGME_QGPGMEKEYLISTJOB_H__ diff --git a/lang/qt/src/qgpgmelistallkeysjob.cpp b/lang/qt/src/qgpgmelistallkeysjob.cpp new file mode 100644 index 0000000..fd8bfc3 --- /dev/null +++ b/lang/qt/src/qgpgmelistallkeysjob.cpp @@ -0,0 +1,168 @@ +/* + qgpgmelistallkeysjob.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "qgpgmelistallkeysjob.h" + +#include "key.h" +#include "context.h" +#include "keylistresult.h" +#include + +#include + +#include +#include +#include + +using namespace QGpgME; +using namespace GpgME; + +QGpgMEListAllKeysJob::QGpgMEListAllKeysJob(Context *context) + : mixin_type(context), + mResult() +{ + lateInitialization(); +} + +QGpgMEListAllKeysJob::~QGpgMEListAllKeysJob() {} + +static KeyListResult do_list_keys(Context *ctx, std::vector &keys, bool secretOnly) +{ + + const char **pat = 0; + if (const Error err = ctx->startKeyListing(pat, secretOnly)) { + return KeyListResult(0, err); + } + + Error err; + do { + keys.push_back(ctx->nextKey(err)); + } while (!err); + + keys.pop_back(); + + const KeyListResult result = ctx->endKeyListing(); + ctx->cancelPendingOperation(); + return result; +} + +namespace +{ + +template +ForwardIterator unique_by_merge(ForwardIterator first, ForwardIterator last, BinaryPredicate pred) +{ + first = std::adjacent_find(first, last, pred); + if (first == last) { + return last; + } + + ForwardIterator dest = first; + dest->mergeWith(*++first); + while (++first != last) + if (pred(*dest, *first)) { + dest->mergeWith(*first); + } else { + *++dest = *first; + } + return ++dest; +} + +} + +static void merge_keys(std::vector &merged, std::vector &pub, std::vector &sec) +{ + merged.reserve(pub.size() + sec.size()); + + std::merge(pub.begin(), pub.end(), + sec.begin(), sec.end(), + std::back_inserter(merged), + ByFingerprint()); + + merged.erase(unique_by_merge(merged.begin(), merged.end(), ByFingerprint()), + merged.end()); +} + +static QGpgMEListAllKeysJob::result_type list_keys(Context *ctx, bool mergeKeys) +{ + std::vector pub, sec, merged; + KeyListResult r; + + r.mergeWith(do_list_keys(ctx, pub, false)); + std::sort(pub.begin(), pub.end(), ByFingerprint()); + + r.mergeWith(do_list_keys(ctx, sec, true)); + std::sort(sec.begin(), sec.end(), ByFingerprint()); + + if (mergeKeys) { + merge_keys(merged, pub, sec); + } else { + merged.swap(pub); + } + return std::make_tuple(r, merged, sec, QString(), Error()); +} + +Error QGpgMEListAllKeysJob::start(bool mergeKeys) +{ + run(std::bind(&list_keys, std::placeholders::_1, mergeKeys)); + return Error(); +} + +KeyListResult QGpgMEListAllKeysJob::exec(std::vector &pub, std::vector &sec, bool mergeKeys) +{ + const result_type r = list_keys(context(), mergeKeys); + resultHook(r); + pub = std::get<1>(r); + sec = std::get<2>(r); + return std::get<0>(r); +} + +void QGpgMEListAllKeysJob::resultHook(const result_type &tuple) +{ + mResult = std::get<0>(tuple); +} + +#if 0 +void QGpgMEListAllKeysJob::showErrorDialog(QWidget *parent, const QString &caption) const +{ + if (!mResult.error() || mResult.error().isCanceled()) { + return; + } + const QString msg = i18n("

An error occurred while fetching " + "the keys from the backend:

" + "

%1

", + QString::fromLocal8Bit(mResult.error().asString())); + KMessageBox::error(parent, msg, caption); +} +#endif +#include "qgpgmelistallkeysjob.moc" diff --git a/lang/qt/src/qgpgmelistallkeysjob.h b/lang/qt/src/qgpgmelistallkeysjob.h new file mode 100644 index 0000000..1fc69d4 --- /dev/null +++ b/lang/qt/src/qgpgmelistallkeysjob.h @@ -0,0 +1,86 @@ +/* + qgpgmelistallkeysjob.h + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2004,2008 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#ifndef __QGPGME_QGPGMELISTALLKEYSJOB_H__ +#define __QGPGME_QGPGMELISTALLKEYSJOB_H__ + +#include "listallkeysjob.h" + +#include "threadedjobmixin.h" + +#ifdef BUILDING_QGPGME +# include "keylistresult.h" +#else +#include +#endif +#ifdef BUILDING_QGPGME +# include "key.h" +#else +#include +#endif + +namespace QGpgME +{ + +class QGpgMEListAllKeysJob +#ifdef Q_MOC_RUN + : public ListAllKeysJob +#else + : public _detail::ThreadedJobMixin, std::vector, QString, GpgME::Error> > +#endif +{ + Q_OBJECT +#ifdef Q_MOC_RUN +public Q_SLOTS: + void slotFinished(); +#endif +public: + explicit QGpgMEListAllKeysJob(GpgME::Context *context); + ~QGpgMEListAllKeysJob(); + + /* from ListAllKeysJob */ + GpgME::Error start(bool mergeKeys) Q_DECL_OVERRIDE; + + /* from ListAllKeysJob */ + GpgME::KeyListResult exec(std::vector &pub, std::vector &sec, bool mergeKeys) Q_DECL_OVERRIDE; + + /* from ThreadedJobMixin */ + void resultHook(const result_type &result) Q_DECL_OVERRIDE; + +private: + GpgME::KeyListResult mResult; +}; + +} + +#endif // __QGPGME_QGPGMELISTALLKEYSJOB_H__ diff --git a/lang/qt/src/qgpgmenewcryptoconfig.cpp b/lang/qt/src/qgpgmenewcryptoconfig.cpp new file mode 100644 index 0000000..7303f10 --- /dev/null +++ b/lang/qt/src/qgpgmenewcryptoconfig.cpp @@ -0,0 +1,738 @@ +/* + qgpgmenewcryptoconfig.cpp + + This file is part of qgpgme, the Qt API binding for gpgme + Copyright (c) 2010 Klarälvdalens Datakonsult AB + Copyright (c) 2016 Intevation GmbH + + QGpgME is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + QGpgME is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In addition, as a special exception, the copyright holders give + permission to link the code of this program with any edition of + the Qt library by Trolltech AS, Norway (or with modified versions + of Qt that use the same license as Qt), and distribute linked + combinations including the two. You must obey the GNU General + Public License in all respects for all of the code used other than + Qt. If you modify this file, you may extend this exception to + your version of the file, but you are not obligated to do so. If + you do not wish to do so, delete this exception statement from + your version. +*/ + +#include "qgpgmenewcryptoconfig.h" + +#include +#include "gpgme_backend_debug.h" + +#include + +#include "global.h" +#include "error.h" + + +#include +#include +#include + +using namespace QGpgME; +using namespace GpgME; +using namespace GpgME::Configuration; + +namespace +{ +struct Select1St { + template + const U &operator()(const std::pair &p) const + { + return p.first; + } + template + const U &operator()(const QPair &p) const + { + return p.first; + } +}; +} + +// Just for the Q_ASSERT in the dtor. Not thread-safe, but who would +// have 2 threads talking to gpgconf anyway? :) +static bool s_duringClear = false; + +QGpgMENewCryptoConfig::QGpgMENewCryptoConfig() + : m_parsed(false) +{ +} + +QGpgMENewCryptoConfig::~QGpgMENewCryptoConfig() +{ + clear(); +} + +void QGpgMENewCryptoConfig::reloadConfiguration(bool showErrors) +{ + clear(); + + Error error; + const std::vector components = Component::load(error); +#ifndef NDEBUG + { + std::stringstream ss; + ss << "error: " << error + << "components:\n"; + std::copy(components.begin(), components.end(), + std::ostream_iterator(ss, "\n")); + qCDebug(GPGPME_BACKEND_LOG) << ss.str().c_str(); + } +#endif +#if 0 + TODO port? + if (error && showErrors) { + const QString wmsg = i18n("Failed to execute gpgconf:

%1

", QString::fromLocal8Bit(error.asString())); + qCWarning(GPGPME_BACKEND_LOG) << wmsg; // to see it from test_cryptoconfig.cpp + KMessageBox::error(0, wmsg); + } +#endif + Q_FOREACH(const Component & c, components) { + const std::shared_ptr comp(new QGpgMENewCryptoConfigComponent); + comp->setComponent(c); + m_componentsByName[ comp->name() ] = comp; + } + m_parsed = true; +} + +QStringList QGpgMENewCryptoConfig::componentList() const +{ + if (!m_parsed) { + const_cast(this)->reloadConfiguration(true); + } + QStringList result; + std::transform(m_componentsByName.begin(), m_componentsByName.end(), + std::back_inserter(result), + mem_fn(&QGpgMENewCryptoConfigComponent::name)); + return result; +} + +QGpgMENewCryptoConfigComponent *QGpgMENewCryptoConfig::component(const QString &name) const +{ + if (!m_parsed) { + const_cast(this)->reloadConfiguration(false); + } + return m_componentsByName.value(name).get(); +} + +void QGpgMENewCryptoConfig::sync(bool runtime) +{ + Q_FOREACH(const std::shared_ptr &c, m_componentsByName) + c->sync(runtime); +} + +void QGpgMENewCryptoConfig::clear() +{ + s_duringClear = true; + m_componentsByName.clear(); + s_duringClear = false; + m_parsed = false; // next call to componentList/component will need to run gpgconf again +} + +//// + +QGpgMENewCryptoConfigComponent::QGpgMENewCryptoConfigComponent() + : CryptoConfigComponent(), + m_component() +{ + +} + +void QGpgMENewCryptoConfigComponent::setComponent(const Component &component) +{ + m_component = component; + m_groupsByName.clear(); + + std::shared_ptr group; + + const std::vector