123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- 'use strict';
- /**
- * Session model.
- */
- const inspect = Symbol.for('nodejs.util.inspect.custom');
- class Session {
- /**
- * Session constructor
- * @param {Context} ctx
- * @param {Object} obj
- * @api private
- */
- constructor(sessionContext, obj, externalKey) {
- this._sessCtx = sessionContext;
- this._ctx = sessionContext.ctx;
- this._externalKey = externalKey;
- if (!obj) {
- this.isNew = true;
- } else {
- for (const k in obj) {
- // restore maxAge from store
- if (k === '_maxAge') this._ctx.sessionOptions.maxAge = obj._maxAge;
- else if (k === '_session') this._ctx.sessionOptions.maxAge = 'session';
- else this[k] = obj[k];
- }
- }
- }
- /**
- * JSON representation of the session.
- *
- * @return {Object}
- * @api public
- */
- toJSON() {
- const obj = {};
- Object.keys(this).forEach(key => {
- if (key === 'isNew') return;
- if (key[0] === '_') return;
- obj[key] = this[key];
- });
- return obj;
- }
- /**
- *
- * alias to `toJSON`
- * @api public
- */
- [inspect]() {
- return this.toJSON();
- }
- /**
- * Return how many values there are in the session object.
- * Used to see if it's "populated".
- *
- * @return {Number}
- * @api public
- */
- get length() {
- return Object.keys(this.toJSON()).length;
- }
- /**
- * populated flag, which is just a boolean alias of .length.
- *
- * @return {Boolean}
- * @api public
- */
- get populated() {
- return !!this.length;
- }
- /**
- * get session maxAge
- *
- * @return {Number}
- * @api public
- */
- get maxAge() {
- return this._ctx.sessionOptions.maxAge;
- }
- /**
- * set session maxAge
- *
- * @param {Number}
- * @api public
- */
- set maxAge(val) {
- this._ctx.sessionOptions.maxAge = val;
- // maxAge changed, must save to cookie and store
- this._requireSave = true;
- }
- /**
- * get session external key
- * only exist if opts.store present
- */
- get externalKey() {
- return this._externalKey;
- }
- /**
- * save this session no matter whether it is populated
- *
- * @api public
- */
- save() {
- this._requireSave = true;
- }
- /**
- * commit this session's headers if autoCommit is set to false
- *
- * @api public
- */
- async manuallyCommit() {
- await this._sessCtx.commit();
- }
- }
- module.exports = Session;
|