X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fapi%2Fvideos%2Fblacklist.ts;h=fa8448c864a1976c69cad3168303e4a5ad079fa6;hb=9d6b9d10ef8cbef39e89bc709285abffb0d8caa1;hp=4b42fc2d703c17a3eb867f2db8b5f4fd4166a15d;hpb=69818c9394366b954b6ba3bd697bd9d2b09f2a16;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/api/videos/blacklist.ts b/server/controllers/api/videos/blacklist.ts index 4b42fc2d7..fa8448c86 100644 --- a/server/controllers/api/videos/blacklist.ts +++ b/server/controllers/api/videos/blacklist.ts @@ -1,20 +1,57 @@ import * as express from 'express' - -import { database as db } from '../../../initializers/database' -import { logger } from '../../../helpers' +import { blacklistVideo, unblacklistVideo } from '@server/lib/video-blacklist' +import { UserRight, VideoBlacklistCreate } from '../../../../shared' +import { logger } from '../../../helpers/logger' +import { getFormattedObjects } from '../../../helpers/utils' +import { sequelizeTypescript } from '../../../initializers/database' import { + asyncMiddleware, authenticate, - ensureIsAdmin, - videosBlacklistValidator + blacklistSortValidator, + ensureUserHasRight, + paginationValidator, + setBlacklistSort, + setDefaultPagination, + videosBlacklistAddValidator, + videosBlacklistFiltersValidator, + videosBlacklistRemoveValidator, + videosBlacklistUpdateValidator } from '../../../middlewares' +import { VideoBlacklistModel } from '../../../models/video/video-blacklist' +import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes' const blacklistRouter = express.Router() -blacklistRouter.post('/:id/blacklist', +blacklistRouter.post('/:videoId/blacklist', + authenticate, + ensureUserHasRight(UserRight.MANAGE_VIDEO_BLACKLIST), + asyncMiddleware(videosBlacklistAddValidator), + asyncMiddleware(addVideoToBlacklistController) +) + +blacklistRouter.get('/blacklist', + authenticate, + ensureUserHasRight(UserRight.MANAGE_VIDEO_BLACKLIST), + paginationValidator, + blacklistSortValidator, + setBlacklistSort, + setDefaultPagination, + videosBlacklistFiltersValidator, + asyncMiddleware(listBlacklist) +) + +blacklistRouter.put('/:videoId/blacklist', + authenticate, + ensureUserHasRight(UserRight.MANAGE_VIDEO_BLACKLIST), + asyncMiddleware(videosBlacklistUpdateValidator), + asyncMiddleware(updateVideoBlacklistController) +) + +blacklistRouter.delete('/:videoId/blacklist', authenticate, - ensureIsAdmin, - videosBlacklistValidator, - addVideoToBlacklist + ensureUserHasRight(UserRight.MANAGE_VIDEO_BLACKLIST), + asyncMiddleware(videosBlacklistRemoveValidator), + asyncMiddleware(removeVideoFromBlacklistController) ) // --------------------------------------------------------------------------- @@ -25,19 +62,48 @@ export { // --------------------------------------------------------------------------- -function addVideoToBlacklist (req: express.Request, res: express.Response, next: express.NextFunction) { - const videoInstance = res.locals.video +async function addVideoToBlacklistController (req: express.Request, res: express.Response) { + const videoInstance = res.locals.videoAll + const body: VideoBlacklistCreate = req.body + + await blacklistVideo(videoInstance, body) + + logger.info('Video %s blacklisted.', videoInstance.uuid) - const toCreate = { - videoId: videoInstance.id - } + return res.type('json').sendStatus(HttpStatusCode.NO_CONTENT_204) +} + +async function updateVideoBlacklistController (req: express.Request, res: express.Response) { + const videoBlacklist = res.locals.videoBlacklist + + if (req.body.reason !== undefined) videoBlacklist.reason = req.body.reason - db.BlacklistedVideo.create(toCreate).asCallback(function (err) { - if (err) { - logger.error('Errors when blacklisting video ', { error: err }) - return next(err) - } + await sequelizeTypescript.transaction(t => { + return videoBlacklist.save({ transaction: t }) + }) + + return res.type('json').sendStatus(HttpStatusCode.NO_CONTENT_204) +} - return res.type('json').status(204).end() +async function listBlacklist (req: express.Request, res: express.Response) { + const resultList = await VideoBlacklistModel.listForApi({ + start: req.query.start, + count: req.query.count, + sort: req.query.sort, + search: req.query.search, + type: req.query.type }) + + return res.json(getFormattedObjects(resultList.data, resultList.total)) +} + +async function removeVideoFromBlacklistController (req: express.Request, res: express.Response) { + const videoBlacklist = res.locals.videoBlacklist + const video = res.locals.videoAll + + await unblacklistVideo(videoBlacklist, video) + + logger.info('Video %s removed from blacklist.', video.uuid) + + return res.type('json').sendStatus(HttpStatusCode.NO_CONTENT_204) }