]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/lib/friends.js
Server: add endpoint in requests
[github/Chocobozzz/PeerTube.git] / server / lib / friends.js
index 6e1516b94a14ae09d07ea387f53e9264c6e82263..eafffaab01571676072e5eaa19a62c4a163654ba 100644 (file)
@@ -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
+}