Skip to content

Commit 098ec70

Browse files
committed
Merge branch 's1dd-master'
2 parents 474ce73 + 5507979 commit 098ec70

File tree

3 files changed

+70
-1
lines changed

3 files changed

+70
-1
lines changed

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,12 @@ var Server = require('bittorrent-tracker').Server
107107

108108
var server = new Server({
109109
udp: true, // enable udp server? [default=true]
110-
http: true // enable http server? [default=true]
110+
http: true, // enable http server? [default=true]
111+
filter: function (hash) {
112+
// specify white/blacklist for disallowing/allowing torrents
113+
return hash !== 'aaa67059ed6bd08362da625b3ae77f6f4a075aaa'
114+
})
115+
111116
})
112117

113118
server.on('error', function (err) {

server.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ function Server (opts) {
6666
self._udpSocket.on('listening', onListening)
6767
}
6868

69+
if (typeof opts.filter === 'function') self._filter = opts.filter
70+
6971
var num = !!self._httpServer + !!self._udpSocket
7072
function onListening () {
7173
num -= 1
@@ -120,6 +122,7 @@ Server.prototype.close = function (cb) {
120122
Server.prototype.getSwarm = function (infoHash) {
121123
var self = this
122124
if (Buffer.isBuffer(infoHash)) infoHash = infoHash.toString('hex')
125+
if (self._filter && self._filter(infoHash)) return null
123126
var swarm = self.torrents[infoHash]
124127
if (!swarm) swarm = self.torrents[infoHash] = new Swarm(infoHash, this)
125128
return swarm
@@ -201,6 +204,7 @@ Server.prototype._onRequest = function (params, cb) {
201204
Server.prototype._onAnnounce = function (params, cb) {
202205
var self = this
203206
var swarm = self.getSwarm(params.info_hash)
207+
if (swarm === null) return cb(new Error('invalid hash'))
204208
swarm.announce(params, function (err, response) {
205209
if (response) {
206210
if (!response.action) response.action = common.ACTIONS.ANNOUNCE

test/scrape.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,3 +169,63 @@ test('server: all info_hash scrape', function (t) {
169169
})
170170
})
171171
})
172+
173+
test('http nonwhitelisted torrent does not appear in scrape', function (t) {
174+
var server = new Server({
175+
filter: function (hash) {
176+
return hash !== parsedBitlove
177+
},
178+
udp: false
179+
})
180+
181+
server.on('error', function (err) {
182+
t.error(err)
183+
})
184+
185+
portfinder.getPort(function (err, port) {
186+
t.error(err)
187+
server.listen(port)
188+
var announceUrl = 'http://127.0.0.1:' + port + '/announce'
189+
var scrapeUrl = 'http://127.0.0.1:' + port + '/scrape'
190+
191+
parsedBitlove.announce = [ announceUrl ]
192+
193+
server.once('listening', function () {
194+
var client = new Client(peerId, port, parsedBitlove)
195+
196+
client.start()
197+
198+
client.on('error', function (err) {
199+
t.error(err)
200+
})
201+
202+
server.once('warning', function (err) {
203+
if (err) {
204+
get.concat(scrapeUrl, function (err, data, res) {
205+
if (err) throw err
206+
207+
t.equal(res.statusCode, 200)
208+
data = bencode.decode(data)
209+
t.ok(data.files)
210+
211+
t.notOk(data.files[binaryBitlove])
212+
213+
client.stop()
214+
server.close(function () {
215+
t.end()
216+
})
217+
})
218+
}
219+
})
220+
221+
server.once('start', function (err) {
222+
if (err) throw err
223+
client.stop()
224+
server.close(function () {
225+
t.fail('server should have thrown an error; filter condition was probably successful')
226+
t.end()
227+
})
228+
})
229+
})
230+
})
231+
})

0 commit comments

Comments
 (0)