mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-05-05 14:47:12 -04:00
fix: socket transports
This commit is contained in:
parent
d8d96e1c86
commit
6764409448
3 changed files with 29 additions and 58 deletions
|
@ -969,6 +969,7 @@ const handleClientReady = async (socket:any, message: typeof ChatMessage) => {
|
||||||
rev: pad.getHeadRevisionNumber(),
|
rev: pad.getHeadRevisionNumber(),
|
||||||
time: currentTime,
|
time: currentTime,
|
||||||
},
|
},
|
||||||
|
socketTransportProtocols: settings.socketTransportProtocols,
|
||||||
colorPalette: authorManager.getColorPalette(),
|
colorPalette: authorManager.getColorPalette(),
|
||||||
clientIp: '127.0.0.1',
|
clientIp: '127.0.0.1',
|
||||||
userColor: authorColorId,
|
userColor: authorColorId,
|
||||||
|
|
|
@ -7,11 +7,7 @@ const express = require('../express');
|
||||||
const log4js = require('log4js');
|
const log4js = require('log4js');
|
||||||
const proxyaddr = require('proxy-addr');
|
const proxyaddr = require('proxy-addr');
|
||||||
const settings = require('../../utils/Settings');
|
const settings = require('../../utils/Settings');
|
||||||
<<<<<<< HEAD
|
|
||||||
import {Server} from 'socket.io'
|
import {Server} from 'socket.io'
|
||||||
=======
|
|
||||||
const {Server} = require('socket.io');
|
|
||||||
>>>>>>> 53a847ce4 (feat :migrate socket.io 2 -> 3)
|
|
||||||
const socketIORouter = require('../../handler/SocketIORouter');
|
const socketIORouter = require('../../handler/SocketIORouter');
|
||||||
const hooks = require('../../../static/js/pluginfw/hooks');
|
const hooks = require('../../../static/js/pluginfw/hooks');
|
||||||
const padMessageHandler = require('../../handler/PadMessageHandler');
|
const padMessageHandler = require('../../handler/PadMessageHandler');
|
||||||
|
@ -52,15 +48,7 @@ exports.expressCloseServer = async () => {
|
||||||
logger.info('All socket.io clients have disconnected');
|
logger.info('All socket.io clients have disconnected');
|
||||||
};
|
};
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
<<<<<<< HEAD
|
|
||||||
exports.socketSessionMiddleware = (args: any) => (socket: any, next: Function) => {
|
exports.socketSessionMiddleware = (args: any) => (socket: any, next: Function) => {
|
||||||
=======
|
|
||||||
exports.socketSessionMiddleware = (socket: any, next: Function) => {
|
|
||||||
>>>>>>> 53a847ce4 (feat :migrate socket.io 2 -> 3)
|
|
||||||
=======
|
|
||||||
exports.socketSessionMiddleware = (args: any) => (socket: any, next: Function) => {
|
|
||||||
>>>>>>> 152f0a1ab (fix: ts error)
|
|
||||||
const req = socket.request;
|
const req = socket.request;
|
||||||
// Express sets req.ip but socket.io does not. Replicate Express's behavior here.
|
// Express sets req.ip but socket.io does not. Replicate Express's behavior here.
|
||||||
if (req.ip == null) {
|
if (req.ip == null) {
|
||||||
|
@ -71,23 +59,9 @@ exports.socketSessionMiddleware = (args: any) => (socket: any, next: Function) =
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!req.headers.cookie) {
|
if (!req.headers.cookie) {
|
||||||
<<<<<<< HEAD
|
|
||||||
<<<<<<< HEAD
|
|
||||||
// socketio.js-client on node.js doesn't support cookies, so pass them via a query parameter.
|
// socketio.js-client on node.js doesn't support cookies, so pass them via a query parameter.
|
||||||
req.headers.cookie = socket.handshake.query.cookie;
|
req.headers.cookie = socket.handshake.query.cookie;
|
||||||
}
|
}
|
||||||
=======
|
|
||||||
// socketio.js-client on node.js doesn't support cookies (see https://git.io/JU8u9), so the
|
|
||||||
// token and express_sid cookies have to be passed via a query parameter for unit tests.
|
|
||||||
req.headers.cookie = socket.handshake.query.cookie;
|
|
||||||
}
|
|
||||||
// See: https://socket.io/docs/faq/#Usage-with-express-session
|
|
||||||
>>>>>>> 53a847ce4 (feat :migrate socket.io 2 -> 3)
|
|
||||||
=======
|
|
||||||
// socketio.js-client on node.js doesn't support cookies, so pass them via a query parameter.
|
|
||||||
req.headers.cookie = socket.handshake.query.cookie;
|
|
||||||
}
|
|
||||||
>>>>>>> 152f0a1ab (fix: ts error)
|
|
||||||
express.sessionMiddleware(req, {}, next);
|
express.sessionMiddleware(req, {}, next);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -96,15 +70,15 @@ exports.expressCreateServer = (hookName:string, args:ArgsExpressType, cb:Functio
|
||||||
// there shouldn't be a browser that isn't compatible to all
|
// there shouldn't be a browser that isn't compatible to all
|
||||||
// transports in this list at once
|
// transports in this list at once
|
||||||
// e.g. XHR is disabled in IE by default, so in IE it should use jsonp-polling
|
// e.g. XHR is disabled in IE by default, so in IE it should use jsonp-polling
|
||||||
io = new Server(args.server, {
|
io = new Server({
|
||||||
transports: settings.socketTransportProtocols,
|
transports: settings.socketTransportProtocols,
|
||||||
})
|
})
|
||||||
|
|
||||||
<<<<<<< HEAD
|
io.attach(args.server, {
|
||||||
function handleConnection() {
|
cookie: false,
|
||||||
return (socket: any) => {
|
maxHttpBufferSize: settings.socketIo.maxHttpBufferSize,
|
||||||
sockets.add(socket);
|
});
|
||||||
=======
|
|
||||||
io.on('connection', (socket:any) => {
|
io.on('connection', (socket:any) => {
|
||||||
sockets.add(socket);
|
sockets.add(socket);
|
||||||
socketsEvents.emit('updated');
|
socketsEvents.emit('updated');
|
||||||
|
@ -114,35 +88,12 @@ exports.expressCreateServer = (hookName:string, args:ArgsExpressType, cb:Functio
|
||||||
session.save();
|
session.save();
|
||||||
socket.on('disconnect', () => {
|
socket.on('disconnect', () => {
|
||||||
sockets.delete(socket);
|
sockets.delete(socket);
|
||||||
>>>>>>> 53a847ce4 (feat :migrate socket.io 2 -> 3)
|
|
||||||
socketsEvents.emit('updated');
|
|
||||||
// https://socket.io/docs/v3/faq/index.html
|
|
||||||
const session = socket.request.session;
|
|
||||||
session.connections++;
|
|
||||||
session.save();
|
|
||||||
socket.on('disconnect', () => {
|
|
||||||
sockets.delete(socket);
|
|
||||||
socketsEvents.emit('updated');
|
socketsEvents.emit('updated');
|
||||||
});
|
});
|
||||||
};
|
});
|
||||||
}
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
<<<<<<< HEAD
|
|
||||||
io.on('connection', handleConnection);
|
|
||||||
|
|
||||||
io.use(exports.socketSessionMiddleware(args));
|
io.use(exports.socketSessionMiddleware(args));
|
||||||
|
|
||||||
// Temporary workaround so all clients go through middleware and handle connection
|
|
||||||
io.of('/pluginfw/installer').use(exports.socketSessionMiddleware(args))
|
|
||||||
io.of('/settings').use(exports.socketSessionMiddleware(args))
|
|
||||||
=======
|
|
||||||
io.use(exports.socketSessionMiddleware);
|
|
||||||
>>>>>>> 53a847ce4 (feat :migrate socket.io 2 -> 3)
|
|
||||||
=======
|
|
||||||
io.use(exports.socketSessionMiddleware(args));
|
|
||||||
>>>>>>> 152f0a1ab (fix: ts error)
|
|
||||||
|
|
||||||
io.use((socket:any, next:Function) => {
|
io.use((socket:any, next:Function) => {
|
||||||
socket.conn.on('packet', (packet:string) => {
|
socket.conn.on('packet', (packet:string) => {
|
||||||
// Tell express-session that the session is still active. The session store can use these
|
// Tell express-session that the session is still active. The session store can use these
|
||||||
|
|
|
@ -19,7 +19,26 @@ const connect = (etherpadBaseUrl, namespace = '/', options = {}) => {
|
||||||
const baseUrl = new URL(etherpadBaseUrl, window.location);
|
const baseUrl = new URL(etherpadBaseUrl, window.location);
|
||||||
const socketioUrl = new URL('socket.io', baseUrl);
|
const socketioUrl = new URL('socket.io', baseUrl);
|
||||||
const namespaceUrl = new URL(namespace, new URL('/', baseUrl));
|
const namespaceUrl = new URL(namespace, new URL('/', baseUrl));
|
||||||
return io(namespaceUrl.href, Object.assign({path: socketioUrl.pathname}, options));
|
|
||||||
|
let socketOptions = {
|
||||||
|
...options,
|
||||||
|
path: socketioUrl.pathname,
|
||||||
|
upgrade: true,
|
||||||
|
transports: ["websocket"]
|
||||||
|
}
|
||||||
|
socketOptions = Object.assign(socketOptions, options);
|
||||||
|
|
||||||
|
const socket = io(namespaceUrl.href, socketOptions);
|
||||||
|
|
||||||
|
socket.on('connect_error', (error) => {
|
||||||
|
if (socket.io.engine.transports.indexOf('polling') === -1) {
|
||||||
|
console.log('WebSocket connection failed. Falling back to long-polling.');
|
||||||
|
socket.io.opts.transports = ['polling']; // Add polling transport
|
||||||
|
socket.io.engine.upgrade = false; // Disable further upgrades
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return socket;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (typeof exports === 'object') {
|
if (typeof exports === 'object') {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue