|
|
@@ -26,16 +26,13 @@ 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
|
|
|
this.adminNamespace = this.io.of('/admin');
|
|
|
+
|
|
|
+ this.setupSessionMiddleware();
|
|
|
+ this.setupLoginRequiredMiddleware();
|
|
|
+ this.setupAdminRequiredMiddleware();
|
|
|
+ this.setupCheckConnectionLimitsMiddleware();
|
|
|
}
|
|
|
|
|
|
getDefaultSocket() {
|
|
|
@@ -53,6 +50,39 @@ class SocketIoService {
|
|
|
return this.adminNamespace;
|
|
|
}
|
|
|
|
|
|
+ setupSessionMiddleware() {
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+
|
|
|
+ setupLoginRequiredMiddleware() {
|
|
|
+ const loginRequired = require('../middlewares/login-required')(this.crowi, true, (req, res) => {
|
|
|
+ throw new Error('Login is required to connect.');
|
|
|
+ });
|
|
|
+
|
|
|
+ // convert Connect/Express middleware to Socket.io middleware
|
|
|
+ this.io.use((socket, next) => {
|
|
|
+ loginRequired(socket.request, {}, next);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ setupAdminRequiredMiddleware() {
|
|
|
+ const adminRequired = require('../middlewares/admin-required')(this.crowi, (req, res) => {
|
|
|
+ throw new Error('Admin priviledge is required to connect.');
|
|
|
+ });
|
|
|
+
|
|
|
+ // convert Connect/Express middleware to Socket.io middleware
|
|
|
+ this.getAdminSocket().use((socket, next) => {
|
|
|
+ adminRequired(socket.request, {}, next);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ setupCheckConnectionLimitsMiddleware() {
|
|
|
+ this.io.use(this.checkConnectionLimits.bind(this));
|
|
|
+ }
|
|
|
+
|
|
|
async getClients(namespace) {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
namespace.clients((error, clients) => {
|