Browse Source

[add][server] cache sessions

B Thibault 8 years ago
parent
commit
968d43e54e
6 changed files with 33 additions and 18 deletions
  1. 3 0
      .gitignore
  2. 1 0
      package.json
  3. 5 6
      src/src/httpServ.js
  4. 11 8
      src/src/session.js
  5. 0 4
      src/src/slack.js
  6. 13 0
      src/src/slackManager.js

+ 3 - 0
.gitignore

@@ -1,3 +1,6 @@
+# cache
+store.json
+
 # ---> Node
 # Logs
 logs

+ 1 - 0
package.json

@@ -4,6 +4,7 @@
 		"http"
 		,"client-sessions"
 		,"crypto"
+		,"node-file-cache"
 		,"sleep"
 	]
 	,"repository": {

+ 5 - 6
src/src/httpServ.js

@@ -3,9 +3,9 @@ var http = require("http")
     ,sleep = require("sleep").sleep
 
     ,Url = require("./url.js").Url
-    ,Slack = require("./slack.js").Slack
     ,config = require("../config.js")
-    ,sessionManager = require("./session.js").SessionManager;
+    ,sessionManager = require("./session.js").SessionManager
+    ,slackManager = require("./slackManager.js").SlackManager;
 
 function Server(port) {
     var ctx = this;
@@ -74,7 +74,7 @@ Server.prototype.onRequest = function(req, res) {
             res.writeHeader("302", {
                 Location: "https://slack.com/oauth/authorize"
                 +"?client_id=" +config.clientId
-                +"&scope=" +Slack.getScope().join(" ")
+                +"&scope=" +slackManager.getScope().join(" ")
                 +"&redirect=" +config.rootUrl
             });
         }
@@ -83,14 +83,13 @@ Server.prototype.onRequest = function(req, res) {
         res.setHeader('Content-Length', req.urlObj.serve.stat.size);
         res.writeHeader("200");
         req.urlObj.getReadStream().pipe(res, { end: true });
+        sessionManager.saveSession(req.session);
         return; // async pipe will close when finished
     } else {
         res.writeHeader("200");
         res.write('"' +Math.floor(Date.now() /1000) +'"');
     }
-    if (req.session && req.session.modifiedAt === req.reqT) {
-        sessionManager.saveSession(req.session);
-    }
+    sessionManager.saveSession(req.session);
     res.end();
 }
 

+ 11 - 8
src/src/session.js

@@ -1,8 +1,9 @@
-var crypto = require('crypto');
+const crypto = require('crypto')
+    ,Cache = require('node-file-cache');
+
 
 function SessionManager() {
-//  TODO cache-able
-    this.sessions = {};
+    this.sessions = Cache.create();
 }
 
 function Session(reqT, sessId) {
@@ -17,8 +18,8 @@ SessionManager.createSessionId = function(req) {
 }
 
 SessionManager.prototype.forRequest = function(request) {
-    if (request.cookies && request.cookies.sessID && this.sessions[request.cookies.sessID]) {
-        return this.sessions[request.cookies.sessID];
+    if (request.cookies && request.cookies.sessID) {
+        return this.sessions.get(request.cookies.sessID);
     }
     return null;
 }
@@ -30,16 +31,18 @@ SessionManager.prototype.lazyForRequest = function(request) {
     }
     var sessionId = SessionManager.createSessionId(request);
     session = new Session(request.reqT, sessionId);
-    this.sessions[sessionId] = session;
     return session;
 }
 
 SessionManager.prototype.saveSession = function(session) {
-    console.log("saving " +session.sessId);
+    if (session) {
+        this.sessions.set(session.sessId, session, {
+            life: 60 * 60 * 24
+        });
+    }
 }
 
 Session.prototype.setSlackToken = function(reqT, slackToken) {
-    console.log(slackToken);
     this.slackToken = slackToken;
     this.modifiedAt = reqT;
 }

+ 0 - 4
src/src/slack.js

@@ -2,9 +2,5 @@
 function Slack() {
 }
 
-Slack.getScope = function() {
-    return [ "channels:read", "chat:write:user" ];
-}
-
 module.exports.Slack = Slack;
 

+ 13 - 0
src/src/slackManager.js

@@ -0,0 +1,13 @@
+
+function SlackManager() {
+}
+
+SlackManager.prototype.getScope = function() {
+    return [
+        "channels:read"
+        ,"chat:write:user"
+    ];
+}
+
+module.exports.SlackManager = new SlackManager();
+