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