mirror of https://github.com/Chocobozzz/PeerTube
Fix socket.io websocket connection
parent
43483d1296
commit
89ada4e26c
|
@ -6,6 +6,7 @@ import * as proxyAddr from 'proxy-addr'
|
||||||
import { Server as WebSocketServer } from 'ws'
|
import { Server as WebSocketServer } from 'ws'
|
||||||
import { CONFIG, TRACKER_RATE_LIMITS } from '../initializers/constants'
|
import { CONFIG, TRACKER_RATE_LIMITS } from '../initializers/constants'
|
||||||
import { VideoFileModel } from '../models/video/video-file'
|
import { VideoFileModel } from '../models/video/video-file'
|
||||||
|
import { parse } from 'url'
|
||||||
|
|
||||||
const TrackerServer = bitTorrentTracker.Server
|
const TrackerServer = bitTorrentTracker.Server
|
||||||
|
|
||||||
|
@ -61,14 +62,24 @@ trackerRouter.get('/tracker/scrape', (req, res) => onHttpRequest(req, res, { act
|
||||||
|
|
||||||
function createWebsocketTrackerServer (app: express.Application) {
|
function createWebsocketTrackerServer (app: express.Application) {
|
||||||
const server = http.createServer(app)
|
const server = http.createServer(app)
|
||||||
const wss = new WebSocketServer({ server: server, path: '/tracker/socket' })
|
const wss = new WebSocketServer({ noServer: true })
|
||||||
|
|
||||||
wss.on('connection', function (ws, req) {
|
wss.on('connection', function (ws, req) {
|
||||||
const ip = proxyAddr(req, CONFIG.TRUST_PROXY)
|
ws['ip'] = proxyAddr(req, CONFIG.TRUST_PROXY)
|
||||||
ws['ip'] = ip
|
|
||||||
|
|
||||||
trackerServer.onWebSocketConnection(ws)
|
trackerServer.onWebSocketConnection(ws)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
server.on('upgrade', (request, socket, head) => {
|
||||||
|
const pathname = parse(request.url).pathname
|
||||||
|
|
||||||
|
if (pathname === '/tracker/socket') {
|
||||||
|
wss.handleUpgrade(request, socket, head, ws => wss.emit('connection', ws, request))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't destroy socket, we have Socket.IO too
|
||||||
|
})
|
||||||
|
|
||||||
return server
|
return server
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ describe('Test AP refresher', function () {
|
||||||
let videoUUID3: string
|
let videoUUID3: string
|
||||||
|
|
||||||
before(async function () {
|
before(async function () {
|
||||||
this.timeout(30000)
|
this.timeout(60000)
|
||||||
|
|
||||||
servers = await flushAndRunMultipleServers(2)
|
servers = await flushAndRunMultipleServers(2)
|
||||||
|
|
||||||
|
|
|
@ -251,6 +251,7 @@ describe('Test emails', function () {
|
||||||
})
|
})
|
||||||
|
|
||||||
after(async function () {
|
after(async function () {
|
||||||
|
MockSmtpServer.Instance.kill()
|
||||||
killallServers([ server ])
|
killallServers([ server ])
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
import './users-verification'
|
||||||
|
import './user-notifications'
|
||||||
import './blocklist'
|
import './blocklist'
|
||||||
import './user-subscriptions'
|
import './user-subscriptions'
|
||||||
import './user-notifications'
|
|
||||||
import './users'
|
import './users'
|
||||||
import './users-multiple-servers'
|
import './users-multiple-servers'
|
||||||
import './users-verification'
|
|
||||||
|
|
|
@ -175,7 +175,7 @@ describe('Test users notifications', function () {
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should send a new video notification if the user follows the local video publisher', async function () {
|
it('Should send a new video notification if the user follows the local video publisher', async function () {
|
||||||
this.timeout(10000)
|
this.timeout(15000)
|
||||||
|
|
||||||
await addUserSubscription(servers[0].url, userAccessToken, 'root_channel@localhost:9001')
|
await addUserSubscription(servers[0].url, userAccessToken, 'root_channel@localhost:9001')
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
@ -1010,6 +1010,8 @@ describe('Test users notifications', function () {
|
||||||
})
|
})
|
||||||
|
|
||||||
after(async function () {
|
after(async function () {
|
||||||
|
MockSmtpServer.Instance.kill()
|
||||||
|
|
||||||
killallServers(servers)
|
killallServers(servers)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -4,7 +4,7 @@ import * as chai from 'chai'
|
||||||
import 'mocha'
|
import 'mocha'
|
||||||
import {
|
import {
|
||||||
registerUser, flushTests, getUserInformation, getMyUserInformation, killallServers,
|
registerUser, flushTests, getUserInformation, getMyUserInformation, killallServers,
|
||||||
userLogin, login, runServer, ServerInfo, verifyEmail, updateCustomSubConfig
|
userLogin, login, runServer, ServerInfo, verifyEmail, updateCustomSubConfig, wait
|
||||||
} from '../../../../shared/utils'
|
} from '../../../../shared/utils'
|
||||||
import { setAccessTokensToServers } from '../../../../shared/utils/users/login'
|
import { setAccessTokensToServers } from '../../../../shared/utils/users/login'
|
||||||
import { MockSmtpServer } from '../../../../shared/utils/miscs/email'
|
import { MockSmtpServer } from '../../../../shared/utils/miscs/email'
|
||||||
|
@ -123,6 +123,7 @@ describe('Test users account verification', function () {
|
||||||
})
|
})
|
||||||
|
|
||||||
after(async function () {
|
after(async function () {
|
||||||
|
MockSmtpServer.Instance.kill()
|
||||||
killallServers([ server ])
|
killallServers([ server ])
|
||||||
|
|
||||||
// Keep the logs if the test failed
|
// Keep the logs if the test failed
|
||||||
|
|
|
@ -1,22 +1,20 @@
|
||||||
import * as child from 'child_process'
|
import { fork, ChildProcess } from 'child_process'
|
||||||
|
|
||||||
class MockSmtpServer {
|
class MockSmtpServer {
|
||||||
|
|
||||||
private static instance: MockSmtpServer
|
private static instance: MockSmtpServer
|
||||||
private started = false
|
private started = false
|
||||||
private emailChildProcess: child.ChildProcess
|
private emailChildProcess: ChildProcess
|
||||||
private emails: object[]
|
private emails: object[]
|
||||||
|
|
||||||
private constructor () {
|
private constructor () {
|
||||||
this.emailChildProcess = child.fork(`${__dirname}/email-child-process`, [], { silent: true })
|
this.emailChildProcess = fork(`${__dirname}/email-child-process`, [])
|
||||||
|
|
||||||
this.emailChildProcess.on('message', (msg) => {
|
this.emailChildProcess.on('message', (msg) => {
|
||||||
if (msg.email) {
|
if (msg.email) {
|
||||||
return this.emails.push(msg.email)
|
return this.emails.push(msg.email)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
process.on('exit', () => {
|
|
||||||
this.emailChildProcess.kill()
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
collectEmails (emailsCollection: object[]) {
|
collectEmails (emailsCollection: object[]) {
|
||||||
|
@ -43,6 +41,13 @@ class MockSmtpServer {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kill () {
|
||||||
|
process.kill(this.emailChildProcess.pid)
|
||||||
|
|
||||||
|
this.emailChildProcess = null
|
||||||
|
MockSmtpServer.instance = null
|
||||||
|
}
|
||||||
|
|
||||||
static get Instance () {
|
static get Instance () {
|
||||||
return this.instance || (this.instance = new this())
|
return this.instance || (this.instance = new this())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue