3 <title>GSSApi Tester Application</title>
5 <!-- Latest compiled and minified CSS -->
6 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
8 <!-- Optional theme -->
9 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
13 <div class="container-fluid">
15 <div class="col-xs-4">
17 <h2>GSS Import Name</h2>
18 <div class="form-group">
19 <label for="import_name_name">Name:</label>
20 <input name="import_name_name"
22 value="HTTP@localhost.localdomain" />
24 <div class="form-group">
25 <label for="import_name_mech">Mechanism:</label>
26 <input name="import_name_mech"
28 value="{1 2 840 113554 1 2 1 4 }" />
30 <button id="import_name">gss_import_name</button>
31 <div id='import_response' style="overflow: auto;"></div>
35 <div class="col-xs-4">
36 <!-- middle column -->
37 <h2>GSS Acquire Cred</h2>
38 <div class="form-group">
39 <label for="acquire_cred_desired_name">Desired name:</label>
40 <select name="acquire_cred_desired_name" class="gss_name">
44 <div class="form-group">
45 <label for="acquire_cred_cred_usage">Cred Usage:</label>
46 <select name="acquire_cred_cred_usage">
47 <option value="GSS_C_INITIATE">GSS_C_INITIATE</option>
48 <option value="GSS_C_ACCEPT">GSS_C_ACCEPT</option>
49 <option value="GSS_C_BOTH">GSS_C_BOTH</option>
53 <div class="form-group">
54 <label for="acquire_cred_time_req">
55 Requested lifetime in seconds (0 for default 2 hours):
57 <input name="acquire_cred_time_req"
58 id="acquire_cred_time_req"
62 <div class="form-group">
63 <label for="acquire_cred_desired_mechs">
64 Desired mechanisms (comma separated, blank for default):
66 <input name="acquire_cred_desired_mechs"
67 id="acquire_cred_desired_mechs"
71 <button id="acquire_cred">gss_acquire_cred</button>
72 <div id="acquire_response" style="overflow: auto;"></div>
77 <div class="col-xs-4">
79 <h2>GSS Init Sec Context</h2>
80 <div class="form-group">
81 <label for="init_sec_context_target_name">Target name:</label>
82 <select name="init_sec_context_target_name"
83 id="init_sec_context_target_name"
88 <div class="form-group">
89 <label for="init_sec_context_context_handle">Context handle:</label>
90 <input name="init_sec_context_context_handle"
91 id="init_sec_context_context_handle"/>
94 <div class="form-group">
95 <label for="init_sec_context_input_token">Input token:</label>
96 <input name="init_sec_context_input_token"
97 id="init_sec_context_input_token"/>
100 <div class="form-group">
101 <label for="init_sec_context_mech_type">
102 Mechanism type (blank for default):
104 <input name="init_sec_context_mech_type"
105 id="init_sec_context_mech_type"/>
108 <div class="form-group">
109 <label for="init_sec_context_time_req">
110 Requested lifetime in seconds (0 for default 2 hours):
112 <input name="init_sec_context_time_req"
113 id="init_sec_context_time_req" value="0" />
116 <div class="form-group">
117 <label for="init_sec_context_req_flags">
118 Request flags (0 unless you know what you're doing):
120 <input name="init_sec_context_req_flags"
121 id="init_sec_context_req_flags" value="0" />
124 <button id="init_sec_context">gss_init_sec_context</button>
125 <div id="init_sec_context_response" style="overflow: auto;"></div>
131 <div class="col-xs-4">
132 <!-- middle column -->
133 <h2>GSS Display Name</h2>
134 <div class="form-group">
135 <label for="display_name_name">Name:</label>
136 <select name="display_name_name" id="display_name_name" class="gss_name">
140 <button id="display_name">gss_display_name</button>
141 <div id="display_name_response" style="overflow: auto;"></div>
147 <div class="col-xs-12">
148 <div class="form-group">
149 <label for="authenticate_server_path">Server Path:</label>
150 <input name="authenticate_server_path"
151 id="authenticate_server_path"
155 <button id="authenticate">authenticate</button>
156 <div id='authenticate_response' style="overflow: auto;"></div>
162 <!-- Scripts! ------------------------------------------------------------------------------>
163 <!-- Required JQuery -->
164 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
166 <!-- Latest compiled and minified JavaScript -->
167 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
169 <!-- GSS Web script -->
170 <script src="navigator.gssweb.js"></script>
172 <script language="javascript">
176 function report(msg, elemId) {
177 var element = $(elemId);
178 element.prepend('<p>' + msg + '</p>');
181 function doImportName() {
182 gss = gss || new navigator.gss({
185 gss.error = function(major, minor, errMsg, appTag)
187 report("Error", '#import_response');
188 report("Major: " + major + "; Minor: " + minor, '#import_response');
189 report("<blockquote>" + errMsg + "</blockquote>", '#import_response');
190 report("appTag: " + appTag, '#import_response');
193 name: document.getElementById('import_name_name').value,
194 name_type: document.getElementById('import_name_mech').value,
195 success: function(data, appTag) {
196 report("GSS imported name: " + data.gss_name, '#import_response');
197 report("appTag: " + appTag, '#import_response');
198 newOption = $('<option></option>');
199 newOption.attr('value', data.gss_name);
200 newOption.append(document.getElementById('import_name_name').value);
201 $('.gss_name').append(newOption);
206 function doDisplayName() {
207 gss = gss || new navigator.gss({
210 gss.error = function(major, minor, errMsg, appTag)
212 report("Error", '#display_response');
213 report("Major: " + major + "; Minor: " + minor, '#display_response');
214 report("<blockquote>" + errMsg + "</blockquote>", '#display_response');
215 report("appTag: " + appTag, '#display_response');
218 input_name: document.getElementById('display_name_name').value,
219 success: function(data, appTag) {
220 report("GSS displayed name: " + data.gss_name, '#display_response');
221 report("appTag: " + appTag, '#display_response');
222 newOption = $('<option></option>');
223 newOption.attr('value', data.gss_name);
224 newOption.append(document.getElementById('display_name_name').value);
225 $('.gss_name').append(newOption);
227 error: function(major, minor, errMsg, appTag)
229 report("Error", '#display_response');
230 report("Major: " + major + "; Minor: " + minor, '#display_response');
231 report("<blockquote>" + errMsg + "</blockquote>", '#display_response');
232 report("appTag: " + appTag, '#display_response');
238 function doAcquireCred() {
239 gss = gss || new navigator.gss({
242 gss.error = function(major, minor, errMsg, appTag)
244 report("Error", '#acquire_response');
245 report("Major: " + major + "; Minor: " + minor, '#acquire_response');
246 report("<blockquote>" + errMsg + "</blockquote>", '#acquire_response');
247 report("appTag: " + appTag, '#acquire_response');
251 desired_name: document.getElementById('import_name_name').value,
252 cred_usage: document.getElementById('import_name_name').value
254 if (document.getElementById("acquire_cred_time_req").value > 0)
256 params.time_req = document.getElementById("acquire_cred_time_req").value;
258 if ("" != document.getElementById("acquire_cred_desired_mechs").value)
260 params.desired_mechs =
261 document.getElementById("acquire_cred_desired_mechs").value;
264 gss.acquire_cred(params);
267 /********************************************************
268 * Call the init_sec_context routine
269 ********************************************************/
270 function doInitSecContext() {
271 gss = gss || new navigator.gss({
274 gss.error = function(major, minor, errMsg, appTag)
277 '#init_sec_context_response');
278 report("Major: " + major + "; Minor: " + minor,
279 '#init_sec_context_response');
280 report("<blockquote>" + errMsg + "</blockquote>",
281 '#init_sec_context_response');
282 report("appTag: " + appTag,
283 '#init_sec_context_response');
286 /* context_handle, mech_type, req_flags, time_req, input_token */
289 context_handle: document.getElementById('init_sec_context_context_handle').value,
290 target_name: document.getElementById('init_sec_context_target_name').value,
291 mech_type: document.getElementById('init_sec_context_mech_type').value,
292 req_flags: document.getElementById('init_sec_context_req_flags').value,
293 time_req: document.getElementById('init_sec_context_time_req').value,
294 input_token: document.getElementById('init_sec_context_input_token').value,
295 success: function(data, appTag) {
296 $('#init_sec_context_context_handle').attr("value",
297 data.context_handle);
298 report("Output token: " + data.output_token,
299 '#init_sec_context_response');
302 gss.init_sec_context(params);
305 function doAuthenticate() {
306 gssweb = gssweb || new navigator.gssweb({
307 serverPath: document.getElementById('authenticate_server_path').value,
308 appTag: "Authentication Test",
309 error: function(errMsg) {
310 report(errMsg, '#authenticate_response');
312 success: function(appData, contentType, appTag) {
313 report(contentType, '#authenticate_response');
314 report("Content-Type:", '#authenticate_response');
315 report(appData, '#authenticate_response');
316 report("Found app data:", '#authenticate_response');
317 report("Success!", '#authenticate_response');
320 gssweb.authenticate();
323 document.addEventListener('DOMContentLoaded', function () {
324 <!-- Listen for the import name button click -->
325 document.getElementById('import_name').addEventListener(
326 'click', doImportName
329 <!-- Listen for the import name button click -->
330 document.getElementById('display_name').addEventListener(
331 'click', doDisplayName
334 <!-- Listen for the acquire cred button click -->
335 document.getElementById('acquire_cred').addEventListener(
336 'click', doAcquireCred
339 <!-- Listen for the import name button click -->
340 document.getElementById('init_sec_context').addEventListener(
341 'click', doInitSecContext
345 <!-- Listen for the authenticate button click -->
346 document.getElementById('authenticate').addEventListener(
347 'click', doAuthenticate