X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fvideo-blacklist.ts;h=f1657e8f1dd509133ad1ea210e47824745b0b075;hb=5baee5fca418487e72ddcd6419d31bca8659b668;hp=3b90b1b9415982071d6deff43dacbeb18ec47b59;hpb=4c1def5fd8e9f483238eb38e221f555e2e6bbf07;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/video-blacklist.ts b/server/lib/video-blacklist.ts index 3b90b1b94..f1657e8f1 100644 --- a/server/lib/video-blacklist.ts +++ b/server/lib/video-blacklist.ts @@ -1,12 +1,22 @@ import { Transaction } from 'sequelize' +import { sequelizeTypescript } from '@server/initializers/database' +import { + MUser, + MVideoAccountLight, + MVideoBlacklist, + MVideoBlacklistVideo, + MVideoFullLight, + MVideoWithBlacklistLight +} from '@server/typings/models' +import { UserRight, VideoBlacklistCreate, VideoBlockType } from '../../shared/models' +import { UserAdminFlag } from '../../shared/models/users/user-flag.model' +import { logger } from '../helpers/logger' import { CONFIG } from '../initializers/config' -import { UserRight, VideoBlacklistType } from '../../shared/models' import { VideoBlacklistModel } from '../models/video/video-blacklist' -import { logger } from '../helpers/logger' -import { UserAdminFlag } from '../../shared/models/users/user-flag.model' -import { Hooks } from './plugins/hooks' +import { sendDeleteVideo } from './activitypub/send' +import { federateVideoIfNeeded } from './activitypub/videos' import { Notifier } from './notifier' -import { MUser, MVideoBlacklistVideo, MVideoWithBlacklistLight } from '@server/typings/models' +import { Hooks } from './plugins/hooks' async function autoBlacklistVideoIfNeeded (parameters: { video: MVideoWithBlacklistLight @@ -29,7 +39,7 @@ async function autoBlacklistVideoIfNeeded (parameters: { videoId: video.id, unfederated: true, reason: 'Auto-blacklisted. Moderator review required.', - type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED + type: VideoBlockType.AUTO_BEFORE_PUBLISHED } const [ videoBlacklist ] = await VideoBlacklistModel.findOrCreate({ where: { @@ -49,6 +59,60 @@ async function autoBlacklistVideoIfNeeded (parameters: { return true } +async function blacklistVideo (videoInstance: MVideoAccountLight, options: VideoBlacklistCreate) { + const blacklist: MVideoBlacklistVideo = await VideoBlacklistModel.create({ + videoId: videoInstance.id, + unfederated: options.unfederate === true, + reason: options.reason, + type: VideoBlockType.MANUAL + } + ) + blacklist.Video = videoInstance + + if (options.unfederate === true) { + await sendDeleteVideo(videoInstance, undefined) + } + + Notifier.Instance.notifyOnVideoBlacklist(blacklist) +} + +async function unblacklistVideo (videoBlacklist: MVideoBlacklist, video: MVideoFullLight) { + const videoBlacklistType = await sequelizeTypescript.transaction(async t => { + const unfederated = videoBlacklist.unfederated + const videoBlacklistType = videoBlacklist.type + + await videoBlacklist.destroy({ transaction: t }) + video.VideoBlacklist = undefined + + // Re federate the video + if (unfederated === true) { + await federateVideoIfNeeded(video, true, t) + } + + return videoBlacklistType + }) + + Notifier.Instance.notifyOnVideoUnblacklist(video) + + if (videoBlacklistType === VideoBlockType.AUTO_BEFORE_PUBLISHED) { + Notifier.Instance.notifyOnVideoPublishedAfterRemovedFromAutoBlacklist(video) + + // Delete on object so new video notifications will send + delete video.VideoBlacklist + Notifier.Instance.notifyOnNewVideoIfNeeded(video) + } +} + +// --------------------------------------------------------------------------- + +export { + autoBlacklistVideoIfNeeded, + blacklistVideo, + unblacklistVideo +} + +// --------------------------------------------------------------------------- + function autoBlacklistNeeded (parameters: { video: MVideoWithBlacklistLight isRemote: boolean @@ -62,13 +126,7 @@ function autoBlacklistNeeded (parameters: { 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 + if (user.hasRight(UserRight.MANAGE_VIDEO_BLOCKS) || user.hasAdminFlag(UserAdminFlag.BYPASS_VIDEO_AUTO_BLOCK)) return false return true } - -// --------------------------------------------------------------------------- - -export { - autoBlacklistVideoIfNeeded -}