X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fapi%2Fv1%2Fpods.js;h=feb6bd958be480a3cdd66aff3e607f000283508c;hb=a3ee6fa22dee4b68fcde9cd23708b471db446e11;hp=d08b7860d74b0d90bc502769dc556e4cc9e4abee;hpb=cbe2f7c34822b1bd3b1f8c691f79f0c29cf21f07;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/api/v1/pods.js b/server/controllers/api/v1/pods.js index d08b7860d..feb6bd958 100644 --- a/server/controllers/api/v1/pods.js +++ b/server/controllers/api/v1/pods.js @@ -1,26 +1,26 @@ '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) // --------------------------------------------------------------------------- @@ -29,38 +29,45 @@ 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 + + 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) }) } @@ -74,24 +81,39 @@ function makeFriends (req, res, next) { 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() }) }