Просмотр исходного кода

integrate with passport session

Yuki Takei 5 лет назад
Родитель
Сommit
9f718760dd
4 измененных файлов с 21 добавлено и 7 удалено
  1. 1 0
      package.json
  2. 1 1
      src/server/crowi/index.js
  3. 14 6
      src/server/service/socket-io.js
  4. 5 0
      yarn.lock

+ 1 - 0
package.json

@@ -73,6 +73,7 @@
       "openid-client: Node.js 12 or higher is required for openid-client@3 and above."
     ],
     "@google-cloud/storage": "^3.3.0",
+    "@kobalab/socket.io-session": "^1.0.3",
     "JSONStream": "^1.3.5",
     "archiver": "^3.1.1",
     "array.prototype.flatmap": "^1.2.2",

+ 1 - 1
src/server/crowi/index.js

@@ -278,7 +278,7 @@ Crowi.prototype.setupS2sMessagingService = async function() {
 Crowi.prototype.setupSocketIoService = async function() {
   const SocketIoService = require('../service/socket-io');
   if (this.socketIoService == null) {
-    this.socketIoService = new SocketIoService(this.configManager);
+    this.socketIoService = new SocketIoService(this);
   }
 };
 

+ 14 - 6
src/server/service/socket-io.js

@@ -1,12 +1,16 @@
 const socketIo = require('socket.io');
+const expressSession = require('express-session');
+const passport = require('passport');
+const socketioSession = require('@kobalab/socket.io-session');
 
 /**
  * Serve socket.io for server-to-client messaging
  */
 class SocketIoService {
 
-  constructor(configManager) {
-    this.configManager = configManager;
+  constructor(crowi) {
+    this.crowi = crowi;
+    this.configManager = crowi.configManager;
 
     this.connectionsCount = 0;
     this.connectionsCountForAdmin = 0;
@@ -22,6 +26,12 @@ class SocketIoService {
       transports: ['websocket'],
     });
 
+    // setup passport session
+    const sessionMiddleware = socketioSession(expressSession(this.crowi.sessionConfig), passport);
+    this.io.use(sessionMiddleware.express_session);
+    this.io.use(sessionMiddleware.passport_initialize);
+    this.io.use(sessionMiddleware.passport_session);
+
     this.io.use(this.checkConnectionLimits.bind(this));
 
     // create namespace for admin
@@ -64,11 +74,9 @@ class SocketIoService {
 
     console.log('default', clients.length);
     console.log('admin', adminClients.length);
+    console.log('user', socket.request.user);
 
-    if (socket.request.headers.cookie) {
-      console.log('cookie exists');
-      next();
-    }
+    next();
     // next(new Error('Authentication error'));
   }
 

+ 5 - 0
yarn.lock

@@ -1673,6 +1673,11 @@
   resolved "https://registry.yarnpkg.com/@kaishuu0123/markdown-it-fence/-/markdown-it-fence-1.0.1.tgz#1ba7886c0474cc31707acd195f7b9073406b743d"
   integrity sha512-gQZ0a3JcrCi1g+00D9CIbo2uPc6lnykqAsVaCbew8jsrdyF0f0cBngYgFKcTxW2vliT5I3K4lwD4DhM6hXeOjg==
 
+"@kobalab/socket.io-session@^1.0.3":
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/@kobalab/socket.io-session/-/socket.io-session-1.0.3.tgz#87d55896bb48f57c57f26f0235bf53345a0a4615"
+  integrity sha512-pen2rqNuZUsR453EVM9owqDIbelFKa5gizyNM9hscphKrdPIYissNa9efddYSVBH24q7pknxS5kxbfSw/YYOMg==
+
 "@lykmapipo/common@>=0.34.2", "@lykmapipo/common@>=0.34.3":
   version "0.34.3"
   resolved "https://registry.yarnpkg.com/@lykmapipo/common/-/common-0.34.3.tgz#eb74fa4af14f2f1e59ddd42491f05ab69f96bd71"