GSSAcquireCred works.
[gssweb.git] / navigator.gssweb.js
index 27163c0..61a61ed 100644 (file)
@@ -1,4 +1,37 @@
-console.log("Loading navigator.gssweb.js - #2");
+/*
+ * Copyright (c) 2015, 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.gssweb.js - #4");
 
 
 var GSSWeb = (function () {
@@ -17,14 +50,8 @@ var GSSWeb = (function () {
     this.serverToken = "";
     this.clientCred = "";
     this.xhr = new XMLHttpRequest();
-    this.xhr.open("POST", this.serverPath, true);
-    this.xhr.setRequestHeader(
-      'Content-Type', 
-      'application/x-www-form-urlencoded'
-    );
-    this.xhr.onreadystatechange = this.recvTokenFromServer.bind(this);
 
-    this.gss = new navigator.gss_eap({
+    this.gss = new navigator.gssEap({
       appTag: this.appTag,
       error: this.handleGSSError.bind(this)
     });
@@ -73,7 +100,7 @@ var GSSWeb = (function () {
 
   GSSWeb.prototype.authGetServerName = function () {
     this.gss.import_name({
-      name: "HTTP@" + window.location.host,
+      name: "HTTP@" + window.location.hostname,
       success: this.authReceiveServerName.bind(this)
     });
   };
@@ -144,6 +171,15 @@ var GSSWeb = (function () {
 
     var msg = "nonce=" + this.nonce +
                "&token=" + encodeURIComponent(this.clientToken);
+
+    this.xhr.open("POST", this.serverPath, true);
+
+    this.xhr.setRequestHeader(
+      'Content-Type', 
+      'application/x-www-form-urlencoded'
+    );
+    this.xhr.onreadystatechange = this.recvTokenFromServer.bind(this);
+
     this.xhr.send(msg);
   };
 
@@ -153,11 +189,10 @@ var GSSWeb = (function () {
       return;
     }
 
-    var serverResponse = JSON.parse(this.xhr.responseText);
-    this.serverToken = serverResponse.gssweb.token;
     switch (this.xhr.status) {
       case 200:
         // Finished!
+        var serverResponse = JSON.parse(this.xhr.responseText);
         var decoded = window.atob(serverResponse.application.data);
         this.authenticationState = true;
         this.success(
@@ -168,12 +203,14 @@ var GSSWeb = (function () {
         break;
       case 401:
         // Continue needed
+        var serverResponse = JSON.parse(this.xhr.responseText);
+        this.serverToken = serverResponse.gssweb.token;
         this.authInitSecContext();
         break;
       default:
         // We have some server-reported error
         this.error(
-          window.location.host + 
+          window.location.hostname + 
           " reported an error; aborting",
           this.appTag
         );