]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/controllers/api/videos/abuse.ts
b92a66360a684ad4599c742fea705a958690123e
[github/Chocobozzz/PeerTube.git] / server / controllers / api / videos / abuse.ts
1 import * as express from 'express'
2 import { AbuseModel } from '@server/models/abuse/abuse'
3 import { getServerActor } from '@server/models/application/application'
4 import { AbuseCreate, UserRight, VideoAbuseCreate } from '../../../../shared'
5 import { getFormattedObjects } from '../../../helpers/utils'
6 import {
7 abusesSortValidator,
8 asyncMiddleware,
9 asyncRetryTransactionMiddleware,
10 authenticate,
11 ensureUserHasRight,
12 paginationValidator,
13 setDefaultPagination,
14 setDefaultSort,
15 videoAbuseGetValidator,
16 videoAbuseListValidator,
17 videoAbuseReportValidator,
18 videoAbuseUpdateValidator
19 } from '../../../middlewares'
20 import { deleteAbuse, reportAbuse, updateAbuse } from '../abuse'
21
22 // FIXME: deprecated in 2.3. Remove this controller
23
24 const abuseVideoRouter = express.Router()
25
26 abuseVideoRouter.get('/abuse',
27 authenticate,
28 ensureUserHasRight(UserRight.MANAGE_ABUSES),
29 paginationValidator,
30 abusesSortValidator,
31 setDefaultSort,
32 setDefaultPagination,
33 videoAbuseListValidator,
34 asyncMiddleware(listVideoAbuses)
35 )
36 abuseVideoRouter.put('/:videoId/abuse/:id',
37 authenticate,
38 ensureUserHasRight(UserRight.MANAGE_ABUSES),
39 asyncMiddleware(videoAbuseUpdateValidator),
40 asyncRetryTransactionMiddleware(updateVideoAbuse)
41 )
42 abuseVideoRouter.post('/:videoId/abuse',
43 authenticate,
44 asyncMiddleware(videoAbuseReportValidator),
45 asyncRetryTransactionMiddleware(reportVideoAbuse)
46 )
47 abuseVideoRouter.delete('/:videoId/abuse/:id',
48 authenticate,
49 ensureUserHasRight(UserRight.MANAGE_ABUSES),
50 asyncMiddleware(videoAbuseGetValidator),
51 asyncRetryTransactionMiddleware(deleteVideoAbuse)
52 )
53
54 // ---------------------------------------------------------------------------
55
56 export {
57 abuseVideoRouter
58 }
59
60 // ---------------------------------------------------------------------------
61
62 async function listVideoAbuses (req: express.Request, res: express.Response) {
63 const user = res.locals.oauth.token.user
64 const serverActor = await getServerActor()
65
66 const resultList = await AbuseModel.listForApi({
67 start: req.query.start,
68 count: req.query.count,
69 sort: req.query.sort,
70 id: req.query.id,
71 filter: 'video',
72 predefinedReason: req.query.predefinedReason,
73 search: req.query.search,
74 state: req.query.state,
75 videoIs: req.query.videoIs,
76 searchReporter: req.query.searchReporter,
77 searchReportee: req.query.searchReportee,
78 searchVideo: req.query.searchVideo,
79 searchVideoChannel: req.query.searchVideoChannel,
80 serverAccountId: serverActor.Account.id,
81 user
82 })
83
84 return res.json(getFormattedObjects(resultList.data, resultList.total))
85 }
86
87 async function updateVideoAbuse (req: express.Request, res: express.Response) {
88 return updateAbuse(req, res)
89 }
90
91 async function deleteVideoAbuse (req: express.Request, res: express.Response) {
92 return deleteAbuse(req, res)
93 }
94
95 async function reportVideoAbuse (req: express.Request, res: express.Response) {
96 const oldBody = req.body as VideoAbuseCreate
97
98 req.body = {
99 accountId: res.locals.videoAll.VideoChannel.accountId,
100
101 reason: oldBody.reason,
102 predefinedReasons: oldBody.predefinedReasons,
103
104 video: {
105 id: res.locals.videoAll.id,
106 startAt: oldBody.startAt,
107 endAt: oldBody.endAt
108 }
109 } as AbuseCreate
110
111 return reportAbuse(req, res)
112 }