140 lines
4.2 KiB
JavaScript
140 lines
4.2 KiB
JavaScript
/* 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(
|
|
"chrome://remote/content/shared/ChallengeHeaderParser.sys.mjs"
|
|
);
|
|
|
|
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"
|
|
);
|
|
});
|