X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=src%2Fmoonshot-webp-parser.vala;h=46ba9c64754fa246e3c5e697daf494ea55513765;hb=0572dfd787364f027ee41f3e1d9fa1293769cdca;hp=28654324619087a4eb9554eb564f15a93530ebbf;hpb=09d7a8a9645099cbb5e206bfe187ccbaf599eaa8;p=moonshot-ui.git diff --git a/src/moonshot-webp-parser.vala b/src/moonshot-webp-parser.vala index 2865432..46ba9c6 100644 --- a/src/moonshot-webp-parser.vala +++ b/src/moonshot-webp-parser.vala @@ -1,74 +1,135 @@ +/* + * 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 -{ - class WebProvisionParser - { - public WebProvisionParser (string path) - { - - } - } - - public void start_element_func (MarkupParseContext context, - string element_name, - string[] attribute_names, - string[] attribute_values) throws MarkupError - { - debug ("Start: %s", element_name); - } +{ + private MoonshotLogger logger; - public void end_element_func (MarkupParseContext context, - string element_name) throws MarkupError - { - debug ("End: %s", element_name); - } - - public void text_element_func (MarkupParseContext context, - string text, - size_t text_len) throws MarkupError - { - debug ("Text element: %s", text); -/* for (string i in context.get_element_stack ()) + public static int main(string[] args) { - stdout.printf("%s\n", i); - }*/ - } - - public void parser_error (MarkupParseContext context, - Error error) - { - debug ("error"); - } + logger = new MoonshotLogger("WebProvisioning"); - public static int main (string[] args) - { - string text = ""; - if (args.length < 2) - { - error ("Usage %s [-a] WEB_PROVISIONING_FILE", args[0]); - } + 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 (args[1], FileTest.EXISTS | FileTest.IS_REGULAR)) - { - error ("%s does not exist", args[1]); - } + if (!FileUtils.test(webp_file, FileTest.EXISTS | FileTest.IS_REGULAR)) + { + stdout.printf(_("%s does not exist\n"), webp_file); + return -1; + } - var file = File.new_for_path (args[1]); + var webp = new Parser(webp_file); + webp.parse(); + 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 = {}; + + /* use temp arrays to workaround centos array property bug */ + var rules = card.rules; + string[] svcs = new string[card.services.size]; + for (int i = 0; i < card.services.size; i++) { + svcs[i] = card.services[i]; + } + + if (rules.length > 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++; + } + } + + 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, + svcs, + 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); + + if (error != null) + { + stderr.printf("Error: %s", error.message); + continue; + } + } - try - { - var dis = new DataInputStream (file.read ()); - string line; - while ((line = dis.read_line (null)) != null) - text += line; + return 0; } - catch (Error e) - { - error ("Could not retreive file size"); - } - - MarkupParser parser = {start_element_func, end_element_func, text_element_func, null, parser_error}; - - - return 0; - } }