74 lines
2.2 KiB
JavaScript
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
|