Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
const { parseChallengeHeader } = ChromeUtils.importESModule(
);
add_task(async function test_single_scheme() {
const TEST_HEADERS = [
{
// double quotes
header: 'Basic realm="test"',
params: [{ name: "realm", value: "test" }],
},
{
// single quote
header: "Basic realm='test'",
params: [{ name: "realm", value: "test" }],
},
{
// multiline
header: `Basic
realm='test'`,
params: [{ name: "realm", value: "test" }],
},
{
// with additional parameter.
header: 'Basic realm="test", charset="UTF-8"',
params: [
{ name: "realm", value: "test" },
{ name: "charset", value: "UTF-8" },
],
},
];
for (const { header, params } of TEST_HEADERS) {
const challenges = parseChallengeHeader(header);
equal(challenges.length, 1);
equal(challenges[0].scheme, "Basic");
deepEqual(challenges[0].params, params);
}
});
add_task(async function test_realmless_scheme() {
const TEST_HEADERS = [
{
// no parameter
header: "Custom",
params: [],
},
{
// one non-realm parameter
header: "Custom charset='UTF-8'",
params: [{ name: "charset", value: "UTF-8" }],
},
];
for (const { header, params } of TEST_HEADERS) {
const challenges = parseChallengeHeader(header);
equal(challenges.length, 1);
equal(challenges[0].scheme, "Custom");
deepEqual(challenges[0].params, params);
}
});
add_task(async function test_multiple_schemes() {
const TEST_HEADERS = [
{
header: 'Scheme1 realm="foo", Scheme2 realm="bar"',
params: [
[{ name: "realm", value: "foo" }],
[{ name: "realm", value: "bar" }],
],
},
{
header: 'Scheme1 realm="foo", charset="UTF-8", Scheme2 realm="bar"',
params: [
[
{ name: "realm", value: "foo" },
{ name: "charset", value: "UTF-8" },
],
[{ name: "realm", value: "bar" }],
],
},
{
header: `Scheme1 realm="foo",
charset="UTF-8",
Scheme2 realm="bar"`,
params: [
[
{ name: "realm", value: "foo" },
{ name: "charset", value: "UTF-8" },
],
[{ name: "realm", value: "bar" }],
],
},
];
for (const { header, params } of TEST_HEADERS) {
const challenges = parseChallengeHeader(header);
equal(challenges.length, 2);
equal(challenges[0].scheme, "Scheme1");
deepEqual(challenges[0].params, params[0]);
equal(challenges[1].scheme, "Scheme2");
deepEqual(challenges[1].params, params[1]);
}
});
add_task(async function test_digest_scheme() {
const header = `Digest
realm="http-auth@example.org",
qop="auth, auth-int",
algorithm=SHA-256,
nonce="7ypf/xlj9XXwfDPEoM4URrv/xwf94BcCAzFZH4GiTo0v",
opaque="FQhe/qaU925kfnzjCev0ciny7QMkPqMAFRtzCUYo5tdS"`;
const challenges = parseChallengeHeader(header);
equal(challenges.length, 1);
equal(challenges[0].scheme, "Digest");
// Note: we are not doing a deepEqual check here, because one of the params
// actually contains a `,` inside quotes for its value, which will not be
// handled properly by the current ChallengeHeaderParser. See Bug 1857847.
const realmParam = challenges[0].params.find(param => param.name === "realm");
ok(realmParam);
equal(realmParam.value, "http-auth@example.org");
// Once Bug 1857847 is addressed, this should start failing and can be
// switched to deepEqual.
notDeepEqual(
challenges[0].params,
[
{ name: "realm", value: "http-auth@example.org" },
{ name: "qop", value: "auth, auth-int" },
{ name: "algorithm", value: "SHA-256" },
{ name: "nonce", value: "7ypf/xlj9XXwfDPEoM4URrv/xwf94BcCAzFZH4GiTo0v" },
{ name: "opaque", value: "FQhe/qaU925kfnzjCev0ciny7QMkPqMAFRtzCUYo5tdS" },
],
"notDeepEqual should be changed to deepEqual when Bug 1857847 is fixed"
);
});