[Service] Integrate DeviceHome and SignalingServer
[platform/framework/web/wrtjs.git] / device_home / node_modules / express-session / session / store.js
1 /*!
2  * Connect - session - Store
3  * Copyright(c) 2010 Sencha Inc.
4  * Copyright(c) 2011 TJ Holowaychuk
5  * MIT Licensed
6  */
7
8 'use strict';
9
10 /**
11  * Module dependencies.
12  * @private
13  */
14
15 var Cookie = require('./cookie')
16 var EventEmitter = require('events').EventEmitter
17 var Session = require('./session')
18 var util = require('util')
19
20 /**
21  * Module exports.
22  * @public
23  */
24
25 module.exports = Store
26
27 /**
28  * Abstract base class for session stores.
29  * @public
30  */
31
32 function Store () {
33   EventEmitter.call(this)
34 }
35
36 /**
37  * Inherit from EventEmitter.
38  */
39
40 util.inherits(Store, EventEmitter)
41
42 /**
43  * Re-generate the given requests's session.
44  *
45  * @param {IncomingRequest} req
46  * @return {Function} fn
47  * @api public
48  */
49
50 Store.prototype.regenerate = function(req, fn){
51   var self = this;
52   this.destroy(req.sessionID, function(err){
53     self.generate(req);
54     fn(err);
55   });
56 };
57
58 /**
59  * Load a `Session` instance via the given `sid`
60  * and invoke the callback `fn(err, sess)`.
61  *
62  * @param {String} sid
63  * @param {Function} fn
64  * @api public
65  */
66
67 Store.prototype.load = function(sid, fn){
68   var self = this;
69   this.get(sid, function(err, sess){
70     if (err) return fn(err);
71     if (!sess) return fn();
72     var req = { sessionID: sid, sessionStore: self };
73     fn(null, self.createSession(req, sess))
74   });
75 };
76
77 /**
78  * Create session from JSON `sess` data.
79  *
80  * @param {IncomingRequest} req
81  * @param {Object} sess
82  * @return {Session}
83  * @api private
84  */
85
86 Store.prototype.createSession = function(req, sess){
87   var expires = sess.cookie.expires
88   var originalMaxAge = sess.cookie.originalMaxAge
89
90   sess.cookie = new Cookie(sess.cookie);
91
92   if (typeof expires === 'string') {
93     // convert expires to a Date object
94     sess.cookie.expires = new Date(expires)
95   }
96
97   // keep originalMaxAge intact
98   sess.cookie.originalMaxAge = originalMaxAge
99
100   req.session = new Session(req, sess);
101   return req.session;
102 };