X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=src%2Fmoonshot-local-flat-file-store.vala;h=54a63cccfd7d8b482fa4aabe8acbab8eab22a649;hb=20dc7eaf82b686dcb77e94d6a491df575810e439;hp=22981f5929e9fb9a74125094dac115de285850ed;hpb=9c3c365796be4b6e6f8f97dcd83f722cc7d3311c;p=moonshot-ui.git diff --git a/src/moonshot-local-flat-file-store.vala b/src/moonshot-local-flat-file-store.vala index 22981f5..54a63cc 100644 --- a/src/moonshot-local-flat-file-store.vala +++ b/src/moonshot-local-flat-file-store.vala @@ -9,22 +9,33 @@ public class LocalFlatFileStore : Object, IIdentityCardStore { store_id_cards (); } - public void update_card(IdCard card) { + public IdCard? update_card(IdCard 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; + return null; + } - public void remove_card(IdCard card) { - id_card_list.remove(card); - store_id_cards (); + public bool remove_card(IdCard card) { + if (id_card_list.remove(card)) { + store_id_cards (); + return true; + } + return false; } - public LinkedList get_card_list() { - return id_card_list; - } + public LinkedList get_card_list() { + return id_card_list; + } + + public IIdentityCardStore.StoreType get_store_type() { + return IIdentityCardStore.StoreType.FLAT_FILE; + } - private void load_id_cards() { + private void load_id_cards() { id_card_list.clear(); var key_file = new KeyFile (); var path = get_data_dir (); @@ -48,8 +59,11 @@ public class LocalFlatFileStore : Object, IIdentityCardStore { id_card.password = key_file.get_string (identity, "Password"); id_card.services = key_file.get_string_list (identity, "Services"); id_card.display_name = key_file.get_string (identity, "DisplayName"); - id_card.set_data ("pixbuf", find_icon ("avatar-default", 48)); - + if (key_file.has_key (identity, "StorePassword")) { + id_card.store_password = (key_file.get_string (identity, "StorePassword") == "yes"); + } else { + id_card.store_password = (id_card.password != null) && (id_card.password != ""); + } if (key_file.has_key (identity, "Rules-Patterns") && key_file.has_key (identity, "Rules-AlwaysConfirm")) { @@ -77,7 +91,7 @@ public class LocalFlatFileStore : Object, IIdentityCardStore { stdout.printf ("Error: %s\n", e.message); } } - } + } private string get_data_dir() { string path; @@ -85,7 +99,7 @@ public class LocalFlatFileStore : Object, IIdentityCardStore { Config.PACKAGE_TARNAME); if (!FileUtils.test (path, FileTest.EXISTS)) { - DirUtils.create (path, 0700); + DirUtils.create_with_parents (path, 0700); } return path; } @@ -93,24 +107,31 @@ public class LocalFlatFileStore : Object, IIdentityCardStore { public void store_id_cards () { var key_file = new KeyFile (); foreach (IdCard id_card in this.id_card_list) { - string[] rules_patterns = new string[id_card.rules.length]; - string[] rules_always_conf = new string[id_card.rules.length]; + /* workaround for Centos vala array property bug: use temp arrays */ + var rules = id_card.rules; + var services = id_card.services; + string[] rules_patterns = new string[rules.length]; + string[] rules_always_conf = new string[rules.length]; - for (int i=0; i 0) { + if (rules.length > 0) { key_file.set_string_list (id_card.display_name, "Rules-Patterns", rules_patterns); key_file.set_string_list (id_card.display_name, "Rules-AlwaysConfirm", rules_always_conf); } + key_file.set_string (id_card.display_name, "StorePassword", id_card.store_password ? "yes" : "no"); // Trust anchor key_file.set_string (id_card.display_name, "CA-Cert", id_card.trust_anchor.ca_cert ?? ""); @@ -124,8 +145,15 @@ public class LocalFlatFileStore : Object, IIdentityCardStore { try { var path = get_data_dir (); var filename = Path.build_filename (path, FILE_NAME); - FileUtils.set_contents (filename, text, -1); - } + var file = File.new_for_path(filename); + var stream = file.replace(null, false, FileCreateFlags.PRIVATE); +#if IPC_DBUS_GLIB + var bits = text.data; + stream.write(&bits[0], bits.length); +#else + stream.write(text.data); +#endif + } catch (Error e) { stdout.printf ("Error: %s\n", e.message); }