X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=src%2Fmoonshot-webp-parser.vala;h=90b5452123fa41bcb361e9304241fbb7f7bfcaa3;hb=d10c51fc6a91a0e074d792a9013226e8ba959240;hp=70eee9251ba0c9d8ac6ff474ff29ce56b5f26214;hpb=4db30394aad1b6cfb60e2fe681c1d2270a76b4ae;p=moonshot-ui.git diff --git a/src/moonshot-webp-parser.vala b/src/moonshot-webp-parser.vala index 70eee92..90b5452 100644 --- a/src/moonshot-webp-parser.vala +++ b/src/moonshot-webp-parser.vala @@ -1,191 +1,131 @@ +/* + * Copyright (c) 2011-2014, 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 Moonshot; + namespace WebProvisioning { - public IdCard card; + private MoonshotLogger logger; - bool - check_stack (SList stack, string[] reference) - { - if (stack.length () < reference.length) - return false; - - for (int i = 0; i stack) - { - string[] subject_alt_path = {"subject-alt", "trust-anchor", "identity", "identities"}; - - return check_stack (stack, subject_alt_path); - } - - bool - subject_handler (SList stack) - { - string[] subject_path = {"subject", "trust-anchor", "identity", "identities"}; - - return check_stack (stack, subject_path); - } - - bool - ca_cert_handler (SList stack) - { - string[] ca_path = {"ca-cert", "trust-anchor", "identity", "identities"}; - - return check_stack (stack, ca_path); - } - - bool - realm_handler (SList stack) - { - string[] realm_path = {"realm", "identity", "identities"}; - - return check_stack (stack, realm_path); - } - - bool - password_handler (SList stack) - { - string[] password_path = {"password", "identity", "identities"}; - - return check_stack (stack, password_path); - } + logger = new MoonshotLogger("WebProvisioning"); - bool - user_handler (SList stack) - { - string[] user_path = {"user", "identity", "identities"}; - - return check_stack (stack, user_path); - } + int arg_index = -1; + int force_flat_file_store = 0; + bool bad_switch = false; + for (arg_index = 1; arg_index < args.length; arg_index++) { + string arg = args[arg_index]; + unichar c = arg.get_char(); + if (c == '-') { + arg = arg.next_char(); + c = arg.get_char(); + switch (c) { + case 'f': + force_flat_file_store = 1; + break; + default: + bad_switch = true; + break; + } + } else { + break; // arg is not a switch; presume it's the file + } + } + if (bad_switch || (arg_index != args.length - 1)) + { + stdout.printf(_("Usage %s [-f] WEB_PROVISIONING_FILE\n -f: add identities to flat file store.\n"), args[0]); + return -1; + } + string webp_file = args[arg_index]; + + if (!FileUtils.test(webp_file, FileTest.EXISTS | FileTest.IS_REGULAR)) + { + stdout.printf(_("%s does not exist\n"), webp_file); + return -1; + } + + var webp = new Parser(webp_file); + webp.parse(); + logger.trace(@"Have $(webp.cards.length) IdCards"); + foreach (IdCard card in webp.cards) + { - bool - display_name_handler (SList stack) - { - string[] display_name_path = {"display-name", "identity", "identities"}; - - return check_stack (stack, display_name_path); - } + if (card == null) { + logger.trace(@"Skipping null IdCard"); + continue; + } - public 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 (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 0) + { + int i = 0; + rules_patterns = new string[rules.length]; + rules_always_confirm = new string[rules.length]; + foreach (Rule r in rules) + { + rules_patterns[i] = r.pattern; + rules_always_confirm[i] = r.always_confirm; + i++; + } + } - class WebProvisionParser - { - public WebProvisionParser (string path) - { - string text = ""; - var file = File.new_for_path (path); - - try - { - var dis = new DataInputStream (file.read ()); - string line; - while ((line = dis.read_line (null)) != null) - text += line; - } - catch (Error e) - { - error ("Could not retreive file size"); - } - - MarkupParser parser = {null, null, text_element_func, null, null}; - - var ctx = new MarkupParseContext(parser, 0, null, null); - - try - { - ctx.parse (text, text.length); - } - catch (Error e) - { - error ("Could not parse %s, invalid content", path); - } - } - } + logger.trace(@"Installing IdCard named '$(card.display_name)'"); + Moonshot.install_id_card(card.display_name, + card.username, + card.password, + card.issuer, + rules_patterns, + rules_always_confirm, + services, + card.trust_anchor.ca_cert, + card.trust_anchor.subject, + card.trust_anchor.subject_alt, + card.trust_anchor.server_cert, + force_flat_file_store, + out error); - public static int main (string[] args) - { - if (args.length < 2) - { - error ("Usage %s [-a] WEB_PROVISIONING_FILE", args[0]); + if (error != null) + { + stderr.printf("Error: %s", error.message); + continue; + } + } + + return 0; } - - if (!FileUtils.test (args[1], FileTest.EXISTS | FileTest.IS_REGULAR)) - { - error ("%s does not exist", args[1]); - } - - card = new IdCard(); - - var webp = new WebProvisionParser (args[1]); - - debug ("'%s' '%s' '%s' '%s'", card.display_name, card.username, card.password, card.issuer); - - foreach (string srv in card.services) - { - debug ("service: %s", srv); - } - - return 0; - } }