about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2015-03-22 01:03:06 +0000
committerJames Booth <boothj5@gmail.com>2015-03-22 01:03:06 +0000
commit8a5d1fef2930036d34bf02d0b15d0b6239725ffd (patch)
tree573cf23d9ac350e83727adb58a2971a71f3a1206
parentfd86615549a76c050dbcb50deaefde199d8216c7 (diff)
downloadprofani-tty-8a5d1fef2930036d34bf02d0b15d0b6239725ffd.tar.gz
Added Id and fingerprint to pgp key list
-rw-r--r--src/command/commands.c10
-rw-r--r--src/pgp/gpg.c22
-rw-r--r--src/pgp/gpg.h9
-rw-r--r--tests/pgp/stub_gpg.c4
4 files changed, 40 insertions, 5 deletions
diff --git a/src/command/commands.c b/src/command/commands.c
index 5d1ddf12..bb8c0381 100644
--- a/src/command/commands.c
+++ b/src/command/commands.c
@@ -4073,14 +4073,18 @@ cmd_pgp(gchar **args, struct cmd_help_t help)
     if (g_strcmp0(args[0], "keys") == 0) {
         GSList *keys = p_gpg_list_keys();
         if (keys) {
+            cons_show("PGP keys:");
             while (keys) {
-                cons_debug("Key: %s", keys->data);
+                ProfPGPKey *key = keys->data;
+                cons_show("  %s", key->name);
+                cons_show("    ID          : %s", key->id);
+                cons_show("    Fingerprint : %s", key->fp);
                 keys = g_slist_next(keys);
             }
         } else {
-            cons_debug("No keys found");
+            cons_show("No keys found");
         }
-        g_slist_free_full(keys, (GDestroyNotify)free);
+        g_slist_free_full(keys, (GDestroyNotify)p_gpg_free_key);
     } else if (g_strcmp0(args[0], "libver") == 0) {
         const char *libver = p_gpg_libver();
         if (libver) {
diff --git a/src/pgp/gpg.c b/src/pgp/gpg.c
index 4b1b57c9..67ea8794 100644
--- a/src/pgp/gpg.c
+++ b/src/pgp/gpg.c
@@ -34,9 +34,12 @@
 
 #include <locale.h>
 #include <string.h>
+#include <stdlib.h>
 
+#include <glib.h>
 #include <gpgme.h>
 
+#include "pgp/gpg.h"
 #include "log.h"
 
 static const char *libversion;
@@ -70,7 +73,14 @@ p_gpg_list_keys(void)
             if (error) {
                 break;
             }
-            result = g_slist_append(result, strdup(key->uids->uid));
+
+            ProfPGPKey *p_pgpkey = malloc(sizeof(ProfPGPKey));
+            p_pgpkey->id = strdup(key->subkeys->keyid);
+            p_pgpkey->name = strdup(key->uids->uid);
+            p_pgpkey->fp = strdup(key->subkeys->fpr);
+
+            result = g_slist_append(result, p_pgpkey);
+
             gpgme_key_release(key);
         }
     } else {
@@ -88,3 +98,13 @@ p_gpg_libver(void)
     return libversion;
 }
 
+void
+p_gpg_free_key(ProfPGPKey *key)
+{
+    if (key) {
+        free(key->id);
+        free(key->name);
+        free(key->fp);
+        free(key);
+    }
+}
\ No newline at end of file
diff --git a/src/pgp/gpg.h b/src/pgp/gpg.h
index 9702e31a..f5271596 100644
--- a/src/pgp/gpg.h
+++ b/src/pgp/gpg.h
@@ -35,8 +35,15 @@
 #ifndef GPG_H
 #define GPG_H
 
+typedef struct pgp_key_t {
+    char *id;
+    char *name;
+    char *fp;
+} ProfPGPKey;
+
 void p_gpg_init(void);
 GSList* p_gpg_list_keys(void);
-char* p_gpg_libver(void);
+const char* p_gpg_libver(void);
+void p_gpg_free_key(ProfPGPKey *key);
 
 #endif
diff --git a/tests/pgp/stub_gpg.c b/tests/pgp/stub_gpg.c
index f0c30b55..29a1d828 100644
--- a/tests/pgp/stub_gpg.c
+++ b/tests/pgp/stub_gpg.c
@@ -1,5 +1,7 @@
 #include <glib.h>
 
+#include "pgp/gpg.h"
+
 void p_gpg_init(void) {}
 
 GSList* p_gpg_list_keys(void)
@@ -11,3 +13,5 @@ const char* p_gpg_libver(void) {
     return NULL;
 }
 
+void p_gpg_free_key(ProfPGPKey *key) {}
+