X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=sidebyside;f=server%2Flib%2Ffriends.js;h=eafffaab01571676072e5eaa19a62c4a163654ba;hb=4b08096b2c58f801e5aad19e38d24ec59dd3e14e;hp=6e1516b94a14ae09d07ea387f53e9264c6e82263;hpb=1a42c9e2c0fb64cdbebd81b311736e752f591e0a;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/friends.js b/server/lib/friends.js index 6e1516b94..eafffaab0 100644 --- a/server/lib/friends.js +++ b/server/lib/friends.js @@ -1,38 +1,34 @@ 'use strict' -const config = require('config') const each = require('async/each') const eachLimit = require('async/eachLimit') const eachSeries = require('async/eachSeries') const fs = require('fs') const mongoose = require('mongoose') const request = require('request') +const urlUtil = require('url') const waterfall = require('async/waterfall') const constants = require('../initializers/constants') const logger = require('../helpers/logger') -const peertubeCrypto = require('../helpers/peertube-crypto') const requests = require('../helpers/requests') -const http = config.get('webserver.https') ? 'https' : 'http' -const host = config.get('webserver.host') -const port = config.get('webserver.port') const Pod = mongoose.model('Pod') const Request = mongoose.model('Request') const Video = mongoose.model('Video') const friends = { - addVideoToFriends: addVideoToFriends, - hasFriends: hasFriends, - getMyCertificate: getMyCertificate, - makeFriends: makeFriends, - quitFriends: quitFriends, - removeVideoToFriends: removeVideoToFriends, - sendOwnedVideosToPod: sendOwnedVideosToPod + addVideoToFriends, + hasFriends, + getMyCertificate, + makeFriends, + quitFriends, + removeVideoToFriends, + sendOwnedVideosToPod } function addVideoToFriends (video) { - createRequest('add', video) + createRequest('add', constants.REQUEST_ENDPOINTS.VIDEOS, video) } function hasFriends (callback) { @@ -45,10 +41,10 @@ function hasFriends (callback) { } function getMyCertificate (callback) { - fs.readFile(peertubeCrypto.getCertDir() + 'peertube.pub', 'utf8', callback) + fs.readFile(constants.CONFIG.STORAGE.CERT_DIR + 'peertube.pub', 'utf8', callback) } -function makeFriends (callback) { +function makeFriends (urls, callback) { const podsScore = {} logger.info('Make friends!') @@ -58,8 +54,6 @@ function makeFriends (callback) { return callback(err) } - const urls = config.get('network.friends') - eachSeries(urls, function (url, callbackEach) { computeForeignPodsList(url, podsScore, callbackEach) }, function (err) { @@ -104,25 +98,13 @@ function quitFriends (callback) { // Don't stop the process } - return callbackAsync() - }) - }, - - function removePodsFromDB (callbackAsync) { - Pod.removeAll(function (err) { - return callbackAsync(err) + return callbackAsync(null, pods) }) }, - function listRemoteVideos (callbackAsync) { - logger.info('Broke friends, so sad :(') - - Video.listRemotes(callbackAsync) - }, - - function removeTheRemoteVideos (videosList, callbackAsync) { - each(videosList, function (video, callbackEach) { - video.remove(callbackEach) + function removePodsFromDB (pods, callbackAsync) { + each(pods, function (pod, callbackEach) { + pod.remove(callbackEach) }, callbackAsync) } ], function (err) { @@ -137,7 +119,7 @@ function quitFriends (callback) { } function removeVideoToFriends (videoParams) { - createRequest('remove', videoParams) + createRequest('remove', constants.REQUEST_ENDPOINTS.VIDEOS, videoParams) } function sendOwnedVideosToPod (podId) { @@ -155,7 +137,7 @@ function sendOwnedVideosToPod (podId) { return } - createRequest('add', remoteVideo, [ podId ]) + createRequest('add', constants.REQUEST_ENDPOINTS.VIDEOS, remoteVideo, [ podId ]) }) }) }) @@ -192,8 +174,11 @@ function computeWinningPods (urls, podsScore) { // Only add a pod if it exists in more than a half base pods const podsList = [] const baseScore = urls.length / 2 - Object.keys(podsScore).forEach(function (pod) { - if (podsScore[pod] > baseScore) podsList.push({ url: pod }) + Object.keys(podsScore).forEach(function (podUrl) { + // If the pod is not me and with a good score we add it + if (isMe(podUrl) === false && podsScore[podUrl] > baseScore) { + podsList.push({ url: podUrl }) + } }) return podsList @@ -205,7 +190,12 @@ function getForeignPodsList (url, callback) { request.get(url + path, function (err, response, body) { if (err) return callback(err) - callback(null, JSON.parse(body)) + try { + const json = JSON.parse(body) + return callback(null, json) + } catch (err) { + return callback(err) + } }) } @@ -220,7 +210,7 @@ function makeRequestsToWinningPods (cert, podsList, callback) { url: pod.url + '/api/' + constants.API_VERSION + '/pods/', method: 'POST', json: { - url: http + '://' + host + ':' + port, + url: constants.CONFIG.WEBSERVER.URL, publicKey: cert } } @@ -260,8 +250,9 @@ function makeRequestsToWinningPods (cert, podsList, callback) { }) } -function createRequest (type, data, to) { +function createRequest (type, endpoint, data, to) { const req = new Request({ + endpoint, request: { type: type, data: data @@ -276,3 +267,15 @@ function createRequest (type, data, to) { if (err) logger.error('Cannot save the request.', { error: err }) }) } + +function isMe (url) { + const parsedUrl = urlUtil.parse(url) + + const hostname = parsedUrl.hostname + const port = parseInt(parsedUrl.port) + + const myHostname = constants.CONFIG.WEBSERVER.HOSTNAME + const myPort = constants.CONFIG.WEBSERVER.PORT + + return hostname === myHostname && port === myPort +}