cpp: Add shorthand for key locate master
authorAndre Heinecke <aheinecke@intevation.de>
Fri, 16 Feb 2018 11:58:54 +0000 (12:58 +0100)
committerAndre Heinecke <aheinecke@intevation.de>
Fri, 16 Feb 2018 12:00:49 +0000 (13:00 +0100)
* lang/cpp/src/key.cpp (Key::locate): New static helper.
* lang/cpp/src/key.h: Update accordingly.

NEWS
lang/cpp/src/key.cpp
lang/cpp/src/key.h

diff --git a/NEWS b/NEWS
index 40d5b53..1a342b1 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,12 @@
 Noteworthy changes in version 1.10.1 (unreleased)
 -------------------------------------------------
 
 Noteworthy changes in version 1.10.1 (unreleased)
 -------------------------------------------------
 
+ * Interface changes relative to the 1.10.0 release:
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ cpp: Key::locate                     NEW.
+ cpp: Data::toString                  NEW.
+
+
 Noteworthy changes in version 1.10.0 (2017-12-12)
 -------------------------------------------------
 
 Noteworthy changes in version 1.10.0 (2017-12-12)
 -------------------------------------------------
 
index 66fdea9..0e86a19 100644 (file)
@@ -371,6 +371,27 @@ void Key::update()
     return;
 }
 
     return;
 }
 
+// static
+Key Key::locate(const char *mbox)
+{
+    if (!mbox) {
+        return Key();
+    }
+
+    auto ctx = Context::createForProtocol(OpenPGP);
+    if (!ctx) {
+        return Key();
+    }
+
+    ctx->setKeyListMode (Extern | Local);
+
+    Error e = ctx->startKeyListing (mbox);
+    auto ret = ctx->nextKey (e);
+    delete ctx;
+
+    return ret;
+}
+
 //
 //
 // class Subkey
 //
 //
 // class Subkey
index 829bd26..c3c711c 100644 (file)
@@ -164,6 +164,20 @@ public:
      * @returns a possible error.
      **/
     Error addUid(const char *uid);
      * @returns a possible error.
      **/
     Error addUid(const char *uid);
+
+    /**
+     * @brief try to locate the best pgp key for a given mailbox.
+     *
+     * Boils down to gpg --locate-key <mbox>
+     * This may take some time if remote sources are also
+     * used.
+     *
+     * @param mbox should be a mail address does not need to be normalized.
+     *
+     * @returns The best key for a mailbox or a null key.
+     */
+    static Key locate(const char *mbox);
+
 private:
     gpgme_key_t impl() const
     {
 private:
     gpgme_key_t impl() const
     {