]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/controllers/api/v1/pods.js
Server: add pod created date and score to the list controller
[github/Chocobozzz/PeerTube.git] / server / controllers / api / v1 / pods.js
index d08b7860d74b0d90bc502769dc556e4cc9e4abee..2bdfe0c923b6c623cef73a8ae90facf4d9a8eab3 100644 (file)
@@ -1,26 +1,37 @@
 'use strict'
 
+const each = require('async/each')
 const express = require('express')
+const mongoose = require('mongoose')
+const waterfall = require('async/waterfall')
 
 const logger = require('../../../helpers/logger')
 const friends = require('../../../lib/friends')
-const middleware = require('../../../middlewares')
-const cacheMiddleware = middleware.cache
-const Pods = require('../../../models/pods')
-const reqValidator = middleware.reqValidators.pods
-const secureMiddleware = middleware.secure
-const secureRequest = middleware.reqValidators.remote.secureRequest
-const videos = require('../../../lib/videos')
-const Videos = require('../../../models/videos')
+const middlewares = require('../../../middlewares')
+const admin = middlewares.admin
+const oAuth = middlewares.oauth
+const validators = middlewares.validators.pods
+const signatureValidator = middlewares.validators.remote.signature
 
 const router = express.Router()
-
-router.get('/', cacheMiddleware.cache(false), listPods)
-router.post('/', reqValidator.podsAdd, cacheMiddleware.cache(false), addPods)
-router.get('/makefriends', reqValidator.makeFriends, cacheMiddleware.cache(false), makeFriends)
-router.get('/quitfriends', cacheMiddleware.cache(false), quitFriends)
+const Pod = mongoose.model('Pod')
+const Video = mongoose.model('Video')
+
+router.get('/', listPods)
+router.post('/', validators.podsAdd, addPods)
+router.post('/makefriends',
+  oAuth.authenticate,
+  admin.ensureIsAdmin,
+  validators.makeFriends,
+  makeFriends
+)
+router.get('/quitfriends',
+  oAuth.authenticate,
+  admin.ensureIsAdmin,
+  quitFriends
+)
 // Post because this is a secured request
-router.post('/remove', secureRequest, secureMiddleware.decryptBody, removePods)
+router.post('/remove', signatureValidator, removePods)
 
 // ---------------------------------------------------------------------------
 
@@ -29,69 +40,98 @@ module.exports = router
 // ---------------------------------------------------------------------------
 
 function addPods (req, res, next) {
-  const informations = req.body.data
-  Pods.add(informations, function (err) {
-    if (err) return next(err)
+  const informations = req.body
+
+  waterfall([
+    function addPod (callback) {
+      const pod = new Pod(informations)
+      pod.save(function (err, podCreated) {
+        // Be sure about the number of parameters for the callback
+        return callback(err, podCreated)
+      })
+    },
 
-    // Create the remote videos from the new pod
-    videos.createRemoteVideos(informations.videos, function (err) {
-      if (err) logger.error('Cannot create remote videos.', { error: err })
-    })
+    function sendMyVideos (podCreated, callback) {
+      friends.sendOwnedVideosToPod(podCreated._id)
 
-    friends.getMyCertificate(function (err, cert) {
-      if (err) {
-        logger.error('Cannot read cert file.')
-        return next(err)
-      }
+      callback(null)
+    },
 
-      Videos.listOwned(function (err, videos_list) {
+    function fetchMyCertificate (callback) {
+      friends.getMyCertificate(function (err, cert) {
         if (err) {
-          logger.error('Cannot get the list of owned videos.')
-          return next(err)
+          logger.error('Cannot read cert file.')
+          return callback(err)
         }
 
-        res.json({ cert: cert, videos: videos_list })
+        return callback(null, cert)
       })
-    })
+    }
+  ], function (err, cert) {
+    if (err) return next(err)
+
+    return res.json({ cert: cert })
   })
 }
 
 function listPods (req, res, next) {
-  Pods.list(function (err, pods_list) {
+  Pod.list(function (err, podsUrlList) {
     if (err) return next(err)
 
-    res.json(pods_list)
+    res.json(getFormatedPods(podsUrlList))
   })
 }
 
 function makeFriends (req, res, next) {
-  friends.makeFriends(function (err) {
-    if (err) return next(err)
+  const urls = req.body.urls
 
-    res.type('json').status(204).end()
+  friends.makeFriends(urls, function (err) {
+    if (err) {
+      logger.error('Could not make friends.', { error: err })
+      return
+    }
+
+    logger.info('Made friends!')
   })
+
+  res.type('json').status(204).end()
 }
 
 function removePods (req, res, next) {
   const url = req.body.signature.url
-  Pods.remove(url, function (err) {
-    if (err) return next(err)
 
-    Videos.listFromUrl(url, function (err, videos_list) {
-      if (err) {
-        logger.error('Cannot list videos from url.', { error: err })
-        next(err)
-      }
+  waterfall([
+    function loadPod (callback) {
+      Pod.loadByUrl(url, callback)
+    },
 
-      videos.removeRemoteVideos(videos_list, function (err) {
+    function removePod (pod, callback) {
+      pod.remove(function (err) {
+        // Be sure we only return one argument in the callback
+        return callback(err)
+      })
+    },
+
+    function (callback) {
+      Video.listByUrls([ url ], function (err, videosList) {
         if (err) {
-          logger.error('Cannot remove remote videos.', { error: err })
-          next(err)
+          logger.error('Cannot list videos from url.', { error: err })
+          return callback(err)
         }
 
-        res.type('json').status(204).end()
+        return callback(null, videosList)
       })
-    })
+    },
+
+    function removeTheRemoteVideos (videosList, callback) {
+      each(videosList, function (video, callbackEach) {
+        video.remove(callbackEach)
+      }, callback)
+    }
+  ], function (err) {
+    if (err) return next(err)
+
+    return res.type('json').status(204).end()
   })
 }
 
@@ -102,3 +142,15 @@ function quitFriends (req, res, next) {
     res.type('json').status(204).end()
   })
 }
+
+// ---------------------------------------------------------------------------
+
+function getFormatedPods (pods) {
+  const formatedPods = []
+
+  pods.forEach(function (pod) {
+    formatedPods.push(pod.toFormatedJSON())
+  })
+
+  return formatedPods
+}