@qelos/auth
Version:
Express Passport authentication service
76 lines (75 loc) • 3.11 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSignedToken = exports.setCookie = exports.getUniqueId = exports.verifyRefreshToken = exports.verifyToken = void 0;
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
const config_1 = require("../../config");
function verifyToken(token, tenant) {
if (!token.trim()) {
return Promise.reject();
}
return verify(token, tenant, config_1.jwtSecret);
}
exports.verifyToken = verifyToken;
function verifyRefreshToken(refreshToken, tenant) {
return verify(refreshToken, tenant, config_1.refreshTokenSecret);
}
exports.verifyRefreshToken = verifyRefreshToken;
function verify(token, tenant, secret) {
return new Promise((resolve, reject) => {
jsonwebtoken_1.default.verify(token, secret, (err, decoded) => {
if (err || !decoded || decoded.tenant !== tenant) {
// the 401 code is for unauthorized status
return reject(err || { message: 'token is empty' });
}
return resolve(decoded);
});
});
}
function getUniqueId(creationTime = Date.now().toString()) {
return creationTime + ':' + Buffer.from(Math.random().toString()).toString('base64');
}
exports.getUniqueId = getUniqueId;
function getCookieParameters(cookieId, maxAge, domain) {
let cookieParams = { maxAge, httpOnly: true, path: '/api' };
if (domain || config_1.cookieBaseDomain) {
cookieParams.domain = domain || config_1.cookieBaseDomain;
cookieParams.sameSite = 'None';
cookieParams.secure = true;
}
return [cookieId, cookieParams];
}
function setCookie(res, cookieName, cookieId, maxAge, domain) {
const [id, parameters] = getCookieParameters(cookieId, (maxAge || config_1.cookieTokenExpiration).toString(), domain);
res.cookie(cookieName, id, parameters);
return res;
}
exports.setCookie = setCookie;
function getSignedToken(user, workspace, tokenIdentifier, expiresIn = config_1.tokenExpiration) {
const secretParams = {
workspace: workspace ? Object.assign(Object.assign({}, workspace), {
// encode workspace name that might contain special characters
name: encodeURIComponent(workspace.name || '') }) : undefined,
sub: user._id,
tenant: user.tenant,
username: user.username,
email: user.email,
phone: user.phone,
name: encodeURIComponent(user.name),
fullName: encodeURIComponent(user.fullName),
firstName: encodeURIComponent(user.firstName),
lastName: encodeURIComponent(user.lastName),
roles: user.roles,
profileImage: user.profileImage,
};
if (tokenIdentifier) {
secretParams.tokenIdentifier = tokenIdentifier;
}
return {
payload: secretParams,
token: jsonwebtoken_1.default.sign(secretParams, config_1.jwtSecret, { expiresIn })
};
}
exports.getSignedToken = getSignedToken;