X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fapi%2Fv1%2Fpods.js;h=2bdfe0c923b6c623cef73a8ae90facf4d9a8eab3;hb=535724234aafd90c9eac17d9998f3f1c6c6c7615;hp=c93a86ee85fc4d73c6e7127bb03b73b41f0d7249;hpb=b9a3e09ad5a7673f64556d1dba122ed4c4fac980;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/api/v1/pods.js b/server/controllers/api/v1/pods.js index c93a86ee8..2bdfe0c92 100644 --- a/server/controllers/api/v1/pods.js +++ b/server/controllers/api/v1/pods.js @@ -1,27 +1,37 @@ 'use strict' -var express = require('express') -var fs = require('fs') - -var logger = require('../../../helpers/logger') -var friends = require('../../../lib/friends') -var middleware = require('../../../middlewares') -var cacheMiddleware = middleware.cache -var peertubeCrypto = require('../../../helpers/peertubeCrypto') -var Pods = require('../../../models/pods') -var reqValidator = middleware.reqValidators.pods -var secureMiddleware = middleware.secure -var secureRequest = middleware.reqValidators.remote.secureRequest -var Videos = require('../../../models/videos') - -var 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 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 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() +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) // --------------------------------------------------------------------------- @@ -30,57 +40,98 @@ module.exports = router // --------------------------------------------------------------------------- function addPods (req, res, next) { - var 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) + }) + }, - Videos.addRemotes(informations.videos) + function sendMyVideos (podCreated, callback) { + friends.sendOwnedVideosToPod(podCreated._id) - fs.readFile(peertubeCrypto.getCertDir() + 'peertube.pub', 'utf8', 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 + + friends.makeFriends(urls, function (err) { + if (err) { + logger.error('Could not make friends.', { error: err }) + return + } - res.sendStatus(204) + logger.info('Made friends!') }) + + res.type('json').status(204).end() } function removePods (req, res, next) { - var url = req.body.signature.url - Pods.remove(url, function (err) { - if (err) return next(err) + const url = req.body.signature.url + + waterfall([ + function loadPod (callback) { + Pod.loadByUrl(url, callback) + }, - Videos.removeAllRemotesOf(url, function (err) { - if (err) logger.error('Cannot remove all remote videos of %s.', url) - else logger.info('%s pod removed.', url) + function removePod (pod, callback) { + pod.remove(function (err) { + // Be sure we only return one argument in the callback + return callback(err) + }) + }, - res.sendStatus(204) - }) + function (callback) { + Video.listByUrls([ url ], function (err, videosList) { + if (err) { + logger.error('Cannot list videos from url.', { error: err }) + return callback(err) + } + + 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() }) } @@ -88,6 +139,18 @@ function quitFriends (req, res, next) { friends.quitFriends(function (err) { if (err) return next(err) - res.sendStatus(204) + res.type('json').status(204).end() }) } + +// --------------------------------------------------------------------------- + +function getFormatedPods (pods) { + const formatedPods = [] + + pods.forEach(function (pod) { + formatedPods.push(pod.toFormatedJSON()) + }) + + return formatedPods +}