-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 ()
{
{
// Public attributes
this.version = "0.0.1";
- this.implemented_methods = ["gss_import_name"];
+ 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 ||
/* 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
method = event.data.method;
if (
( -1 == this.implemented_methods.indexOf(method) ) ||
- ("undefined" == typeof (event.data.return_values)) ||
+ ( ("undefined" == typeof (event.data.return_values) ) &&
+ ("undefined" == typeof (event.data.error_message) ) ) ||
("undefined" == typeof (event.data.cookies)))
{
return;
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;
}
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: " +
}
};
+
+ 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()
);
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":
return GSSEap;
})();
-navigator.gss_eap = GSSEap;
+navigator.gssEap = GSSEap;