]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/controllers/api/v1/pods.js
dbe1a737253b25c8cba52e13337adfae7557b53f
[github/Chocobozzz/PeerTube.git] / server / controllers / api / v1 / pods.js
1 'use strict'
2
3 const express = require('express')
4 const fs = require('fs')
5
6 const logger = require('../../../helpers/logger')
7 const friends = require('../../../lib/friends')
8 const middleware = require('../../../middlewares')
9 const cacheMiddleware = middleware.cache
10 const peertubeCrypto = require('../../../helpers/peertubeCrypto')
11 const Pods = require('../../../models/pods')
12 const reqValidator = middleware.reqValidators.pods
13 const secureMiddleware = middleware.secure
14 const secureRequest = middleware.reqValidators.remote.secureRequest
15 const Videos = require('../../../models/videos')
16
17 const router = express.Router()
18
19 router.get('/', cacheMiddleware.cache(false), listPods)
20 router.post('/', reqValidator.podsAdd, cacheMiddleware.cache(false), addPods)
21 router.get('/makefriends', reqValidator.makeFriends, cacheMiddleware.cache(false), makeFriends)
22 router.get('/quitfriends', cacheMiddleware.cache(false), quitFriends)
23 // Post because this is a secured request
24 router.post('/remove', secureRequest, secureMiddleware.decryptBody, removePods)
25
26 // ---------------------------------------------------------------------------
27
28 module.exports = router
29
30 // ---------------------------------------------------------------------------
31
32 function addPods (req, res, next) {
33 const informations = req.body.data
34 Pods.add(informations, function (err) {
35 if (err) return next(err)
36
37 Videos.addRemotes(informations.videos)
38
39 fs.readFile(peertubeCrypto.getCertDir() + 'peertube.pub', 'utf8', function (err, cert) {
40 if (err) {
41 logger.error('Cannot read cert file.')
42 return next(err)
43 }
44
45 Videos.listOwned(function (err, videos_list) {
46 if (err) {
47 logger.error('Cannot get the list of owned videos.')
48 return next(err)
49 }
50
51 res.json({ cert: cert, videos: videos_list })
52 })
53 })
54 })
55 }
56
57 function listPods (req, res, next) {
58 Pods.list(function (err, pods_list) {
59 if (err) return next(err)
60
61 res.json(pods_list)
62 })
63 }
64
65 function makeFriends (req, res, next) {
66 friends.makeFriends(function (err) {
67 if (err) return next(err)
68
69 res.type('json').status(204).end()
70 })
71 }
72
73 function removePods (req, res, next) {
74 const url = req.body.signature.url
75 Pods.remove(url, function (err) {
76 if (err) return next(err)
77
78 Videos.removeAllRemotesOf(url, function (err) {
79 if (err) logger.error('Cannot remove all remote videos of %s.', url)
80 else logger.info('%s pod removed.', url)
81
82 res.type('json').status(204).end()
83 })
84 })
85 }
86
87 function quitFriends (req, res, next) {
88 friends.quitFriends(function (err) {
89 if (err) return next(err)
90
91 res.type('json').status(204).end()
92 })
93 }