session.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. const crypto = require('crypto')
  2. ,Cache = require('node-file-cache');
  3. function SessionManager() {
  4. this.sessions = Cache.create();
  5. }
  6. SessionManager.defaultTtl = 60 * 60 * 24;
  7. function Session(reqT, sessId) {
  8. this.sessId = sessId;
  9. this.slackToken = null;
  10. this.modifiedAt = reqT;
  11. }
  12. SessionManager.createSessionId = function(req) {
  13. var token = Date.now() + "" +Math.random();
  14. return crypto.createHash('md5').update(token).digest('hex');
  15. }
  16. SessionManager.prototype.forRequest = function(request) {
  17. if (request.cookies && request.cookies.sessID) {
  18. return this.sessions.get(request.cookies.sessID);
  19. }
  20. return null;
  21. }
  22. SessionManager.prototype.lazyForRequest = function(request) {
  23. var session = this.forRequest(request);
  24. if (session) {
  25. return session;
  26. }
  27. var sessionId = SessionManager.createSessionId(request);
  28. session = new Session(request.reqT, sessionId);
  29. return session;
  30. }
  31. SessionManager.prototype.saveSession = function(session) {
  32. if (session) {
  33. this.sessions.set(session.sessId, session, {
  34. life: SessionManager.defaultTtl
  35. });
  36. }
  37. }
  38. Session.prototype.setSlackToken = function(reqT, slackToken) {
  39. this.slackUserId = slackToken["user_id"];
  40. this.slackTeamName = slackToken["team_name"];
  41. this.slackTeamId = slackToken["team_name"];
  42. this.slackToken = slackToken["access_token"];
  43. this.modifiedAt = reqT;
  44. }
  45. var sessMan = new SessionManager();
  46. module.exports.SessionManager = sessMan;