]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/controllers/api/pods.ts
a028c4ab9a1073b0debadf05a557902613199f1d
[github/Chocobozzz/PeerTube.git] / server / controllers / api / pods.ts
1 import * as express from 'express'
2 import { waterfall } from 'async'
3
4 import { database as db } from '../../initializers/database'
5 import { CONFIG } from '../../initializers'
6 import {
7 logger,
8 getMyPublicCert,
9 getFormatedObjects
10 } from '../../helpers'
11 import {
12 sendOwnedVideosToPod,
13 makeFriends,
14 quitFriends
15 } from '../../lib'
16 import {
17 podsAddValidator,
18 authenticate,
19 ensureIsAdmin,
20 makeFriendsValidator,
21 setBodyHostPort,
22 setBodyHostsPort
23 } from '../../middlewares'
24
25 const podsRouter = express.Router()
26
27 podsRouter.get('/', listPods)
28 podsRouter.post('/',
29 setBodyHostPort, // We need to modify the host before running the validator!
30 podsAddValidator,
31 addPods
32 )
33 podsRouter.post('/makefriends',
34 authenticate,
35 ensureIsAdmin,
36 makeFriendsValidator,
37 setBodyHostsPort,
38 makeFriendsController
39 )
40 podsRouter.get('/quitfriends',
41 authenticate,
42 ensureIsAdmin,
43 quitFriendsController
44 )
45
46 // ---------------------------------------------------------------------------
47
48 export {
49 podsRouter
50 }
51
52 // ---------------------------------------------------------------------------
53
54 function addPods (req, res, next) {
55 const informations = req.body
56
57 waterfall([
58 function addPod (callback) {
59 const pod = db.Pod.build(informations)
60 pod.save().asCallback(function (err, podCreated) {
61 // Be sure about the number of parameters for the callback
62 return callback(err, podCreated)
63 })
64 },
65
66 function sendMyVideos (podCreated, callback) {
67 sendOwnedVideosToPod(podCreated.id)
68
69 callback(null)
70 },
71
72 function fetchMyCertificate (callback) {
73 getMyPublicCert(function (err, cert) {
74 if (err) {
75 logger.error('Cannot read cert file.')
76 return callback(err)
77 }
78
79 return callback(null, cert)
80 })
81 }
82 ], function (err, cert) {
83 if (err) return next(err)
84
85 return res.json({ cert: cert, email: CONFIG.ADMIN.EMAIL })
86 })
87 }
88
89 function listPods (req, res, next) {
90 db.Pod.list(function (err, podsList) {
91 if (err) return next(err)
92
93 res.json(getFormatedObjects(podsList, podsList.length))
94 })
95 }
96
97 function makeFriendsController (req, res, next) {
98 const hosts = req.body.hosts
99
100 makeFriends(hosts, function (err) {
101 if (err) {
102 logger.error('Could not make friends.', { error: err })
103 return
104 }
105
106 logger.info('Made friends!')
107 })
108
109 res.type('json').status(204).end()
110 }
111
112 function quitFriendsController (req, res, next) {
113 quitFriends(function (err) {
114 if (err) return next(err)
115
116 res.type('json').status(204).end()
117 })
118 }