'use strict'
+const async = require('async')
const express = require('express')
+const mongoose = require('mongoose')
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 oAuth2 = middlewares.oauth2
+const reqValidator = middlewares.reqValidators.pods
+const signatureValidator = middlewares.reqValidators.remote.signature
const router = express.Router()
+const Pod = mongoose.model('Pod')
+const Video = mongoose.model('Video')
-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)
+router.get('/', listPodsUrl)
+router.post('/', reqValidator.podsAdd, addPods)
+router.get('/makefriends', oAuth2.authenticate, reqValidator.makeFriends, makeFriends)
+router.get('/quitfriends', oAuth2.authenticate, quitFriends)
// Post because this is a secured request
-router.post('/remove', secureRequest, secureMiddleware.decryptBody, removePods)
+router.post('/remove', signatureValidator, removePods)
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
function addPods (req, res, next) {
- const informations = req.body.data
- Pods.add(informations, function (err) {
- if (err) return next(err)
+ const informations = req.body
+
+ async.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) {
+function listPodsUrl (req, res, next) {
+ Pod.listOnlyUrls(function (err, podsUrlList) {
if (err) return next(err)
- res.json(pods_list)
+ res.json(podsUrlList)
})
}
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)
- }
+ async.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) {
+ async.each(videosList, function (video, callbackEach) {
+ video.remove(callbackEach)
+ }, callback)
+ }
+ ], function (err) {
+ if (err) return next(err)
+
+ return res.type('json').status(204).end()
})
}