Split out Gnome Keyring keystore
authorSam Hartman <hartmans@debian.org>
Fri, 23 Nov 2018 16:07:55 +0000 (11:07 -0500)
committerSam Hartman <hartmans@debian.org>
Fri, 23 Nov 2018 16:07:55 +0000 (11:07 -0500)
In preparation for adding libsecret support, split out the gnome
keyring specific functions into their own class.

Makefile.am
src/moonshot-keyring-store-base.vala [new file with mode: 0644]
src/moonshot-keyring-store-gnome.vala [moved from src/moonshot-keyring-store.vala with 78% similarity]

index 11b5f48..900c0ae 100644 (file)
@@ -56,7 +56,8 @@ src_moonshot_SOURCES = \
         src/moonshot-identity-manager-app.vala \
         src/moonshot-identity-management-view.vala \
         src/moonshot-local-flat-file-store.vala \
-        src/moonshot-keyring-store.vala \
+        src/moonshot-keyring-store-base.vala \
+       src/moonshot-keyring-store-gnome.vala \
         src/moonshot-idcard-store.vala \
         src/moonshot-id.vala \
         src/moonshot-identity-dialog.vala \
diff --git a/src/moonshot-keyring-store-base.vala b/src/moonshot-keyring-store-base.vala
new file mode 100644 (file)
index 0000000..4aa6494
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2011-2016, JANET(UK)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of JANET(UK) nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+*/
+using Gee;
+
+#if GNOME_KEYRING || LIBSECRET_KEYRING
+public abstract class KeyringStoreBase : Object, IIdentityCardStore {
+    protected static MoonshotLogger logger = get_logger("KeyringStore");
+
+    protected LinkedList<IdCard> id_card_list;
+    protected const string keyring_store_attribute = "Moonshot";
+    protected const string keyring_store_version = "1.0";
+
+    public void add_card(IdCard card) {
+        logger.trace("add_card: Adding card '%s' with services: '%s'"
+                     .printf(card.display_name, card.get_services_string("; ")));
+
+        id_card_list.add(card);
+        store_id_cards();
+    }
+
+    public IdCard? update_card(IdCard card) {
+        logger.trace("update_card");
+
+        id_card_list.remove(card);
+        id_card_list.add(card);
+
+        store_id_cards();
+        foreach (IdCard idcard in id_card_list) {
+            if (idcard.display_name == card.display_name) {
+                return idcard;
+            }
+        }
+
+        logger.error(@"update_card: card '$(card.display_name)' was not found after re-loading!");
+        return null;
+    }
+
+    public bool remove_card(IdCard card) {
+        bool retval = id_card_list.remove(card);
+        if (retval)
+            store_id_cards();
+        return retval;
+    }
+
+    public IIdentityCardStore.StoreType get_store_type() {
+        return IIdentityCardStore.StoreType.KEYRING;
+    }
+
+    public LinkedList<IdCard> get_card_list() {
+        return id_card_list;
+    }
+
+    protected abstract void clear_keyring();     
+    protected abstract void load_id_cards();
+    internal abstract void store_id_cards();
+    
+
+
+    public KeyringStoreBase() {
+        id_card_list = new LinkedList<IdCard>();
+        load_id_cards();
+    }
+}
+
+#endif
similarity index 78%
rename from src/moonshot-keyring-store.vala
rename to src/moonshot-keyring-store-gnome.vala
index 7ae0d22..0e0ff5c 100644 (file)
@@ -1,5 +1,6 @@
 /*
- * Copyright (c) 2011-2016, JANET(UK)
+* Copyright (C) 2018   Sam Hartman
+* Copyright (c) 2011-2016, JANET(UK)
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
 */
-using Gee;
 
 #if GNOME_KEYRING
-public class KeyringStore : Object, IIdentityCardStore {
-    static MoonshotLogger logger = get_logger("KeyringStore");
 
-    private LinkedList<IdCard> id_card_list;
-    private const string keyring_store_attribute = "Moonshot";
-    private const string keyring_store_version = "1.0";
+using Gee;
+public class KeyringStore : KeyringStoreBase {
     private const GnomeKeyring.ItemType item_type = GnomeKeyring.ItemType.GENERIC_SECRET;
 
-    public void add_card(IdCard card) {
-        logger.trace("add_card: Adding card '%s' with services: '%s'"
-                     .printf(card.display_name, card.get_services_string("; ")));
-
-        id_card_list.add(card);
-        store_id_cards();
-    }
-
-    public IdCard? update_card(IdCard card) {
-        logger.trace("update_card");
-
-        id_card_list.remove(card);
-        id_card_list.add(card);
-
-        store_id_cards();
-        foreach (IdCard idcard in id_card_list) {
-            if (idcard.display_name == card.display_name) {
-                return idcard;
-            }
-        }
-
-        logger.error(@"update_card: card '$(card.display_name)' was not found after re-loading!");
-        return null;
-    }
-
-    public bool remove_card(IdCard card) {
-        bool retval = id_card_list.remove(card);
-        if (retval)
-            store_id_cards();
-        return retval;
-    }
-
-    public IIdentityCardStore.StoreType get_store_type() {
-        return IIdentityCardStore.StoreType.KEYRING;
-    }
-
-    public LinkedList<IdCard> get_card_list() {
-        return id_card_list;
-    }
-
     /* clear all keyring-stored ids (in preparation to store current list) */
-    private void clear_keyring() {
-        GnomeKeyring.AttributeList match = new GnomeKeyring.AttributeList();
-        match.append_string(keyring_store_attribute, keyring_store_version);
-        GLib.List<GnomeKeyring.Found> items;
-        GnomeKeyring.find_items_sync(item_type, match, out items);
-        foreach(unowned GnomeKeyring.Found entry in items) {
-            GnomeKeyring.Result result = GnomeKeyring.item_delete_sync(null, entry.item_id);
-            if (result != GnomeKeyring.Result.OK) {
-                stdout.printf("GnomeKeyring.item_delete_sync() failed. result: %d", result);
-            }
-        }
+    protected override void clear_keyring() {
+      GnomeKeyring.AttributeList match = new GnomeKeyring.AttributeList();
+      match.append_string(keyring_store_attribute, keyring_store_version);
+      GLib.List<GnomeKeyring.Found> items;
+      GnomeKeyring.find_items_sync(item_type, match, out items);
+      foreach(unowned GnomeKeyring.Found entry in items) {
+       GnomeKeyring.Result result = GnomeKeyring.item_delete_sync(null, entry.item_id);
+       if (result != GnomeKeyring.Result.OK) {
+         stdout.printf("GnomeKeyring.item_delete_sync() failed. result: %d", result);
+       }
+      }
     }
-     
-    private void load_id_cards() {
+
+    protected override void load_id_cards() {
         id_card_list.clear();
 
         GnomeKeyring.AttributeList match = new GnomeKeyring.AttributeList();
@@ -181,7 +138,7 @@ public class KeyringStore : Object, IIdentityCardStore {
         }
     }
 
-    internal void store_id_cards() {
+    internal override void store_id_cards() {
         logger.trace("store_id_cards");
         clear_keyring();
         foreach (IdCard id_card in this.id_card_list) {
@@ -224,10 +181,6 @@ public class KeyringStore : Object, IIdentityCardStore {
         load_id_cards();
     }
 
-    public KeyringStore() {
-        id_card_list = new LinkedList<IdCard>();
-        load_id_cards();
-    }
 }
 
 #endif