]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/controllers/api/pods.ts
Fix pod removal when it is down
[github/Chocobozzz/PeerTube.git] / server / controllers / api / pods.ts
1 import * as express from 'express'
2
3 import { database as db } from '../../initializers/database'
4 import { logger, getFormattedObjects } from '../../helpers'
5 import {
6 makeFriends,
7 quitFriends,
8 removeFriend
9 } from '../../lib'
10 import {
11 authenticate,
12 ensureIsAdmin,
13 makeFriendsValidator,
14 setBodyHostsPort,
15 podRemoveValidator,
16 paginationValidator,
17 setPagination,
18 setPodsSort,
19 podsSortValidator
20 } from '../../middlewares'
21 import { PodInstance } from '../../models'
22
23 const podsRouter = express.Router()
24
25 podsRouter.get('/',
26 paginationValidator,
27 podsSortValidator,
28 setPodsSort,
29 setPagination,
30 listPods
31 )
32 podsRouter.post('/make-friends',
33 authenticate,
34 ensureIsAdmin,
35 makeFriendsValidator,
36 setBodyHostsPort,
37 makeFriendsController
38 )
39 podsRouter.get('/quit-friends',
40 authenticate,
41 ensureIsAdmin,
42 quitFriendsController
43 )
44 podsRouter.delete('/:id',
45 authenticate,
46 ensureIsAdmin,
47 podRemoveValidator,
48 removeFriendController
49 )
50
51 // ---------------------------------------------------------------------------
52
53 export {
54 podsRouter
55 }
56
57 // ---------------------------------------------------------------------------
58
59 function listPods (req: express.Request, res: express.Response, next: express.NextFunction) {
60 db.Pod.listForApi(req.query.start, req.query.count, req.query.sort)
61 .then(resultList => res.json(getFormattedObjects(resultList.data, resultList.total)))
62 .catch(err => next(err))
63 }
64
65 function makeFriendsController (req: express.Request, res: express.Response, next: express.NextFunction) {
66 const hosts = req.body.hosts as string[]
67
68 makeFriends(hosts)
69 .then(() => logger.info('Made friends!'))
70 .catch(err => logger.error('Could not make friends.', err))
71
72 // Don't wait the process that could be long
73 res.type('json').status(204).end()
74 }
75
76 function quitFriendsController (req: express.Request, res: express.Response, next: express.NextFunction) {
77 quitFriends()
78 .then(() => res.type('json').status(204).end())
79 .catch(err => next(err))
80 }
81
82 function removeFriendController (req: express.Request, res: express.Response, next: express.NextFunction) {
83 const pod = res.locals.pod as PodInstance
84
85 removeFriend(pod)
86 .then(() => res.type('json').status(204).end())
87 .catch(err => next(err))
88 }