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