Add command to display an existing GSS name; avoid truncating the output_token from...
[gssweb.git] / chrome / test / test.html
index f5cb715..c99aba6 100644 (file)
 <html>
   <head>
     <title>GSSApi Tester Application</title>
+
+    <!-- Latest compiled and minified CSS -->
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
+
+    <!-- Optional theme -->
+    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
+
+  </head>
+  <body>
+  <div class="container-fluid">
+    <div class="row">
+      <div class="col-xs-4">
+        <!-- left column -->
+        <h2>GSS Import Name</h2>
+        <div class="form-group">
+          <label for="import_name_name">Name:</label>
+          <input name="import_name_name"
+                 id="import_name_name"
+                 value="HTTP@localhost.localdomain" />
+        </div>
+        <div class="form-group">
+          <label for="import_name_mech">Mechanism:</label>
+          <input name="import_name_mech"
+                 id="import_name_mech"
+                 value="{1 2 840 113554 1 2 1 4 }" />
+        </div>
+        <button id="import_name">gss_import_name</button>
+        <div id='import_response' style="overflow: auto;"></div>
+      </div>
+
+
+      <div class="col-xs-4">
+        <!-- middle column -->
+        <h2>GSS Acquire Cred</h2>
+        <div class="form-group">
+          <label for="acquire_cred_desired_name">Desired name:</label>
+          <select name="acquire_cred_desired_name" class="gss_name">
+          </select>
+        </div>
+
+        <div class="form-group">
+          <label for="acquire_cred_cred_usage">Cred Usage:</label>
+          <select name="acquire_cred_cred_usage">
+            <option value="GSS_C_INITIATE">GSS_C_INITIATE</option>
+            <option value="GSS_C_ACCEPT">GSS_C_ACCEPT</option>
+            <option value="GSS_C_BOTH">GSS_C_BOTH</option>
+          </select>
+        </div>
+
+        <div class="form-group">
+          <label for="acquire_cred_time_req">
+            Requested lifetime in seconds (0 for default 2 hours):
+          </label>
+          <input name="acquire_cred_time_req"
+                 id="acquire_cred_time_req"
+                 value="0"/>
+        </div>
+
+        <div class="form-group">
+          <label for="acquire_cred_desired_mechs">
+            Desired mechanisms (comma separated, blank for default):
+          </label>
+          <input name="acquire_cred_desired_mechs"
+                 id="acquire_cred_desired_mechs"
+                 value=""/>
+        </div>
+
+        <button id="acquire_cred">gss_acquire_cred</button>
+        <div id="acquire_response" style="overflow: auto;"></div>
+
+      </div>
+
+
+      <div class="col-xs-4">
+        <!-- right column -->
+        <h2>GSS Init Sec Context</h2>
+        <div class="form-group">
+          <label for="init_sec_context_target_name">Target name:</label>
+          <select name="init_sec_context_target_name"
+                  id="init_sec_context_target_name"
+                  class="gss_name">
+          </select>
+        </div>
+
+        <div class="form-group">
+          <label for="init_sec_context_context_handle">Context handle:</label>
+          <input name="init_sec_context_context_handle"
+                 id="init_sec_context_context_handle"/>
+        </div>
+
+        <div class="form-group">
+          <label for="init_sec_context_input_token">Input token:</label>
+          <input name="init_sec_context_input_token"
+                 id="init_sec_context_input_token"/>
+        </div>
+
+        <div class="form-group">
+          <label for="init_sec_context_mech_type">
+            Mechanism type (blank for default):
+          </label>
+          <input name="init_sec_context_mech_type"
+                 id="init_sec_context_mech_type"/>
+        </div>
+
+        <div class="form-group">
+          <label for="init_sec_context_time_req">
+            Requested lifetime in seconds (0 for default 2 hours):
+          </label>
+          <input name="init_sec_context_time_req"
+                 id="init_sec_context_time_req" value="0" />
+        </div>
+
+        <div class="form-group">
+          <label for="init_sec_context_req_flags">
+            Request flags (0 unless you know what you're doing):
+          </label>
+          <input name="init_sec_context_req_flags" 
+                 id="init_sec_context_req_flags" value="0" />
+        </div>
+
+        <button id="init_sec_context">gss_init_sec_context</button>
+        <div id="init_sec_context_response" style="overflow: auto;"></div>
+
+      </div> 
+   </div>
+
+   <div class="row">
+      <div class="col-xs-4">
+        <!-- middle column -->
+        <h2>GSS Display Name</h2>
+        <div class="form-group">
+          <label for="display_name_name">Name:</label>
+          <select name="display_name_name" id="display_name_name" class="gss_name">
+          </select>
+        </div>
+
+        <button id="display_name">gss_display_name</button>
+        <div id="display_name_response" style="overflow: auto;"></div>
+
+      </div>
+   </div>
+
+    <div class="row">
+      <div class="col-xs-12">
+        <div class="form-group">
+          <label for="authenticate_server_path">Server Path:</label>
+          <input name="authenticate_server_path" 
+                 id="authenticate_server_path" 
+                 value="/gss" />
+        </div>
+
+        <button id="authenticate">authenticate</button>
+        <div id='authenticate_response' style="overflow: auto;"></div>
+      </div>
+    </div>
+
+  </div>
+  
+   <!-- Scripts! ------------------------------------------------------------------------------>
+   <!-- Required JQuery -->
+   <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
+
+   <!-- Latest compiled and minified JavaScript -->
+   <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
+
+   <!-- GSS Web script -->
+   <script src="navigator.gssweb.js"></script>
+
     <script language="javascript">
-      function report(msg) {
-        var response = document.getElementById('response');
-        response.innerHTML = '<p>' + msg + '</p>' + response.innerHTML;
+      var gss;
+      var gssweb;
+
+      function report(msg, elemId) {
+        var element = $(elemId);
+        element.prepend('<p>' + msg + '</p>');
       }
 
       function doImportName() {
-        var gss = new navigator.gss({
-          appTag: "TestApp",
-          error:  function(major, minor, errMsg, appTag) 
-                  {
-                    report("Error");
-                    report("Major: " + major + "; Minor: " + minor);
-                    report("<blockquote>" + errMsg + "</blockquote>");
-                    report("appTag: " + appTag);
-                  }
+        gss = gss || new navigator.gss_eap({
+          appTag: "TestApp"
         });
+        gss.error = function(major, minor, errMsg, appTag) 
+        {
+          report("Error", '#import_response');
+          report("Major: " + major + "; Minor: " + minor, '#import_response');
+          report("<blockquote>" + errMsg + "</blockquote>", '#import_response');
+          report("appTag: " + appTag, '#import_response');
+        };
         gss.import_name({
           name:      document.getElementById('import_name_name').value,
           name_type: document.getElementById('import_name_mech').value,
-          success:   function(name, appTag) {
-                       report("GSS imported name: " + name);
-                       report("appTag: " + appTag);
+          success:   function(data, appTag) {
+                       report("GSS imported name: " + data.gss_name, '#import_response');
+                       report("appTag: " + appTag, '#import_response');
+                       newOption = $('<option></option>');
+                       newOption.attr('value', data.gss_name);
+                       newOption.append(document.getElementById('import_name_name').value);
+                       $('.gss_name').append(newOption);
                      }
         });
+      } // doImportName
+
+      function doDisplayName() {
+        gss = gss || new navigator.gss_eap({
+          appTag: "TestApp"
+        });
+        gss.error = function(major, minor, errMsg, appTag) 
+        {
+          report("Error", '#display_response');
+          report("Major: " + major + "; Minor: " + minor, '#display_response');
+          report("<blockquote>" + errMsg + "</blockquote>", '#display_response');
+          report("appTag: " + appTag, '#display_response');
+        };
+        gss.display_name({
+          input_name:      document.getElementById('display_name_name').value,
+          success:   function(data, appTag) {
+                       report("GSS displayed name: " + data.gss_name, '#display_response');
+                       report("appTag: " + appTag, '#display_response');
+                       newOption = $('<option></option>');
+                       newOption.attr('value', data.gss_name);
+                       newOption.append(document.getElementById('display_name_name').value);
+                       $('.gss_name').append(newOption);
+                     },
+          error: function(major, minor, errMsg, appTag) 
+        {
+          report("Error", '#display_response');
+          report("Major: " + major + "; Minor: " + minor, '#display_response');
+          report("<blockquote>" + errMsg + "</blockquote>", '#display_response');
+          report("appTag: " + appTag, '#display_response');
+        }
+        });
+      } // doDisplayName
+
+
+      function doAcquireCred() {
+        gss = gss || new navigator.gss_eap({
+          appTag: "TestApp"
+        });
+        gss.error = function(major, minor, errMsg, appTag) 
+        {
+          report("Error", '#acquire_response');
+          report("Major: " + major + "; Minor: " + minor, '#acquire_response');
+          report("<blockquote>" + errMsg + "</blockquote>", '#acquire_response');
+          report("appTag: " + appTag, '#acquire_response');
+        };        
+
+        var params = {
+          desired_name: document.getElementById('import_name_name').value,
+          cred_usage: document.getElementById('import_name_name').value
+        };
+        if (document.getElementById("acquire_cred_time_req").value > 0)
+        {
+          params.time_req = document.getElementById("acquire_cred_time_req").value;
+        }
+        if ("" != document.getElementById("acquire_cred_desired_mechs").value)
+        {
+          params.desired_mechs = 
+            document.getElementById("acquire_cred_desired_mechs").value;
+        }
+        
+        gss.acquire_cred(params);
+      }
+
+      /********************************************************
+       *  Call the init_sec_context routine
+       ********************************************************/
+      function doInitSecContext() {
+        gss = gss || new navigator.gss_eap({
+          appTag: "TestApp",
+        });
+        gss.error = function(major, minor, errMsg, appTag) 
+        {
+          report("Error",
+                 '#init_sec_context_response');
+          report("Major: " + major + "; Minor: " + minor, 
+                 '#init_sec_context_response');
+          report("<blockquote>" + errMsg + "</blockquote>",
+                 '#init_sec_context_response');
+          report("appTag: " + appTag,
+                 '#init_sec_context_response');
+        };        
+
+/* context_handle, mech_type, req_flags, time_req, input_token */
+
+        var params = {
+          context_handle: document.getElementById('init_sec_context_context_handle').value,
+          target_name: document.getElementById('init_sec_context_target_name').value,
+          mech_type: document.getElementById('init_sec_context_mech_type').value,
+          req_flags: document.getElementById('init_sec_context_req_flags').value,
+          time_req: document.getElementById('init_sec_context_time_req').value,
+          input_token: document.getElementById('init_sec_context_input_token').value,
+          success: function(data, appTag) {
+            $('#init_sec_context_context_handle').attr("value",
+                                                       data.context_handle);
+            report("Output token: " + data.output_token,
+                   '#init_sec_context_response');
+          }
+        };
+        gss.init_sec_context(params);
       }
+
+      function doAuthenticate() {
+        gssweb = gssweb || new navigator.gssweb({
+          serverPath: "/gss",
+          appTag:     "Authentication Test",
+          error:      function(errMsg) {
+                        report(errMsg, '#authenticate_response');
+                      },
+          success:    function(appData, contentType, appTag) {
+                        report(contentType, '#authenticate_response');
+                        report("Content-Type:", '#authenticate_response');
+                        report(appData, '#authenticate_response');
+                        report("Found app data:", '#authenticate_response');
+                        report("Success!", '#authenticate_response');
+                      }
+        });
+        gssweb.authenticate();
+      } // doAuthenticate
       
       document.addEventListener('DOMContentLoaded', function () {
+        <!-- Listen for the import name button click -->
         document.getElementById('import_name').addEventListener(
           'click', doImportName
         );
-        console.log('DOMContentLoaded.');
+
+        <!-- Listen for the import name button click -->
+        document.getElementById('display_name').addEventListener(
+          'click', doDisplayName
+        );
+
+        <!-- Listen for the acquire cred button click -->
+        document.getElementById('acquire_cred').addEventListener(
+          'click', doAcquireCred
+        );
+
+        <!-- Listen for the import name button click -->
+        document.getElementById('init_sec_context').addEventListener(
+          'click', doInitSecContext
+        );
+
+
+        <!-- Listen for the authenticate button click -->
+        document.getElementById('authenticate').addEventListener(
+          'click', doAuthenticate
+        );
+
       });
 
     </script>
-  </head>
-  <body>
-    <h2>GSS Import Name parameters:</h2>
-    <label for="import_name_name">Name:</label>
-    <input name="import_name_name" id="import_name_name" value="HTTP@localhost.localdomain" />
-    <br/>
-    <label for="import_name_mech">Mechanism:</label>
-    <input name="import_name_mech"
-           id="import_name_mech"
-           value="{1 2 840 113554 1 2 1 4 }" />
-    <br/>
-    <button id="import_name">gss_import_name</button>
-    <br/>
-    <div id='response'></div>
+
   </body>
 </html>