79 lines
2.3 KiB
JavaScript
79 lines
2.3 KiB
JavaScript
const DHT = require('bittorrent-dht')
|
|
const magnet = require('magnet-uri')
|
|
const sha1 = require('sha1')
|
|
const fetchMetadata = require('bep9-metadata-dl')
|
|
const bencode = require('bencode')
|
|
var fs = require('fs')
|
|
|
|
var magnetFolder = process.argv[2];
|
|
var torrentFolder = process.argv[3];
|
|
|
|
//var uri = 'magnet:?xt=urn:btih:e3811b9539cacff680e418124272177c47477157'
|
|
//var parsed = magnet(uri)
|
|
|
|
//console.log(parsed.infoHash) // 'e3811b9539cacff680e418124272177c47477157'
|
|
|
|
const dht = new DHT({
|
|
nodeId: sha1("AnimarrDHTNode"), // 160-bit DHT node ID (Buffer or hex string, default: randomly generated)
|
|
bootstrap: [
|
|
"router.bittorrent.com:6881",
|
|
"router.utorrent.com:6881",
|
|
"router.bitcomet.com:6881",
|
|
"dht.aelitis.com:6881",
|
|
"dht.transmissionbt.com:6881",
|
|
"dht.libtorrent.org:25401"
|
|
],
|
|
host: false,
|
|
concurrency: 200
|
|
})
|
|
|
|
dht.listen(function () {
|
|
console.log('[MagnetService] DHT node started!')
|
|
dht.on('ready', function () {
|
|
console.log('[MagnetService] Bootstrap completed')
|
|
})
|
|
})
|
|
|
|
dht.on('peer', function (peer, infoHash, from) {
|
|
//console.log('found potential peer ' + peer.host + ':' + peer.port + ' through ' + from.address + ':' + from.port + ' for ' + infoHash.toString('hex'))
|
|
})
|
|
|
|
|
|
updateFunction = function(){
|
|
fs.readdir(magnetFolder, function(err, files){
|
|
if(err){
|
|
return;
|
|
}
|
|
|
|
files.forEach( function( file, index ) {
|
|
if(file.charAt(0) == "."){
|
|
return;
|
|
}
|
|
|
|
var magnetFile = magnetFolder + "/" + file;
|
|
var magnetContents = fs.readFileSync(magnetFile).toString();
|
|
var parsed = magnet(magnetContents);
|
|
//console.log('[MagnetService] Added ' + parsed.infoHash);
|
|
|
|
fs.unlinkSync(magnetFile);
|
|
|
|
fetchMetadata(parsed.infoHash, { maxConns: 200, fetchTimeout: 30000, socketTimeout: 5000, dht}).then(metadata => {
|
|
var contents = bencode.encode(metadata);
|
|
var infoContents = bencode.encode(metadata.info);
|
|
var hash = sha1(infoContents).toUpperCase();
|
|
console.log('[MagnetService] Fetched ' + hash + ' (' + metadata.info.name + ')!');
|
|
fs.writeFile(torrentFolder + "/" + hash + ".torrent", contents, function(err) {});
|
|
}).catch(err => {
|
|
|
|
});
|
|
} );
|
|
});
|
|
};
|
|
|
|
setInterval(updateFunction, 10000)
|
|
|
|
updateFunction();
|
|
|
|
|
|
|