X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fvideo-blacklist.ts;h=1dd45b76d9d1fe742c52d4beef611aa991f357e6;hb=e612209767ebe1deb0af7688c96b7f979bb52b44;hp=985b89e319cea32ebba9fd388c75cdb7fc534703;hpb=1eddc9a74f9a80fa5d0cb25fceb3fc47a1a3c14a;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/video-blacklist.ts b/server/lib/video-blacklist.ts index 985b89e31..1dd45b76d 100644 --- a/server/lib/video-blacklist.ts +++ b/server/lib/video-blacklist.ts @@ -1,31 +1,72 @@ -import * as sequelize from 'sequelize' +import { Transaction } from 'sequelize' import { CONFIG } from '../initializers/config' import { UserRight, VideoBlacklistType } from '../../shared/models' import { VideoBlacklistModel } from '../models/video/video-blacklist' -import { UserModel } from '../models/account/user' -import { VideoModel } from '../models/video/video' import { logger } from '../helpers/logger' import { UserAdminFlag } from '../../shared/models/users/user-flag.model' +import { Hooks } from './plugins/hooks' +import { Notifier } from './notifier' +import { MUser, MVideoBlacklistVideo, MVideoWithBlacklistLight } from '@server/typings/models' -async function autoBlacklistVideoIfNeeded (video: VideoModel, user: UserModel, transaction: sequelize.Transaction) { - if (!CONFIG.AUTO_BLACKLIST.VIDEOS.OF_USERS.ENABLED) return false +async function autoBlacklistVideoIfNeeded (parameters: { + video: MVideoWithBlacklistLight, + user?: MUser, + isRemote: boolean, + isNew: boolean, + notify?: boolean, + transaction?: Transaction +}) { + const { video, user, isRemote, isNew, notify = true, transaction } = parameters + const doAutoBlacklist = await Hooks.wrapPromiseFun( + autoBlacklistNeeded, + { video, user, isRemote, isNew }, + 'filter:video.auto-blacklist.result' + ) - if (user.hasRight(UserRight.MANAGE_VIDEO_BLACKLIST) || user.hasAdminFlag(UserAdminFlag.BY_PASS_VIDEO_AUTO_BLACKLIST)) return false + if (!doAutoBlacklist) return false - const sequelizeOptions = { transaction } const videoBlacklistToCreate = { videoId: video.id, unfederated: true, reason: 'Auto-blacklisted. Moderator review required.', type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED } - await VideoBlacklistModel.create(videoBlacklistToCreate, sequelizeOptions) + const [ videoBlacklist ] = await VideoBlacklistModel.findOrCreate({ + where: { + videoId: video.id + }, + defaults: videoBlacklistToCreate, + transaction + }) + video.VideoBlacklist = videoBlacklist + + videoBlacklist.Video = video + + if (notify) Notifier.Instance.notifyOnVideoAutoBlacklist(videoBlacklist) logger.info('Video %s auto-blacklisted.', video.uuid) return true } +async function autoBlacklistNeeded (parameters: { + video: MVideoWithBlacklistLight, + isRemote: boolean, + isNew: boolean, + user?: MUser +}) { + const { user, video, isRemote, isNew } = parameters + + // Already blacklisted + if (video.VideoBlacklist) return false + if (!CONFIG.AUTO_BLACKLIST.VIDEOS.OF_USERS.ENABLED || !user) return false + if (isRemote || isNew === false) return false + + if (user.hasRight(UserRight.MANAGE_VIDEO_BLACKLIST) || user.hasAdminFlag(UserAdminFlag.BY_PASS_VIDEO_AUTO_BLACKLIST)) return false + + return true +} + // --------------------------------------------------------------------------- export {