All files / node-user-accounts-boilerplate-nahid/session MemorySessionStore.js

94.74% Statements 18/19
71.43% Branches 5/7
100% Functions 5/5
94.74% Lines 18/19

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86    4x 4x                                   32x         32x         32x                 136x   83x   83x   83x                         68x 68x               68x 68x 68x 68x               5x 5x       4x  
"use strict";
 
const Store = require('express-session/session/store');
const defer = require('../helper/defer');
 
/**
 * In memory session store.
 * 
 * Apparently the default session store is not menat to be used for prouction
 * or something.
 * 
 * Will not scale horizontally.
 */
class MemorySessionStore extends Store
{
 
  /**
   * @param {object} options see fields
   */
  constructor(options = {})
  {
    super();
 
    /**
     * In memory sessions list.
     */
    this.sessions = {};
 
    /**
     * Session dueation
     */
    this.sessionsTTL = options.sessionsTTL || 8 * 60 * 60 * 1000;
  }
 
  /**
   * clean up expired sessions
   * @protected
   */
  cleanup()
  {
    for (let sessionId in this.sessions)
    {
      let session = this.sessions[sessionId];
 
      Eif (session)
      {
        Iif (session.expires < Date.now())
        {
          delete this.sessions[sessionId];
        }
      }
    }
  }
 
  /**
   * @override
   */
  get(sessionId, callback)
  {
    this.cleanup();
    defer(callback, null, this.sessions[sessionId]);
  }
 
  /**
   * @override
   */
  set(sessionId, session, callback)
  {
    this.cleanup();
    this.sessions[sessionId] = session;
    session.expires = Date.now() + this.sessionsTTL;
    defer(callback);
  }
 
  /**
   * @override
   */
  destroy(sessionId, callback)
  {
    delete this.sessions[sessionId];
    defer(callback);
  }
}
 
module.exports = MemorySessionStore;