mirror of https://github.com/Chocobozzz/PeerTube
				
				
				
			
		
			
				
	
	
		
			146 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			146 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
| 'use strict'
 | |
| 
 | |
| 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 podsMiddleware = middlewares.pods
 | |
| const checkSignature = middlewares.secure.checkSignature
 | |
| const validators = middlewares.validators.pods
 | |
| const signatureValidator = middlewares.validators.remote.signature
 | |
| 
 | |
| const router = express.Router()
 | |
| const Pod = mongoose.model('Pod')
 | |
| 
 | |
| router.get('/', listPods)
 | |
| router.post('/',
 | |
|   validators.podsAdd,
 | |
|   podsMiddleware.setBodyUrlPort,
 | |
|   addPods
 | |
| )
 | |
| router.post('/makefriends',
 | |
|   oAuth.authenticate,
 | |
|   admin.ensureIsAdmin,
 | |
|   validators.makeFriends,
 | |
|   podsMiddleware.setBodyUrlsPort,
 | |
|   makeFriends
 | |
| )
 | |
| router.get('/quitfriends',
 | |
|   oAuth.authenticate,
 | |
|   admin.ensureIsAdmin,
 | |
|   quitFriends
 | |
| )
 | |
| // Post because this is a secured request
 | |
| router.post('/remove',
 | |
|   signatureValidator,
 | |
|   checkSignature,
 | |
|   removePods
 | |
| )
 | |
| 
 | |
| // ---------------------------------------------------------------------------
 | |
| 
 | |
| module.exports = router
 | |
| 
 | |
| // ---------------------------------------------------------------------------
 | |
| 
 | |
| function addPods (req, res, next) {
 | |
|   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)
 | |
|       })
 | |
|     },
 | |
| 
 | |
|     function sendMyVideos (podCreated, callback) {
 | |
|       friends.sendOwnedVideosToPod(podCreated._id)
 | |
| 
 | |
|       callback(null)
 | |
|     },
 | |
| 
 | |
|     function fetchMyCertificate (callback) {
 | |
|       friends.getMyCertificate(function (err, cert) {
 | |
|         if (err) {
 | |
|           logger.error('Cannot read cert file.')
 | |
|           return callback(err)
 | |
|         }
 | |
| 
 | |
|         return callback(null, cert)
 | |
|       })
 | |
|     }
 | |
|   ], function (err, cert) {
 | |
|     if (err) return next(err)
 | |
| 
 | |
|     return res.json({ cert: cert })
 | |
|   })
 | |
| }
 | |
| 
 | |
| function listPods (req, res, next) {
 | |
|   Pod.list(function (err, podsUrlList) {
 | |
|     if (err) return next(err)
 | |
| 
 | |
|     res.json(getFormatedPods(podsUrlList))
 | |
|   })
 | |
| }
 | |
| 
 | |
| function makeFriends (req, res, next) {
 | |
|   const urls = req.body.urls
 | |
| 
 | |
|   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
 | |
| 
 | |
|   waterfall([
 | |
|     function loadPod (callback) {
 | |
|       Pod.loadByUrl(url, callback)
 | |
|     },
 | |
| 
 | |
|     function removePod (pod, callback) {
 | |
|       pod.remove(callback)
 | |
|     }
 | |
|   ], function (err) {
 | |
|     if (err) return next(err)
 | |
| 
 | |
|     return res.type('json').status(204).end()
 | |
|   })
 | |
| }
 | |
| 
 | |
| function quitFriends (req, res, next) {
 | |
|   friends.quitFriends(function (err) {
 | |
|     if (err) return next(err)
 | |
| 
 | |
|     res.type('json').status(204).end()
 | |
|   })
 | |
| }
 | |
| 
 | |
| // ---------------------------------------------------------------------------
 | |
| 
 | |
| function getFormatedPods (pods) {
 | |
|   const formatedPods = []
 | |
| 
 | |
|   pods.forEach(function (pod) {
 | |
|     formatedPods.push(pod.toFormatedJSON())
 | |
|   })
 | |
| 
 | |
|   return formatedPods
 | |
| }
 |