UNPKG

@andreabiagini5/applicazioni-e-servizi-web-project

Version:
93 lines 3.24 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.decodeToken = exports.createFromToken = exports.create = void 0; const jsonwebtoken_1 = __importDefault(require("jsonwebtoken")); const jwt_1 = require("../config/jwt"); /** * Session factory. Creates a new session with the given account. * @param account the account associated with the session * @returns {Session} the session object */ const create = (account) => { const token = jsonwebtoken_1.default.sign({ username: account.username, email: account.email, }, jwt_1.secret, { expiresIn: jwt_1.expiration }); const created = new Date(); const expires = new Date(created.getTime() + jwt_1.expiration * 1000); return new SessionImpl(account, token, created, expires); }; exports.create = create; /** * Session factory. Creates a new session with the given account and token. * @param account the account associated with the session * @param token the unique token of the session * @returns {Session} the session object * @throws {Error} if the token is invalid */ const createFromToken = (account, token) => { try { const decoded = jsonwebtoken_1.default.decode(token, { complete: true }); if (!decoded || typeof decoded.payload === 'string' || !decoded.payload.exp) { throw new Error('Invalid token'); } const expiration = new Date(decoded.payload.exp * 1000); const created = new Date(decoded.payload.iat * 1000); return new SessionImpl(account, token, created, expiration); } catch (error) { console.error('Error decoding token:', error); throw new Error('Error decoding token'); } }; exports.createFromToken = createFromToken; /** * Decodes a JWT token and returns the username and email. * @param token the token to decode * @returns { username: string; email: string } the decoded token */ const decodeToken = (token) => { try { const decoded = jsonwebtoken_1.default.verify(token, jwt_1.secret); if (typeof decoded === 'object' && decoded !== null) { return { username: decoded.username, email: decoded.email }; } throw new Error('Invalid token'); } catch (error) { console.error('Error decoding token:', error); throw new Error('Error decoding token'); } }; exports.decodeToken = decodeToken; class SessionImpl { constructor(account, tokenValue, created, expires) { this.linkedAccount = account; this.tokenValue = tokenValue; this.created = created; this.expires = expires; } isValid() { const now = new Date(); return this.expires > now; } get account() { return this.linkedAccount; } get token() { return this.tokenValue; } get createdAt() { return this.created; } get expiresAt() { return this.expires; } get expiration() { return Math.floor((this.expires.getTime() - this.created.getTime()) / 1000); } } //# sourceMappingURL=Session.js.map