X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=chrome%2Fapp%2Fnavigator.gss.js;h=432adaed02e051810525c1cb5b6672ae5a9076e5;hb=bc706fcfa838056e8f8d0ff58f945f44c68992c1;hp=674dd38358134e5974247edf807e86bbd96e074a;hpb=dce9122e9df27d3748d4d7dd18e1d302553729e1;p=gssweb.git diff --git a/chrome/app/navigator.gss.js b/chrome/app/navigator.gss.js index 674dd38..432adae 100644 --- a/chrome/app/navigator.gss.js +++ b/chrome/app/navigator.gss.js @@ -1,8 +1,40 @@ -console.log('Loading navigator.gss.js - #7'); - -/* This file gets injected into the web page verbatim */ +/* + * Copyright (c) 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. + * + */ +console.log('Loading navigator.gss.js - #9'); +/* This file gets injected into the web page verbatim */ var GSSEap = (function () { @@ -10,8 +42,9 @@ var GSSEap = (function () { // Public attributes this.version = "0.0.1"; + this.implemented_methods = ["gss_import_name", "gss_display_name", "gss_init_sec_context", "gss_acquire_cred"]; + // MRW -- combine success/error callback hashes? this.callbacks = {}; - this.methods = {}; this.errors = {}; this.appTag = config.appTag || ""; this.default_error = config.error || @@ -34,7 +67,7 @@ var GSSEap = (function () /* This message is destined for us only if all the following apply: * - The data.method_name is one of the methods implemented by this * object - * - data.return_values exists + * - data.return_values exists or data.error_mssage exists * - data.cookies exists * - One of my callbacks matches the nonce in * data.cookies.navigator_gss_tag @@ -44,8 +77,9 @@ var GSSEap = (function () */ method = event.data.method; if ( - (method != "gss_import_name") || - ("undefined" == typeof (event.data.return_values)) || + ( -1 == this.implemented_methods.indexOf(method) ) || + ( ("undefined" == typeof (event.data.return_values) ) && + ("undefined" == typeof (event.data.error_message) ) ) || ("undefined" == typeof (event.data.cookies))) { return; @@ -54,8 +88,7 @@ var GSSEap = (function () nonce = event.data.cookies.navigator_gss_tag; event.data.cookies.navigator_gss_tag = undefined; callback = this.callbacks[nonce]; - if ("undefined" == typeof (callback) || - this.methods[nonce] != method) { + if ("undefined" == typeof (callback)) { return; } @@ -64,7 +97,11 @@ var GSSEap = (function () app_tag = event.data.cookies.app_tag; error = this.errors[nonce] || this.default_error; - if (this.gss_error(event.data.return_values.major_status)) + if ("undefined" != typeof(event.data.error_message) ) + { + error(-1, -1, "Error parsing message: " + event.data.error_message, app_tag); + } + else if (this.gss_error(event.data.return_values.major_status)) { var errMsg = "Error during " + method + ": " + "Major status message: " + @@ -77,23 +114,137 @@ var GSSEap = (function () errMsg, app_tag); } else { - if ("gss_import_name" == method) - { callback(event.data.return_values, app_tag); } - // if( "gss_X" == method ) { callback(event.data.return_values.x, app_tag);} + callback(event.data.return_values, app_tag); } }; + + GSSEap.prototype.init_sec_context = function (params) + { + /* variables */ + // internal variables + var nonce; + + // Required parameters + var target_name = params.target_name; + var callback = params.success || this.success; + + // Optional & defaulted parameters (some are defaulted at lower layer) + var context_handle = params.context_handle; + var cred_handle = params.cred_handle; + var mech_type = params.mech_type; + var req_flags = params.req_flags; + var time_req = params.time_req; + var input_token = params.input_token; + + var error = params.error || this.default_error; + var app_tag = params.app_tag || this.appTag; + + /* Error checking */ + // Call an error if we don't have the required parameters. + // - name + // - success() + if ( "undefined" == typeof(target_name) || + "undefined" == typeof(callback) ) + { + error(-1, -1, + "init_sec_context called missing either target_name or success callback" + ); + return; + } + + /* Setup */ + nonce = navigator.generateNonce(); + + /* Main processing */ + // Save our callback, method name, and error function + this.callbacks[nonce] = callback; + this.errors[nonce] = error; + + // Now pass the request on to the C code + window.postMessage({ + "method":"gss_init_sec_context", + "arguments": + { + "target_name": target_name, + "context_handle": context_handle, + "cred_handle": cred_handle, + "mech_type": mech_type, + "req_flags": req_flags, + "time_req": time_req, + "input_token": input_token + + }, + "cookies": + { + "navigator_gss_tag": nonce, + "app_tag": app_tag + } + }, "*"); + + }; + + GSSEap.prototype.display_name = function(params) + { + /* Variables */ + // required parameters + var input_name = params.input_name; + var callback = params.success; + + if ( "undefined" == typeof(name) || + "undefined" == typeof(callback) ) + { + error(-1, -1, + "import_name called missing either name or success callback" + ); + return; + } + + var error = params.error || this.default_error; + var app_tag = params.app_tag || this.appTag; + + /* Setup */ + nonce = navigator.generateNonce(); + + + /* Main processing */ + // Save our callback, method name, and error function + this.callbacks[nonce] = callback; + this.errors[nonce] = error; + + // Now pass the request on to the C code + window.postMessage({ + "method":"gss_display_name", + "arguments": + { + "input_name": input_name, + }, + "cookies": + { + "navigator_gss_tag": nonce, + "app_tag": app_tag + } + }, "*"); + + } + GSSEap.prototype.import_name = function (params) { /* variables */ + // internal variables var nonce; + + // Required parameters var name = params.name; - var name_type = params.name_type || "{1 2 840 113554 1 2 1 4 }"; var callback = params.success; + + // Optional & defaulted parameters + var name_type = params.name_type || "{1 2 840 113554 1 2 1 4 }"; var error = params.error || this.default_error; var app_tag = params.app_tag || this.appTag; - /* Erorr checking */ + + /* Error checking */ // Call an error if we don't have the required parameters. // - name // - success() @@ -105,11 +256,18 @@ var GSSEap = (function () ); return; } + + /* Setup */ nonce = navigator.generateNonce(); + + + /* Main processing */ + // Save our callback, method name, and error function this.callbacks[nonce] = callback; - this.methods[nonce] = "gss_import_name"; this.errors[nonce] = error; + + // Now pass the request on to the C code window.postMessage({ "method":"gss_import_name", "arguments": @@ -141,4 +299,4 @@ var GSSEap = (function () return GSSEap; })(); -navigator.gss_eap = GSSEap; +navigator.gssEap = GSSEap;