Files
ara-kanban-service/lib/util/SessionUtil.js

74 lines
2.2 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const HttpStatusCodes_1 = __importDefault(require("@src/constants/HttpStatusCodes"));
const classes_1 = require("@src/other/classes");
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
const EnvVars_1 = __importDefault(require("../constants/EnvVars"));
// **** Variables **** //
// Errors
const Errors = {
ParamFalsey: 'Param is falsey',
Validation: 'JSON-web-token validation failed.',
};
// Options
const Options = {
expiresIn: EnvVars_1.default.Jwt.Exp,
};
// **** Functions **** //
/**
* Get session data from request object (i.e. ISessionUser)
*/
function getSessionData(req) {
const { Key } = EnvVars_1.default.CookieProps, jwt = req.signedCookies[Key];
return _decode(jwt);
}
/**
* Add a JWT to the response
*/
async function addSessionData(res, data) {
if (!res || !data) {
throw new classes_1.RouteError(HttpStatusCodes_1.default.BAD_REQUEST, Errors.ParamFalsey);
}
// Setup JWT
const jwt = await _sign(data), { Key, Options } = EnvVars_1.default.CookieProps;
// Return
return res.cookie(Key, jwt, Options);
}
/**
* Remove cookie
*/
function clearCookie(res) {
const { Key, Options } = EnvVars_1.default.CookieProps;
return res.clearCookie(Key, Options);
}
// **** Helper Functions **** //
/**
* Encrypt data and return jwt.
*/
function _sign(data) {
return new Promise((res, rej) => {
jsonwebtoken_1.default.sign(data, EnvVars_1.default.Jwt.Secret, { expiresIn: '1h' }, (err, token) => {
return err ? rej(err) : res(token || '');
});
});
}
/**
* Decrypt JWT and extract client data.
*/
function _decode(jwt) {
return new Promise((res, rej) => {
jsonwebtoken_1.default.verify(jwt, EnvVars_1.default.Jwt.Secret, undefined, (err, decoded) => {
return err ? rej(Errors.Validation) : res(decoded);
});
});
}
// **** Export default **** //
exports.default = {
addSessionData,
getSessionData,
clearCookie,
};
//# sourceMappingURL=SessionUtil.js.map