cpp: Add convenience update function to a key
authorAndre Heinecke <aheinecke@intevation.de>
Mon, 5 Sep 2016 10:53:02 +0000 (12:53 +0200)
committerAndre Heinecke <aheinecke@intevation.de>
Mon, 5 Sep 2016 10:53:02 +0000 (12:53 +0200)
* lang/cpp/src/key.cpp (Key::update): New.
* lang/cpp/src/key.h: Update accordingly.

--
This function helps if you have an incomplete key or want
to make sure all info in a key is complete (e.g. validity / tofuinfo)

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

index 204eeca..cfa1ba3 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "util.h"
 #include "tofuinfo.h"
+#include "context.h"
 
 #include <gpgme.h>
 
@@ -322,6 +323,27 @@ const Key &Key::mergeWith(const Key &other)
     return *this;
 }
 
+void Key::update()
+{
+    auto ctx = Context::createForProtocol(protocol());
+    if (!ctx) {
+        return;
+    }
+    ctx->setKeyListMode(KeyListMode::Local |
+                        KeyListMode::Signatures |
+                        KeyListMode::SignatureNotations |
+                        KeyListMode::Validate |
+                        KeyListMode::WithTofu);
+    Error err;
+    auto newKey = ctx->key(primaryFingerprint(), err, hasSecret());
+    delete ctx;
+    if (err) {
+        return;
+    }
+    swap(newKey);
+    return;
+}
+
 //
 //
 // class Subkey
index 85b16df..f193093 100644 (file)
@@ -146,6 +146,12 @@ public:
 
     unsigned int keyListMode() const;
 
+    /*! Update information about this key.
+     * Starts a keylisting for this key with validity
+     * and tofu information gathering. Blocks for
+     * how long the keylisting takes.*/
+    void update();
+
 private:
     gpgme_key_t impl() const
     {