|
---|
Lines 18-33
XPCOMUtils.defineLazyGetter(this, "PORT"
|
Link Here
|
---|
|
---|
18 |
}); |
18 |
}); |
19 |
|
19 |
|
20 |
const FLAG_RETURN_FALSE = 1 << 0; |
20 |
const FLAG_RETURN_FALSE = 1 << 0; |
21 |
const FLAG_WRONG_PASSWORD = 1 << 1; |
21 |
const FLAG_WRONG_PASSWORD = 1 << 1; |
22 |
const FLAG_BOGUS_USER = 1 << 2; |
22 |
const FLAG_BOGUS_USER = 1 << 2; |
23 |
const FLAG_PREVIOUS_FAILED = 1 << 3; |
23 |
const FLAG_PREVIOUS_FAILED = 1 << 3; |
24 |
const CROSS_ORIGIN = 1 << 4; |
24 |
const CROSS_ORIGIN = 1 << 4; |
25 |
const FLAG_NO_REALM = 1 << 5; |
25 |
const FLAG_NO_REALM = 1 << 5; |
|
|
26 |
const FLAG_UTF8_USER = 1 << 6; |
27 |
const userUTF8 = "\u0443\u0442\u04448"; |
26 |
|
28 |
|
27 |
const nsIAuthPrompt2 = Components.interfaces.nsIAuthPrompt2; |
29 |
const nsIAuthPrompt2 = Components.interfaces.nsIAuthPrompt2; |
28 |
const nsIAuthInformation = Components.interfaces.nsIAuthInformation; |
30 |
const nsIAuthInformation = Components.interfaces.nsIAuthInformation; |
29 |
|
31 |
|
30 |
|
32 |
|
31 |
function AuthPrompt1(flags) { |
33 |
function AuthPrompt1(flags) { |
32 |
this.flags = flags; |
34 |
this.flags = flags; |
33 |
} |
35 |
} |
Lines 154-169
AuthPrompt2.prototype = {
|
Link Here
|
---|
|
---|
154 |
if (this.flags & FLAG_RETURN_FALSE) |
156 |
if (this.flags & FLAG_RETURN_FALSE) |
155 |
{ |
157 |
{ |
156 |
this.flags |= FLAG_PREVIOUS_FAILED; |
158 |
this.flags |= FLAG_PREVIOUS_FAILED; |
157 |
return false; |
159 |
return false; |
158 |
} |
160 |
} |
159 |
|
161 |
|
160 |
if (this.flags & FLAG_BOGUS_USER) |
162 |
if (this.flags & FLAG_BOGUS_USER) |
161 |
this.user = "foo\nbar"; |
163 |
this.user = "foo\nbar"; |
|
|
164 |
if (this.flags & FLAG_UTF8_USER) |
165 |
this.user = userUTF8; |
162 |
|
166 |
|
163 |
authInfo.username = this.user; |
167 |
authInfo.username = this.user; |
164 |
if (this.flags & FLAG_WRONG_PASSWORD) { |
168 |
if (this.flags & FLAG_WRONG_PASSWORD) { |
165 |
authInfo.password = this.pass + ".wrong"; |
169 |
authInfo.password = this.pass + ".wrong"; |
166 |
this.flags |= FLAG_PREVIOUS_FAILED; |
170 |
this.flags |= FLAG_PREVIOUS_FAILED; |
167 |
// Now clear the flag to avoid an infinite loop |
171 |
// Now clear the flag to avoid an infinite loop |
168 |
this.flags &= ~FLAG_WRONG_PASSWORD; |
172 |
this.flags &= ~FLAG_WRONG_PASSWORD; |
169 |
} else { |
173 |
} else { |
Lines 302-331
function makeChan(url, loadingUrl) {
|
Link Here
|
---|
|
---|
302 |
}); |
306 |
}); |
303 |
} |
307 |
} |
304 |
|
308 |
|
305 |
var tests = [test_noauth, test_returnfalse1, test_wrongpw1, test_prompt1, |
309 |
var tests = [test_noauth, test_returnfalse1, test_wrongpw1, test_prompt1, |
306 |
test_prompt1CrossOrigin, test_prompt2CrossOrigin, |
310 |
test_prompt1CrossOrigin, test_prompt2CrossOrigin, |
307 |
test_returnfalse2, test_wrongpw2, test_prompt2, test_ntlm, |
311 |
test_returnfalse2, test_wrongpw2, test_prompt2, test_ntlm, |
308 |
test_basicrealm, test_digest_noauth, test_digest, |
312 |
test_basicrealm, test_digest_noauth, test_digest, |
309 |
test_digest_bogus_user, test_short_digest, test_large_realm, |
313 |
test_digest_bogus_user, test_short_digest, test_large_realm, |
310 |
test_large_domain]; |
314 |
test_large_domain, test_basic_charset]; |
311 |
|
315 |
|
312 |
var current_test = 0; |
316 |
var current_test = 0; |
313 |
|
317 |
|
314 |
var httpserv = null; |
318 |
var httpserv = null; |
315 |
|
319 |
|
316 |
function run_test() { |
320 |
function run_test() { |
317 |
httpserv = new HttpServer(); |
321 |
httpserv = new HttpServer(); |
318 |
|
322 |
|
319 |
httpserv.registerPathHandler("/auth", authHandler); |
323 |
httpserv.registerPathHandler("/auth", authHandler); |
320 |
httpserv.registerPathHandler("/auth/ntlm/simple", authNtlmSimple); |
324 |
httpserv.registerPathHandler("/auth/ntlm/simple", authNtlmSimple); |
321 |
httpserv.registerPathHandler("/auth/realm", authRealm); |
325 |
httpserv.registerPathHandler("/auth/realm", authRealm); |
322 |
httpserv.registerPathHandler("/auth/digest", authDigest); |
326 |
httpserv.registerPathHandler("/auth/digest", authDigest); |
323 |
httpserv.registerPathHandler("/auth/short_digest", authShortDigest); |
327 |
httpserv.registerPathHandler("/auth/short_digest", authShortDigest); |
|
|
328 |
httpserv.registerPathHandler("/auth/charset", authBasicCharset); |
324 |
httpserv.registerPathHandler("/largeRealm", largeRealm); |
329 |
httpserv.registerPathHandler("/largeRealm", largeRealm); |
325 |
httpserv.registerPathHandler("/largeDomain", largeDomain); |
330 |
httpserv.registerPathHandler("/largeDomain", largeDomain); |
326 |
|
331 |
|
327 |
httpserv.start(-1); |
332 |
httpserv.start(-1); |
328 |
|
333 |
|
329 |
tests[0](); |
334 |
tests[0](); |
330 |
} |
335 |
} |
331 |
|
336 |
|
Lines 472-487
function test_short_digest() {
|
Link Here
|
---|
|
---|
472 |
var chan = makeChan(URL + "/auth/short_digest", URL); |
477 |
var chan = makeChan(URL + "/auth/short_digest", URL); |
473 |
chan.notificationCallbacks = new Requestor(FLAG_NO_REALM, 2); |
478 |
chan.notificationCallbacks = new Requestor(FLAG_NO_REALM, 2); |
474 |
listener.expectedCode = 401; // OK |
479 |
listener.expectedCode = 401; // OK |
475 |
chan.asyncOpen2(listener); |
480 |
chan.asyncOpen2(listener); |
476 |
|
481 |
|
477 |
do_test_pending(); |
482 |
do_test_pending(); |
478 |
} |
483 |
} |
479 |
|
484 |
|
|
|
485 |
function test_basic_charset() { |
486 |
var chan = makeChan(URL + "/auth/charset", URL); |
487 |
chan.notificationCallbacks = new Requestor(FLAG_UTF8_USER, 2); |
488 |
listener.expectedCode = 200; |
489 |
chan.asyncOpen2(listener); |
490 |
|
491 |
do_test_pending(); |
492 |
} |
493 |
|
480 |
// PATH HANDLERS |
494 |
// PATH HANDLERS |
481 |
|
495 |
|
482 |
// /auth |
496 |
// /auth |
483 |
function authHandler(metadata, response) { |
497 |
function authHandler(metadata, response) { |
484 |
// btoa("guest:guest"), but that function is not available here |
498 |
// btoa("guest:guest"), but that function is not available here |
485 |
var expectedHeader = "Basic Z3Vlc3Q6Z3Vlc3Q="; |
499 |
var expectedHeader = "Basic Z3Vlc3Q6Z3Vlc3Q="; |
486 |
|
500 |
|
487 |
var body; |
501 |
var body; |
Lines 522-537
function authNtlmSimple(metadata, respon
|
Link Here
|
---|
|
---|
522 |
function authRealm(metadata, response) { |
536 |
function authRealm(metadata, response) { |
523 |
response.setStatusLine(metadata.httpVersion, 401, "Unauthorized"); |
537 |
response.setStatusLine(metadata.httpVersion, 401, "Unauthorized"); |
524 |
response.setHeader("WWW-Authenticate", 'Basic realm="\\"f\\oo_bar"', false); |
538 |
response.setHeader("WWW-Authenticate", 'Basic realm="\\"f\\oo_bar"', false); |
525 |
var body = "success"; |
539 |
var body = "success"; |
526 |
|
540 |
|
527 |
response.bodyOutputStream.write(body, body.length); |
541 |
response.bodyOutputStream.write(body, body.length); |
528 |
} |
542 |
} |
529 |
|
543 |
|
|
|
544 |
function authBasicCharset(metadata, response) { |
545 |
var expectedHeader = "Basic " + btoa( |
546 |
unescape(encodeURIComponent(userUTF8 + ":guest"))); |
547 |
|
548 |
var body; |
549 |
if (metadata.hasHeader("Authorization") && |
550 |
metadata.getHeader("Authorization") == expectedHeader) |
551 |
{ |
552 |
response.setStatusLine(metadata.httpVersion, 200, "OK, authorized"); |
553 |
body = "success"; |
554 |
} else { |
555 |
response.setStatusLine(metadata.httpVersion, 401, "Unauthorized"); |
556 |
response.setHeader("WWW-Authenticate", 'Basic realm="secret",\ |
557 |
charset=UTF-8 , dummy="argument"', false); |
558 |
|
559 |
body = "failed"; |
560 |
} |
561 |
|
562 |
response.bodyOutputStream.write(body, body.length); |
563 |
} |
564 |
|
530 |
// |
565 |
// |
531 |
// Digest functions |
566 |
// Digest functions |
532 |
// |
567 |
// |
533 |
function bytesFromString(str) { |
568 |
function bytesFromString(str) { |
534 |
var converter = |
569 |
var converter = |
535 |
Components.classes["@mozilla.org/intl/scriptableunicodeconverter"] |
570 |
Components.classes["@mozilla.org/intl/scriptableunicodeconverter"] |
536 |
.createInstance(Components.interfaces.nsIScriptableUnicodeConverter); |
571 |
.createInstance(Components.interfaces.nsIScriptableUnicodeConverter); |
537 |
converter.charset = "UTF-8"; |
572 |
converter.charset = "UTF-8"; |