Async signature and various fixes
[oweals/peertube.git] / server / controllers / api / pods.ts
1 import * as express from 'express'
2
3 import { database as db } from '../../initializers/database'
4 import { CONFIG } from '../../initializers'
5 import {
6   logger,
7   getMyPublicCert,
8   getFormatedObjects
9 } from '../../helpers'
10 import {
11   sendOwnedVideosToPod,
12   makeFriends,
13   quitFriends
14 } from '../../lib'
15 import {
16   podsAddValidator,
17   authenticate,
18   ensureIsAdmin,
19   makeFriendsValidator,
20   setBodyHostPort,
21   setBodyHostsPort
22 } from '../../middlewares'
23 import {
24   PodInstance
25 } from '../../models'
26
27 const podsRouter = express.Router()
28
29 podsRouter.get('/', listPods)
30 podsRouter.post('/',
31   setBodyHostPort, // We need to modify the host before running the validator!
32   podsAddValidator,
33   addPods
34 )
35 podsRouter.post('/makefriends',
36   authenticate,
37   ensureIsAdmin,
38   makeFriendsValidator,
39   setBodyHostsPort,
40   makeFriendsController
41 )
42 podsRouter.get('/quitfriends',
43   authenticate,
44   ensureIsAdmin,
45   quitFriendsController
46 )
47
48 // ---------------------------------------------------------------------------
49
50 export {
51   podsRouter
52 }
53
54 // ---------------------------------------------------------------------------
55
56 function addPods (req: express.Request, res: express.Response, next: express.NextFunction) {
57   const informations = req.body
58
59   const pod = db.Pod.build(informations)
60   pod.save()
61     .then(podCreated => {
62       return sendOwnedVideosToPod(podCreated.id)
63     })
64     .then(() => {
65       return getMyPublicCert()
66     })
67     .then(cert => {
68       return res.json({ cert: cert, email: CONFIG.ADMIN.EMAIL })
69     })
70     .catch(err => next(err))
71 }
72
73 function listPods (req: express.Request, res: express.Response, next: express.NextFunction) {
74   db.Pod.list()
75     .then(podsList => res.json(getFormatedObjects(podsList, podsList.length)))
76     .catch(err => next(err))
77 }
78
79 function makeFriendsController (req: express.Request, res: express.Response, next: express.NextFunction) {
80   const hosts = req.body.hosts as string[]
81
82   makeFriends(hosts)
83     .then(() => logger.info('Made friends!'))
84     .catch(err => logger.error('Could not make friends.', { error: err }))
85
86   // Don't wait the process that could be long
87   res.type('json').status(204).end()
88 }
89
90 function quitFriendsController (req: express.Request, res: express.Response, next: express.NextFunction) {
91   quitFriends()
92     .then(() => res.type('json').status(204).end())
93     .catch(err => next(err))
94 }