X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fapi%2Fv1%2Fpods.js;h=2bdfe0c923b6c623cef73a8ae90facf4d9a8eab3;hb=535724234aafd90c9eac17d9998f3f1c6c6c7615;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..2bdfe0c92 100644 --- a/server/controllers/api/v1/pods.js +++ b/server/controllers/api/v1/pods.js @@ -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 +}