From: Dan Breslau Date: Thu, 28 Apr 2016 20:21:21 +0000 (-0400) Subject: Minor refactoring of XML import code X-Git-Tag: v0.9.6~18 X-Git-Url: http://www.project-moonshot.org/gitweb/?p=moonshot-ui.git;a=commitdiff_plain;h=d10c51fc6a91a0e074d792a9013226e8ba959240 Minor refactoring of XML import code --- diff --git a/src/moonshot-id.vala b/src/moonshot-id.vala index e578257..2dc9ac2 100644 --- a/src/moonshot-id.vala +++ b/src/moonshot-id.vala @@ -92,8 +92,18 @@ public class IdCard : Object public string issuer { get; set; default = ""; } - public Rule[] rules {get; set; default = {};} - public string[] services { get; set; default = {}; } + private Rule[] _rules = {}; + public Rule[] rules { + get {return _rules;} + internal set {_rules = value ?? {};} + } + + private string[] _services = {}; + public string[] services { + get {return _services;} + internal set {_services = value ?? {};} + } + public bool temporary {get; set; default = false; } public TrustAnchor trust_anchor { get; set; default = new TrustAnchor (); } @@ -141,7 +151,7 @@ public class IdCard : Object if (this.trust_anchor.Compare(other.trust_anchor)!=0) diff |= 1 << DiffFlags.TRUST_ANCHOR; - stdout.printf("Diff Flags: %x\n", diff); + // stdout.printf("Diff Flags: %x\n", diff); return diff; } @@ -155,6 +165,14 @@ public class IdCard : Object ~IdCard() { password = null; } + + internal void add_rule(Rule rule) { + _rules += rule; + } + + internal void add_service(string service) { + _services += service; + } } public int CompareRules(Rule[] a, Rule[] b) diff --git a/src/moonshot-provisioning-common.vala b/src/moonshot-provisioning-common.vala index 48a1fa6..a0c39c3 100644 --- a/src/moonshot-provisioning-common.vala +++ b/src/moonshot-provisioning-common.vala @@ -30,11 +30,10 @@ * SUCH DAMAGE. */ + + namespace WebProvisioning { - IdCard card; - IdCard[] cards; - bool check_stack(SList stack, string[] reference) { if (stack.length() < reference.length) @@ -120,112 +119,116 @@ namespace WebProvisioning return check_stack(stack, display_name_path); } - public void start_element_func(MarkupParseContext context, - string element_name, - string[] attribute_names, - string[] attribute_values) throws MarkupError + public class Parser : Object { - if (element_name == "identity") - { - IdCard[] tmp_cards = cards; + private static MoonshotLogger logger = new MoonshotLogger("WebProvisioning"); - cards = new IdCard[tmp_cards.length + 1]; - for (int i = 0; i < tmp_cards.length; i++) - { - cards[i] = tmp_cards[i]; - } - card = new IdCard(); - cards[tmp_cards.length] = card; - } - else if (element_name == "rule") - { - Rule[] tmp_rules = card.rules; - card.rules = new Rule[tmp_rules.length + 1]; - for (int i = 0; i < tmp_rules.length; i++) + private void start_element_func(MarkupParseContext context, + string element_name, + string[] attribute_names, + string[] attribute_values) throws MarkupError { - card.rules[i] = tmp_rules[i]; + if (element_name == "identity") + { + logger.trace("start_element_func (%p): Adding an identity".printf(this)); + card = new IdCard(); + _cards += card; + } + else if (element_name == "rule") + { + card.add_rule(Rule()); + } } - - card.rules[tmp_rules.length] = Rule(); - } - } - public void - text_element_func(MarkupParseContext context, - string text, - size_t text_len) throws MarkupError - { - unowned SList stack = context.get_element_stack(); + private void + text_element_func(MarkupParseContext context, + string text, + size_t text_len) throws MarkupError { + unowned SList stack = context.get_element_stack(); - if (text_len < 1) - return; + if (text_len < 1) + return; - if (stack.nth_data(0) == "display-name" && display_name_handler(stack)) - { - card.display_name = text; - } - else if (stack.nth_data(0) == "user" && user_handler(stack)) - { - card.username = text; - } - else if (stack.nth_data(0) == "password" && password_handler(stack)) - { - card.password = text; - } - else if (stack.nth_data(0) == "realm" && realm_handler(stack)) - { - card.issuer = text; - } - else if (stack.nth_data(0) == "service") - { - string[] services = card.services; - card.services = new string[services.length + 1]; - for (int i = 0; i < services.length; i++) - { - card.services[i] = services[i]; - } - card.services[services.length] = text; - } - /* Rules */ - else if (stack.nth_data(0) == "pattern" && pattern_handler(stack)) - { - /* use temp array to workaround valac 0.10 bug accessing array property length */ - var temp = card.rules; - card.rules[temp.length - 1].pattern = text; - } - else if (stack.nth_data(0) == "always-confirm" && always_confirm_handler(stack)) - { - if (text == "true" || text == "false") { - /* use temp array to workaround valac 0.10 bug accessing array property length*/ - var temp = card.rules; - card.rules[temp.length - 1].always_confirm = text; + logger.trace("text_element_func (%p): text='%s'".printf(this, stack.nth_data(0))); + + if (stack.nth_data(0) == "display-name" && display_name_handler(stack)) + { + card.display_name = text; + } + else if (stack.nth_data(0) == "user" && user_handler(stack)) + { + card.username = text; + } + else if (stack.nth_data(0) == "password" && password_handler(stack)) + { + card.password = text; + } + else if (stack.nth_data(0) == "realm" && realm_handler(stack)) + { + card.issuer = text; + } + else if (stack.nth_data(0) == "service") + { + card.add_service(text); + } + + /* Rules */ + else if (stack.nth_data(0) == "pattern" && pattern_handler(stack)) + { + /* use temp array to workaround valac 0.10 bug accessing array property length */ + var temp = card.rules; + card.rules[temp.length - 1].pattern = text; + } + else if (stack.nth_data(0) == "always-confirm" && always_confirm_handler(stack)) + { + if (text == "true" || text == "false") { + /* use temp array to workaround valac 0.10 bug accessing array property length*/ + var temp = card.rules; + card.rules[temp.length - 1].always_confirm = text; + } + } + /*Trust anchor*/ + else if (stack.nth_data(0) == "ca-cert" && ca_cert_handler(stack)) + { + card.trust_anchor.ca_cert = text; + } + else if (stack.nth_data(0) == "subject" && subject_handler(stack)) + { + card.trust_anchor.subject = text; + } + else if (stack.nth_data(0) == "subject-alt" && subject_alt_handler(stack)) + { + card.trust_anchor.subject_alt = text; + } + else if (stack.nth_data(0) == "server-cert" && server_cert_handler(stack)) + { + card.trust_anchor.server_cert = text; + } } - } - /*Trust anchor*/ - else if (stack.nth_data(0) == "ca-cert" && ca_cert_handler(stack)) - { - card.trust_anchor.ca_cert = text; - } - else if (stack.nth_data(0) == "subject" && subject_handler(stack)) - { - card.trust_anchor.subject = text; - } - else if (stack.nth_data(0) == "subject-alt" && subject_alt_handler(stack)) - { - card.trust_anchor.subject_alt = text; - } - else if (stack.nth_data(0) == "server-cert" && server_cert_handler(stack)) - { - card.trust_anchor.server_cert = text; - } - } - class Parser - { - private MarkupParser parser; + + + private const MarkupParser parser = { + start_element_func, null, text_element_func, null, null + }; + + private MarkupParseContext ctx; + private string text; private string path; + + private IdCard card; + private IdCard[] _cards = {}; + + public IdCard[] cards { + get {return _cards;} + private set {_cards = value ?? {};} + } + public Parser(string path) { + + ctx = new MarkupParseContext(parser, 0, this, null); + text = ""; this.path = path; @@ -243,12 +246,10 @@ namespace WebProvisioning error("Could not retreive file size"); } - parser = {start_element_func, null, text_element_func, null, null}; + logger.trace(@"Parser(): read text to parse; length=$(text.length)"); } - + public void parse() { - var ctx = new MarkupParseContext(parser, 0, null, null); - try { ctx.parse(text, text.length); diff --git a/src/moonshot-server.vala b/src/moonshot-server.vala index bb26dc0..b1cc9ba 100644 --- a/src/moonshot-server.vala +++ b/src/moonshot-server.vala @@ -227,7 +227,7 @@ public class MoonshotServer : Object { webp.parse(); bool result = false; int installed_cards = 0; - foreach (IdCard card in WebProvisioning.cards) + foreach (IdCard card in webp.cards) { string[] rules_patterns = {}; string[] rules_always_confirm = {}; diff --git a/src/moonshot-webp-parser.vala b/src/moonshot-webp-parser.vala index efe53b5..90b5452 100644 --- a/src/moonshot-webp-parser.vala +++ b/src/moonshot-webp-parser.vala @@ -33,10 +33,12 @@ using Moonshot; namespace WebProvisioning { - + private MoonshotLogger logger; public static int main(string[] args) { + logger = new MoonshotLogger("WebProvisioning"); + int arg_index = -1; int force_flat_file_store = 0; bool bad_switch = false; @@ -73,9 +75,15 @@ namespace WebProvisioning var webp = new Parser(webp_file); webp.parse(); - - foreach (IdCard card in cards) + logger.trace(@"Have $(webp.cards.length) IdCards"); + foreach (IdCard card in webp.cards) { + + if (card == null) { + logger.trace(@"Skipping null IdCard"); + continue; + } + Moonshot.Error error; string[] rules_patterns = {}; string[] rules_always_confirm = {}; @@ -96,6 +104,7 @@ namespace WebProvisioning } } + logger.trace(@"Installing IdCard named '$(card.display_name)'"); Moonshot.install_id_card(card.display_name, card.username, card.password,