Source code

Revision control

Copy as Markdown

Other Tools

/* Any copyright is dedicated to the Public Domain.
/**
* This server simulates the behavior of /account/login on the Firefox Accounts
* auth server in the case where the user is trying to sign in with an email
* with the wrong capitalization.
*
*
* The expected behavior is that on the first attempt, with the wrong email,
* the server will respond with a 400 and the canonical email capitalization
* that the client should use. The client then has one chance to sign in with
* this different capitalization.
*
* In this test, the user with the account id "Greta.Garbo@gmail.COM" initially
* tries to sign in as "greta.garbo@gmail.com".
*
* On success, the client is responsible for updating its sign-in user state
* and recording the proper email capitalization.
*/
const CC = Components.Constructor;
const BinaryInputStream = CC(
"@mozilla.org/binaryinputstream;1",
"nsIBinaryInputStream",
"setInputStream"
);
const goodEmail = "Greta.Garbo@gmail.COM";
const badEmail = "greta.garbo@gmail.com";
function handleRequest(request, response) {
let body = new BinaryInputStream(request.bodyInputStream);
let bytes = [];
let available;
while ((available = body.available()) > 0) {
Array.prototype.push.apply(bytes, body.readByteArray(available));
}
let data = JSON.parse(String.fromCharCode.apply(null, bytes));
let message;
switch (data.email) {
case badEmail:
// Almost - try again with fixed email case
message = {
code: 400,
errno: 120,
error: "Incorrect email case",
email: goodEmail,
};
response.setStatusLine(request.httpVersion, 400, "Almost");
break;
case goodEmail:
// Successful login.
message = {
uid: "your-uid",
sessionToken: "your-sessionToken",
keyFetchToken: "your-keyFetchToken",
verified: true,
authAt: 1392144866,
};
response.setStatusLine(request.httpVersion, 200, "Yay");
break;
default:
// Anything else happening in this test is a failure.
message = {
code: 400,
errno: 999,
error: "What happened!?",
};
response.setStatusLine(request.httpVersion, 400, "Ouch");
break;
}
let messageStr = JSON.stringify(message);
response.bodyOutputStream.write(messageStr, messageStr.length);
}