forest-express
Version:
Official package for all Forest Express Lianas
107 lines (99 loc) • 3.08 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var EXPIRATION_IN_HOURS = 1;
var PAST_DATE = new Date(0);
var FOREST_SESSION_TOKEN = 'forest_session_token';
var REGEX_COOKIE_SESSION_TOKEN = new RegExp("".concat(FOREST_SESSION_TOKEN, "=([^;]*)"));
var TokenService = /*#__PURE__*/function () {
/** @private @readonly @type {import('jsonwebtoken')} */
/**
* @param {import("../context/init").Context} context
*/
function TokenService(context) {
(0, _classCallCheck2["default"])(this, TokenService);
(0, _defineProperty2["default"])(this, "jsonwebtoken", void 0);
this.jsonwebtoken = context.jsonwebtoken;
}
/** @returns {number} */
// eslint-disable-next-line class-methods-use-this
(0, _createClass2["default"])(TokenService, [{
key: "expirationInHours",
get: function get() {
return EXPIRATION_IN_HOURS;
}
/** @returns {number} */
}, {
key: "expirationInSeconds",
get: function get() {
return this.expirationInHours * 3600;
}
/** @returns {string} */
// eslint-disable-next-line class-methods-use-this
}, {
key: "forestCookieName",
get: function get() {
return FOREST_SESSION_TOKEN;
}
/**
* @param {{
* id: number;
* email: string;
* first_name: string;
* last_name: string;
* teams: number[];
* }} user
* @param {string|number} renderingId
* @param {{
* authSecret: string
* }} options
* @returns string
*/
}, {
key: "createToken",
value: function createToken(user, renderingId, _ref) {
var authSecret = _ref.authSecret;
return this.jsonwebtoken.sign({
id: user.id,
email: user.email,
firstName: user.first_name,
lastName: user.last_name,
team: user.teams[0],
role: user.role,
tags: user.tags,
permissionLevel: user.permission_level,
renderingId: renderingId
}, authSecret, {
expiresIn: "".concat(this.expirationInHours, " hours")
});
}
// eslint-disable-next-line class-methods-use-this
}, {
key: "deleteToken",
value: function deleteToken() {
return {
expires: PAST_DATE,
httpOnly: true,
secure: true,
sameSite: 'none'
};
}
/**
* @param {string} cookies
*/
// eslint-disable-next-line class-methods-use-this
}, {
key: "extractForestSessionToken",
value: function extractForestSessionToken(cookies) {
var forestSession = cookies.match(REGEX_COOKIE_SESSION_TOKEN);
if (forestSession && forestSession[1]) {
return forestSession[1];
}
return null;
}
}]);
return TokenService;
}();
module.exports = TokenService;