1 class IdentitiesManager : Object {
3 public SList<IdCard> id_card_list;
5 private const string FILE_NAME = "identities.txt";
7 public IdentitiesManager ()
9 id_card_list = new SList<IdCard>();
10 var key_file = new KeyFile ();
12 var path = get_data_dir ();
13 var filename = Path.build_filename (path, FILE_NAME);
17 key_file.load_from_file (filename, KeyFileFlags.NONE);
21 stdout.printf("Error: %s\n", e.message);
25 var identities_uris = key_file.get_groups ();
26 foreach (string identity in identities_uris)
30 IdCard id_card = new IdCard ();
32 id_card.issuer = key_file.get_string (identity, "Issuer");
33 id_card.username = key_file.get_string (identity, "Username");
34 id_card.password = key_file.get_string (identity, "Password");
35 id_card.services = key_file.get_string_list (identity, "Services");
36 id_card.display_name = key_file.get_string (identity, "DisplayName");
37 id_card.set_data ("pixbuf", find_icon ("avatar-default", 48));
40 if (key_file.has_key (identity, "Rules-Patterns") &&
41 key_file.has_key (identity, "Rules-AlwaysConfirm"))
43 string [] rules_patterns = key_file.get_string_list (identity, "Rules-Patterns");
44 string [] rules_always_conf = key_file.get_string_list (identity, "Rules-AlwaysConfirm");
46 if (rules_patterns.length == rules_always_conf.length)
48 Rule[] rules = new Rule[rules_patterns.length];
49 for (int i = 0; i < rules_patterns.length; i++)
51 rules[i] = {rules_patterns[i], rules_always_conf[i]};
53 id_card.rules = rules;
57 id_card.trust_anchor.ca_cert = key_file.get_string (identity, "CA-Cert");
58 id_card.trust_anchor.subject = key_file.get_string (identity, "Subject");
59 id_card.trust_anchor.subject_alt = key_file.get_string (identity, "SubjectAlt");
60 id_card.trust_anchor.server_cert = key_file.get_string (identity, "ServerCert");
62 id_card_list.prepend (id_card);
66 stdout.printf ("Error: %s\n", e.message);
71 public void store_id_cards ()
73 var key_file = new KeyFile ();
75 foreach (IdCard id_card in this.id_card_list)
77 string[] rules_patterns = new string[id_card.rules.length];
78 string[] rules_always_conf = new string[id_card.rules.length];
80 for (int i=0; i<id_card.rules.length; i++)
82 rules_patterns[i] = id_card.rules[i].pattern;
83 rules_always_conf[i] = id_card.rules[i].always_confirm;
86 key_file.set_string (id_card.display_name, "Issuer", id_card.issuer ?? "");
87 key_file.set_string (id_card.display_name, "DisplayName", id_card.display_name ?? "");
88 key_file.set_string (id_card.display_name, "Username", id_card.username ?? "");
89 key_file.set_string (id_card.display_name, "Password", id_card.password ?? "");
90 key_file.set_string_list (id_card.display_name, "Services", id_card.services ?? {});
92 if (id_card.rules.length > 0)
94 key_file.set_string_list (id_card.display_name, "Rules-Patterns", rules_patterns);
95 key_file.set_string_list (id_card.display_name, "Rules-AlwaysConfirm", rules_always_conf);
98 key_file.set_string (id_card.display_name, "CA-Cert", id_card.trust_anchor.ca_cert ?? "");
99 key_file.set_string (id_card.display_name, "Subject", id_card.trust_anchor.subject ?? "");
100 key_file.set_string (id_card.display_name, "SubjectAlt", id_card.trust_anchor.subject_alt ?? "");
101 key_file.set_string (id_card.display_name, "ServerCert", id_card.trust_anchor.server_cert ?? "");
104 var text = key_file.to_data (null);
108 var path = get_data_dir ();
109 var filename = Path.build_filename (path, FILE_NAME);
110 FileUtils.set_contents (filename, text, -1);
114 stdout.printf ("Error: %s\n", e.message);
118 private string get_data_dir()
122 path = Path.build_filename (Environment.get_user_data_dir (),
123 Config.PACKAGE_TARNAME);
124 if (!FileUtils.test (path, FileTest.EXISTS))
126 DirUtils.create (path, 0700);