public class TrustAnchor : Object
{
- public string ca_cert {get; set; default = null;}
- public string subject {get; set; default = null;}
- public string subject_alt {get; set; default = null;}
- public string server_cert {get; set; default = null;}
+ public string ca_cert {get; set; default = "";}
+ public string subject {get; set; default = "";}
+ public string subject_alt {get; set; default = "";}
+ public string server_cert {get; set; default = "";}
+ public int Compare(TrustAnchor other)
+ {
+ if (this.ca_cert != other.ca_cert)
+ return 1;
+ if (this.subject != other.subject)
+ return 1;
+ if (this.subject_alt != other.subject_alt)
+ return 1;
+ if (this.server_cert != other.server_cert)
+ return 1;
+ return 0;
+ }
}
public struct Rule
{
public string pattern;
public string always_confirm;
+ public int Compare(Rule other) {
+ if (this.pattern != other.pattern)
+ return 1;
+ if (this.always_confirm != other.always_confirm)
+ return 1;
+ return 0;
+ }
}
public class IdCard : Object
{
- public string display_name { get; set; default = null; }
+ public const string NO_IDENTITY = "No Identity";
+
+ private string _nai;
+
+ public string display_name { get; set; default = ""; }
- public string username { get; set; default = null; }
+ public string username { get; set; default = ""; }
+#if GNOME_KEYRING
+ private unowned string _password;
+ public string password {
+ get {
+ return (_password!=null) ? _password : "";
+ }
+ set {
+ if (_password != null) {
+ GnomeKeyring.memory_free((void *)_password);
+ _password = null;
+ }
+ if (value != null)
+ _password = GnomeKeyring.memory_strdup(value);
+ }
+ }
+#else
public string password { get; set; default = null; }
+#endif
- public string issuer { get; set; default = null; }
+ public string issuer { get; set; default = ""; }
public Rule[] rules {get; set; default = {};}
+ public string[] services { get; set; default = {}; }
+ public bool temporary {get; set; default = false; }
public TrustAnchor trust_anchor { get; set; default = new TrustAnchor (); }
- public Gdk.Pixbuf pixbuf { get; set; default = null; }
- public string[] services { get; set; default = {}; }
+ public unowned string nai { get { _nai = username + "@" + issuer; return _nai;}}
+
+ public bool store_password { get; set; default = false; }
+
+ public bool IsNoIdentity()
+ {
+ return (display_name == NO_IDENTITY);
+ }
+
+ public enum DiffFlags {
+ DISPLAY_NAME,
+ USERNAME,
+ PASSWORD,
+ ISSUER,
+ RULES,
+ SERVICES,
+ TRUST_ANCHOR;
+ }
+
+ public int Compare(IdCard other)
+ {
+ int diff = 0;
+ if (this.display_name != other.display_name)
+ diff |= 1 << DiffFlags.DISPLAY_NAME;
+ if (this.username != other.username)
+ diff |= 1 << DiffFlags.USERNAME;
+ if (this.password != other.password)
+ diff |= 1 << DiffFlags.PASSWORD;
+ if (this.issuer != other.issuer)
+ diff |= 1 << DiffFlags.ISSUER;
+ if (CompareRules(this.rules, other.rules)!=0)
+ diff |= 1 << DiffFlags.RULES;
+ if (CompareStringArray(this.services, other.services)!=0)
+ diff |= 1 << DiffFlags.SERVICES;
+ if (this.trust_anchor.Compare(other.trust_anchor)!=0)
+ diff |= 1 << DiffFlags.TRUST_ANCHOR;
+ stdout.printf("Diff Flags: %x\n", diff);
+ return diff;
+ }
- //TODO: Set the getter and remove the setter/default
- public string nai { get; set; default = null; }
+ public static IdCard NewNoIdentity()
+ {
+ IdCard card = new IdCard();
+ card.display_name = NO_IDENTITY;
+ return card;
+ }
+
+ ~IdCard() {
+ password = null;
+ }
+}
+
+public int CompareRules(Rule[] a, Rule[] b)
+{
+ if (a.length != b.length)
+ return 1;
+ for (int i=0; i<a.length; i++) {
+ if (a[i].Compare(b[i]) != 0)
+ return 1;
+ }
+ return 0;
+}
+
+public int CompareStringArray(string[] a, string [] b)
+{
+ if (a.length != b.length)
+ return 1;
+ for (int i=0; i<a.length; i++) {
+ if (a[i] != b[i])
+ return 1;
+ }
+ return 0;
}