about summary refs log tree commit diff stats
path: root/src/config
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2015-09-24 01:06:53 +0100
committerJames Booth <boothj5@gmail.com>2015-09-24 01:06:53 +0100
commitbd421853897b432a2877da549eb7dbc4a67503e3 (patch)
tree2eadef99ee2223c6ee56c42c8592046aa24d7efa /src/config
parent8d2c7f1ac0b5e772310b1bb7f324a91bbf8b3805 (diff)
downloadprofani-tty-bd421853897b432a2877da549eb7dbc4a67503e3.tar.gz
Added /tls revoke
Diffstat (limited to 'src/config')
-rw-r--r--src/config/tlscerts.c41
-rw-r--r--src/config/tlscerts.h6
2 files changed, 47 insertions, 0 deletions
diff --git a/src/config/tlscerts.c b/src/config/tlscerts.c
index 7d2220cf..3d0a0b24 100644
--- a/src/config/tlscerts.c
+++ b/src/config/tlscerts.c
@@ -41,6 +41,7 @@
 #include "config/tlscerts.h"
 #include "log.h"
 #include "common.h"
+#include "tools/autocomplete.h"
 
 static gchar *tlscerts_loc;
 static GKeyFile *tlscerts;
@@ -48,6 +49,8 @@ static GKeyFile *tlscerts;
 static gchar* _get_tlscerts_file(void);
 static void _save_tlscerts(void);
 
+static Autocomplete certs_ac;
+
 void
 tlscerts_init(void)
 {
@@ -60,6 +63,16 @@ tlscerts_init(void)
 
     tlscerts = g_key_file_new();
     g_key_file_load_from_file(tlscerts, tlscerts_loc, G_KEY_FILE_KEEP_COMMENTS, NULL);
+
+    certs_ac = autocomplete_new();
+    gsize len = 0;
+    gchar **groups = g_key_file_get_groups(tlscerts, &len);
+
+    int i = 0;
+    for (i = 0; i < g_strv_length(groups); i++) {
+        autocomplete_add(certs_ac, groups[i]);
+    }
+    g_strfreev(groups);
 }
 
 gboolean
@@ -146,6 +159,8 @@ tlscerts_add(TLSCertificate *cert)
         return;
     }
 
+    autocomplete_add(certs_ac, cert->fingerprint);
+
     if (cert->domain) {
         g_key_file_set_string(tlscerts, cert->fingerprint, "domain", cert->domain);
     }
@@ -165,6 +180,31 @@ tlscerts_add(TLSCertificate *cert)
     _save_tlscerts();
 }
 
+gboolean
+tlscerts_revoke(const char * const fingerprint)
+{
+    gboolean result =  g_key_file_remove_group(tlscerts, fingerprint, NULL);
+    if (result) {
+        autocomplete_remove(certs_ac, fingerprint);
+    }
+
+    _save_tlscerts();
+
+    return result;
+}
+
+char *
+tlscerts_complete(const char * const prefix)
+{
+    return autocomplete_complete(certs_ac, prefix, TRUE);
+}
+
+void
+tlscerts_reset_ac(void)
+{
+    autocomplete_reset(certs_ac);
+}
+
 void
 tlscerts_free(TLSCertificate *cert)
 {
@@ -183,6 +223,7 @@ tlscerts_close(void)
 {
     g_key_file_free(tlscerts);
     tlscerts = NULL;
+    autocomplete_free(certs_ac);
 }
 
 static gchar *
diff --git a/src/config/tlscerts.h b/src/config/tlscerts.h
index 56e81dd6..b8a15c5b 100644
--- a/src/config/tlscerts.h
+++ b/src/config/tlscerts.h
@@ -54,10 +54,16 @@ gboolean tlscerts_exists(const char * const fingerprint);
 
 void tlscerts_add(TLSCertificate *cert);
 
+gboolean tlscerts_revoke(const char * const fingerprint);
+
 void tlscerts_free(TLSCertificate *cert);
 
 GList* tlscerts_list(void);
 
+char* tlscerts_complete(const char * const prefix);
+
+void tlscerts_reset_ac(void);
+
 void tlscerts_close(void);
 
 #endif