synt_backend
Version:
Synt light-weight node backend service
55 lines (49 loc) • 1.4 kB
JavaScript
const db = require("./../mysql/models/index");
const config = require("./../config/jwt-config.json");
const jwt = require("jsonwebtoken");
module.exports = {
getDecodedToken,
getAuthUser,
addJwtToken,
};
function getDecodedToken(req) {
if (!req.headers["x-access-token"] && !req.headers["authorization"]) {
return null;
}
let token = req.headers["x-access-token"] || req.headers["authorization"]; // Express headers are auto converted to lowercase
if (token.startsWith("Bearer ")) {
// Remove Bearer from string
token = token.slice(7, token.length);
let decoded = jwt.verify(token, config.secret);
return decoded;
}
return null;
}
async function getAuthUser(req) {
const decoded = getDecodedToken(req);
if (decoded && decoded.UserId) {
let User = await db.User.findOne({ where: { id: decoded.UserId } });
if (User) {
User.VMEId = decoded.VMEId || null;
User.DeviceId = decoded.DeviceId || null;
return User;
}
}
console.log("JWT problem");
return null;
}
function addJwtToken(User, VMEId, DeviceId) {
const token = jwt.sign(
{ UserId: User.id, VMEId, DeviceId },
process.env.JWT_SECRET
);
// FIXME: check type or something instead of try/catch
try {
User = User.toJSON();
} catch {
console.log("User already json?");
}
User.token = token;
User.token_type = "Bearer";
return User;
}