@andreabiagini5/applicazioni-e-servizi-web-project
Version:
Project for Applicazioni e Servizi Web.
93 lines • 3.24 kB
JavaScript
;
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