]>
git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - src/pods.js
5 var config
= require('config')
6 var async
= require('async')
7 var request
= require('request')
9 var logger
= require('./logger')
10 var utils
= require('./utils')
11 var PodsDB
= require('./database').PodsDB
14 var http
= config
.get('webserver.https') ? 'https' : 'http'
15 var host
= config
.get('webserver.host')
16 var port
= config
.get('webserver.port')
18 // ----------- Private functions -----------
20 function getForeignPodsList (url
, callback
) {
21 var path
= '/api/pods'
23 request
.get(url
+ path
, function (err
, response
, body
) {
25 callback(JSON
.parse(body
))
29 // ----------- Public functions -----------
30 pods
.list = function (callback
) {
31 PodsDB
.find(function (err
, pods_list
) {
33 logger
.error('Cannot get the list of the pods.', { error: err
})
37 return callback(null, pods_list
)
42 pods
.add = function (data
, callback
) {
43 logger
.info('Adding pod: %s', data
.url
)
47 publicKey: data
.publicKey
50 PodsDB
.create(params
, function (err
, pod
) {
52 logger
.error('Cannot insert the pod.', { error: err
})
56 fs
.readFile(utils
.certDir
+ 'peertube.pub', 'utf8', function (err
, cert
) {
58 logger
.error('Cannot read cert file.', { error: err
})
62 return callback(null, { cert: cert
})
68 pods
.makeSecureRequest = function (data
, callback
) {
69 PodsDB
.find({}, { url: 1, publicKey: 1 }).exec(function (err
, urls
) {
71 logger
.error('Cannot get the list of the pods.', { error: err
})
75 logger
.debug('Make multiple requests.')
76 utils
.makeMultipleRetryRequest(
77 { encrypt: true, sign: true, method: data
.method
, path: data
.path
, data: data
.data
},
81 function (err
, response
, body
, url
) {
82 if (err
|| response
.statusCode
!== 200) {
83 logger
.error('Error sending secure request to %s/%s pod.', url
, data
.path
, { error: err
})
89 logger
.error('There was some errors when sending the video meta data.', { error: err
})
93 logger
.debug('Finished')
100 pods
.makeFriends = function (callback
) {
101 logger
.debug('Read public key...')
102 fs
.readFile(utils
.certDir
+ 'peertube.pub', 'utf8', function (err
, cert
) {
104 logger
.error('Cannot read public cert.', { error: err
})
108 var urls
= config
.get('network.friends')
111 async
.each(urls
, function (url
, callback
) {
112 // Always add a trust pod
113 pods_score
[url
] = Infinity
115 getForeignPodsList(url
, function (foreign_pods_list
) {
116 if (foreign_pods_list
.length
=== 0) return callback()
118 async
.each(foreign_pods_list
, function (foreign_pod
, callback
) {
119 var foreign_url
= foreign_pod
.url
120 if (pods_score
[foreign_url
]) pods_score
[foreign_url
]++
121 else pods_score
[foreign_url
] = 1
126 logger
.debug('Pods score', { pods_score: pods_score
})
128 // Build the list of pods to add
129 // Only add a pod if it exists in more than a half base pods
131 var base_score
= urls
.length
/ 2
132 Object
.keys(pods_score
).forEach(function (pod
) {
133 if (pods_score
[pod
] > base_score
) pods_list
.push({ url: pod
})
136 logger
.debug('Pods that we keep', { pods: pods_list
})
139 url: http
+ '://' + host
+ ':' + port
,
143 logger
.debug('Make requests...')
145 utils
.makeMultipleRetryRequest(
146 { method: 'POST', path: '/api/pods/', data: data
},
150 function eachRequest (err
, response
, body
, url
) {
151 if (!err
&& response
.statusCode
=== 200) {
152 pods
.add({ url: url
, publicKey: body
.cert
}, function (err
) {
154 logger
.error('Error with adding %s pod.', url
, { error: err
})
158 logger
.error('Error with adding %s pod.', url
)
162 function endRequests (err
) {
164 logger
.error('There was some errors when we wanted to make friends.', { error: err
})
168 logger
.debug('Finished')
176 module
.exports
= pods