X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Ftracker.ts;h=2ae1cf86c5d979225929685b5a65c81c980413af;hb=a22046d166805222ca76060e471b6cb3d419a32d;hp=8b77d9de77945f2f0582e8eabcf468aa5b49cb41;hpb=092092969633bbcf6d4891a083ea497a7d5c3154;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/tracker.ts b/server/controllers/tracker.ts index 8b77d9de7..2ae1cf86c 100644 --- a/server/controllers/tracker.ts +++ b/server/controllers/tracker.ts @@ -4,10 +4,11 @@ import * as http from 'http' import * as bitTorrentTracker from 'bittorrent-tracker' import * as proxyAddr from 'proxy-addr' import { Server as WebSocketServer } from 'ws' -import { CONFIG, TRACKER_RATE_LIMITS } from '../initializers/constants' +import { TRACKER_RATE_LIMITS } from '../initializers/constants' import { VideoFileModel } from '../models/video/video-file' import { parse } from 'url' import { VideoStreamingPlaylistModel } from '../models/video/video-streaming-playlist' +import { CONFIG } from '../initializers/config' const TrackerServer = bitTorrentTracker.Server @@ -23,6 +24,10 @@ const trackerServer = new TrackerServer({ ws: false, dht: false, filter: async function (infoHash, params, cb) { + if (CONFIG.TRACKER.ENABLED === false) { + return cb(new Error('Tracker is disabled on this instance.')) + } + let ip: string if (params.type === 'ws') { @@ -36,12 +41,14 @@ const trackerServer = new TrackerServer({ peersIps[ ip ] = peersIps[ ip ] ? peersIps[ ip ] + 1 : 1 peersIpInfoHash[ key ] = peersIpInfoHash[ key ] ? peersIpInfoHash[ key ] + 1 : 1 - if (peersIpInfoHash[ key ] > TRACKER_RATE_LIMITS.ANNOUNCES_PER_IP_PER_INFOHASH) { + if (CONFIG.TRACKER.REJECT_TOO_MANY_ANNOUNCES && peersIpInfoHash[ key ] > TRACKER_RATE_LIMITS.ANNOUNCES_PER_IP_PER_INFOHASH) { return cb(new Error(`Too many requests (${peersIpInfoHash[ key ]} of ip ${ip} for torrent ${infoHash}`)) } try { - const videoFileExists = await VideoFileModel.doesInfohashExist(infoHash) + if (CONFIG.TRACKER.PRIVATE === false) return cb() + + const videoFileExists = await VideoFileModel.doesInfohashExistCached(infoHash) if (videoFileExists === true) return cb() const playlistExists = await VideoStreamingPlaylistModel.doesInfohashExist(infoHash) @@ -55,13 +62,16 @@ const trackerServer = new TrackerServer({ } }) -trackerServer.on('error', function (err) { - logger.error('Error in tracker.', { err }) -}) +if (CONFIG.TRACKER.ENABLED !== false) { -trackerServer.on('warning', function (err) { - logger.warn('Warning in tracker.', { err }) -}) + trackerServer.on('error', function (err) { + logger.error('Error in tracker.', { err }) + }) + + trackerServer.on('warning', function (err) { + logger.warn('Warning in tracker.', { err }) + }) +} const onHttpRequest = trackerServer.onHttpRequest.bind(trackerServer) trackerRouter.get('/tracker/announce', (req, res) => onHttpRequest(req, res, { action: 'announce' }))