mirror of
https://github.com/wkulhanek/bonob.git
synced 2025-12-21 17:33:29 +01:00
Catch any unexpected error during login and return 403 (#76)
This commit is contained in:
@@ -219,28 +219,35 @@ function server(
|
|||||||
const lang = langFor(req);
|
const lang = langFor(req);
|
||||||
const { username, password, linkCode } = req.body;
|
const { username, password, linkCode } = req.body;
|
||||||
if (!linkCodes.has(linkCode)) {
|
if (!linkCodes.has(linkCode)) {
|
||||||
res.status(400).render("failure", {
|
return res.status(400).render("failure", {
|
||||||
lang,
|
lang,
|
||||||
message: lang("invalidLinkCode"),
|
message: lang("invalidLinkCode"),
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
const authResult = await musicService.generateToken({
|
return musicService.generateToken({
|
||||||
username,
|
username,
|
||||||
password,
|
password,
|
||||||
});
|
}).then(authResult => {
|
||||||
if (isSuccess(authResult)) {
|
if (isSuccess(authResult)) {
|
||||||
linkCodes.associate(linkCode, authResult);
|
linkCodes.associate(linkCode, authResult);
|
||||||
res.render("success", {
|
return res.render("success", {
|
||||||
lang,
|
lang,
|
||||||
message: lang("loginSuccessful"),
|
message: lang("loginSuccessful"),
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
res.status(403).render("failure", {
|
return res.status(403).render("failure", {
|
||||||
lang,
|
lang,
|
||||||
message: lang("loginFailed"),
|
message: lang("loginFailed"),
|
||||||
cause: authResult.message,
|
cause: authResult.message,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}).catch(e => {
|
||||||
|
return res.status(403).render("failure", {
|
||||||
|
lang,
|
||||||
|
message: lang("loginFailed"),
|
||||||
|
cause: `Unexpected error occured - ${e}`,
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -680,6 +680,27 @@ describe("server", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("when an unexpected failure occurs", () => {
|
||||||
|
it("should return 403 with message", async () => {
|
||||||
|
const username = "userDoesntExist";
|
||||||
|
const password = "password";
|
||||||
|
const linkCode = uuid();
|
||||||
|
|
||||||
|
linkCodes.has.mockReturnValue(true);
|
||||||
|
musicService.generateToken.mockRejectedValue("BOOOOOOM");
|
||||||
|
|
||||||
|
const res = await request(server)
|
||||||
|
.post(bonobUrl.append({ pathname: "/login" }).pathname())
|
||||||
|
.set("accept-language", acceptLanguage)
|
||||||
|
.type("form")
|
||||||
|
.send({ username, password, linkCode })
|
||||||
|
.expect(403);
|
||||||
|
|
||||||
|
expect(res.text).toContain(lang("loginFailed"));
|
||||||
|
expect(res.text).toContain('Unexpected error occured - BOOOOOOM');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe("when linkCode is invalid", () => {
|
describe("when linkCode is invalid", () => {
|
||||||
it("should return 400 with message", async () => {
|
it("should return 400 with message", async () => {
|
||||||
const username = "jane";
|
const username = "jane";
|
||||||
|
|||||||
Reference in New Issue
Block a user