PageRenderTime 32ms CodeModel.GetById 24ms app.highlight 2ms RepoModel.GetById 0ms app.codeStats 0ms

/node_modules/express/node_modules/connect/lib/middleware/session/session.js

https://bitbucket.org/gagginaspinnata/todo-app-with-angularjs
JavaScript | 116 lines | 37 code | 17 blank | 62 comment | 5 complexity | f9ef574d8f4f5bbe82d0808f22fcb6fd MD5 | raw file
Possible License(s): Apache-2.0, MIT
  1
  2/*!
  3 * Connect - session - Session
  4 * Copyright(c) 2010 Sencha Inc.
  5 * Copyright(c) 2011 TJ Holowaychuk
  6 * MIT Licensed
  7 */
  8
  9/**
 10 * Module dependencies.
 11 */
 12
 13var utils = require('../../utils');
 14
 15/**
 16 * Create a new `Session` with the given request and `data`.
 17 *
 18 * @param {IncomingRequest} req
 19 * @param {Object} data
 20 * @api private
 21 */
 22
 23var Session = module.exports = function Session(req, data) {
 24  Object.defineProperty(this, 'req', { value: req });
 25  Object.defineProperty(this, 'id', { value: req.sessionID });
 26  if ('object' == typeof data) utils.merge(this, data);
 27};
 28
 29/**
 30 * Update reset `.cookie.maxAge` to prevent
 31 * the cookie from expiring when the
 32 * session is still active.
 33 *
 34 * @return {Session} for chaining
 35 * @api public
 36 */
 37
 38Session.prototype.touch = function(){
 39  return this.resetMaxAge();
 40};
 41
 42/**
 43 * Reset `.maxAge` to `.originalMaxAge`.
 44 *
 45 * @return {Session} for chaining
 46 * @api public
 47 */
 48
 49Session.prototype.resetMaxAge = function(){
 50  this.cookie.maxAge = this.cookie.originalMaxAge;
 51  return this;
 52};
 53
 54/**
 55 * Save the session data with optional callback `fn(err)`.
 56 *
 57 * @param {Function} fn
 58 * @return {Session} for chaining
 59 * @api public
 60 */
 61
 62Session.prototype.save = function(fn){
 63  this.req.sessionStore.set(this.id, this, fn || function(){});
 64  return this;
 65};
 66
 67/**
 68 * Re-loads the session data _without_ altering
 69 * the maxAge properties. Invokes the callback `fn(err)`,
 70 * after which time if no exception has occurred the
 71 * `req.session` property will be a new `Session` object,
 72 * although representing the same session.
 73 *
 74 * @param {Function} fn
 75 * @return {Session} for chaining
 76 * @api public
 77 */
 78
 79Session.prototype.reload = function(fn){
 80  var req = this.req
 81    , store = this.req.sessionStore;
 82  store.get(this.id, function(err, sess){
 83    if (err) return fn(err);
 84    if (!sess) return fn(new Error('failed to load session'));
 85    store.createSession(req, sess);
 86    fn();
 87  });
 88  return this;
 89};
 90
 91/**
 92 * Destroy `this` session.
 93 *
 94 * @param {Function} fn
 95 * @return {Session} for chaining
 96 * @api public
 97 */
 98
 99Session.prototype.destroy = function(fn){
100  delete this.req.session;
101  this.req.sessionStore.destroy(this.id, fn);
102  return this;
103};
104
105/**
106 * Regenerate this request's session.
107 *
108 * @param {Function} fn
109 * @return {Session} for chaining
110 * @api public
111 */
112
113Session.prototype.regenerate = function(fn){
114  this.req.sessionStore.regenerate(this.req, fn);
115  return this;
116};