monkeytype/backend/middlewares/auth.js

48 lines
1.3 KiB
JavaScript
Raw Normal View History

2021-06-07 01:26:12 +08:00
const MonkeyError = require("../handlers/error");
2021-06-07 00:32:37 +08:00
const { verifyIdToken } = require("../handlers/auth");
module.exports = {
async authenticateRequest(req, res, next) {
try {
2021-09-07 22:04:50 +08:00
if (process.env.MODE === "dev" && !req.headers.authorization) {
if (req.body.uid) {
req.decodedToken = {
uid: req.body.uid,
};
console.log("Running authorization in dev mode");
return next();
} else {
throw new MonkeyError(
400,
"Running authorization in dev mode but still no uid was provided"
);
}
}
2021-06-07 00:32:37 +08:00
const { authorization } = req.headers;
2021-08-18 08:41:29 +08:00
if (!authorization)
throw new MonkeyError(
401,
"Unauthorized",
2022-01-14 23:20:04 +08:00
`endpoint: ${req.baseUrl} no authorization header found`
2021-08-18 08:41:29 +08:00
);
2021-06-07 00:32:37 +08:00
const token = authorization.split(" ");
2021-06-17 03:56:00 +08:00
if (token[0].trim() !== "Bearer")
2021-08-18 08:41:29 +08:00
return next(
new MonkeyError(400, "Invalid Token", "Incorrect token type")
);
2022-02-04 20:06:09 +08:00
try {
req.decodedToken = await verifyIdToken(token[1]);
} catch (err) {
if (err.message == "auth/id-token-expired") {
new MonkeyError(401, "Unauthorized", "Token expired");
} else {
throw err;
}
}
2021-06-07 00:32:37 +08:00
return next();
} catch (e) {
return next(e);
}
},
};