Handle blacklist (#84)
[oweals/peertube.git] / server / controllers / api / blacklist.ts
1 import * as express from 'express'
2
3 import { database } from '../../initializers'
4 import { getFormattedObjects } from '../../helpers'
5 import { BlacklistedVideo } from '../../../shared'
6 import { BlacklistedVideoInstance } from '../../models'
7
8 import {
9   removeVideoFromBlacklist
10 } from '../../lib'
11 import {
12   authenticate,
13   ensureIsAdmin,
14   paginationValidator,
15   blacklistSortValidator,
16   setBlacklistSort,
17   setPagination,
18   blacklistRemoveValidator
19 } from '../../middlewares'
20
21 const blacklistRouter = express.Router()
22
23 blacklistRouter.get('/',
24   authenticate,
25   ensureIsAdmin,
26   paginationValidator,
27   blacklistSortValidator,
28   setBlacklistSort,
29   setPagination,
30   listBlacklist
31 )
32
33 blacklistRouter.delete('/:id',
34   authenticate,
35   ensureIsAdmin,
36   blacklistRemoveValidator,
37   removeVideoFromBlacklistController
38 )
39
40 // ---------------------------------------------------------------------------
41
42 export {
43   blacklistRouter
44 }
45
46 // ---------------------------------------------------------------------------
47
48 function listBlacklist (req: express.Request, res: express.Response, next: express.NextFunction) {
49   database.BlacklistedVideo.listForApi(req.query.start, req.query.count, req.query.sort)
50     .then(resultList => res.json(getFormattedObjects<BlacklistedVideo, BlacklistedVideoInstance>(resultList.data, resultList.total)))
51     .catch(err => next(err))
52 }
53
54 function removeVideoFromBlacklistController (req: express.Request, res: express.Response, next: express.NextFunction) {
55   const entry = res.locals.blacklistEntryToRemove as BlacklistedVideoInstance
56
57   removeVideoFromBlacklist(entry)
58     .then(() => res.sendStatus(204))
59     .catch(err => next(err))
60 }