feat(p2p): bootstrap peers

This commit is contained in:
Alexey Kasyanchuk 2018-03-10 00:06:56 +03:00
parent c7a217ec37
commit 10d0a2fbc0
3 changed files with 75 additions and 10 deletions

View File

@ -66,6 +66,15 @@ export default class AdminPage extends Page {
this.forceUpdate()
}}
/>
<Toggle
style={{marginTop: '10px'}}
label="Enabled bootstrap peers"
toggled={this.options.p2pBootstrap}
onToggle={(e, checked) => {
this.options.p2pBootstrap = checked
this.forceUpdate()
}}
/>
<div className='column w100p'>
<div className='row inline w100p'>
<div style={{flex: 1}}>Scanning port</div>

View File

@ -12,6 +12,7 @@ let config = {
p2p: true,
p2pConnections: 10,
p2pBootstrap: true,
upnp: true,

View File

@ -8,9 +8,10 @@ const crypto = require('crypto')
const P2PServer = require('./p2p')
const stun = require('stun')
const natUpnp = require('nat-upnp');
const http = require('https')
//var express = require('express');
//var app = express();
//var server = require('http').Server(app);
//var server = http.Server(app);
//var io = require('socket.io')(server);
//var sm = require('sitemap');
//var phantomjs = require('phantomjs-prebuilt')
@ -270,6 +271,32 @@ if(dataDirectory && fs.existsSync(dataDirectory + '/peers.p2p'))
console.log('loaded', peers.length, 'peers')
}
}
if(config.p2pBootstrap)
{
http.get('https://api.myjson.com/bins/1e5rmh', (resp) => {
let data = '';
resp.on('data', (chunk) => {
data += chunk;
});
resp.on('end', () => {
const json = JSON.parse(data)
if(json.bootstrap)
{
const peers = encryptor.decrypt(json.bootstrap)
if(peers && peers.length > 0)
{
peers.forEach(peer => p2p.add(peer))
console.log('loaded', peers.length, 'peers from bootstrap')
}
}
});
}).on("error", (err) => {
console.log("Error: " + err.message);
});
}
//io.on('connection', function(socket)
//{
@ -1251,14 +1278,7 @@ this.stop = (callback) => {
if(upnp)
upnp.ratsUnmap()
// safe future peers
if(dataDirectory)
{
const peersEncripted = encryptor.encrypt(p2p.addresses(p2p.peersList()))
fs.writeFileSync(dataDirectory + '/peers.p2p', peersEncripted, 'utf8');
console.log('peers saved')
}
const close = () => {
torrentClient.destroy(() => {
sphinx.end(() => spider.close(() => {
mysqlSingle.destroy()
@ -1267,6 +1287,41 @@ this.stop = (callback) => {
}))
})
}
// safe future peers
if(dataDirectory)
{
const addresses = p2p.addresses(p2p.peersList())
const peersEncripted = encryptor.encrypt(addresses)
fs.writeFileSync(dataDirectory + '/peers.p2p', peersEncripted, 'utf8');
console.log('peers saved')
if(config.p2pBootstrap && addresses.length > 5)
{
const options = {
port: 443,
host: 'api.myjson.com',
method: 'PUT',
path: '/bins/1e5rmh',
headers: {
'Content-Type' : "application/json",
}
};
console.log('save bootstrap peers')
const req = http.request(options, close);
req.on('error', close)
req.end(JSON.stringify({bootstrap: peersEncripted}))
}
else
{
close()
}
}
else
{
close()
}
}
return this
}