]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/lib/video-blacklist.ts
Add plugin table migration table
[github/Chocobozzz/PeerTube.git] / server / lib / video-blacklist.ts
index 9bc996f5a84d0f15cf2a29a9a257ba39f551e161..9749ce2f6cbc282e2bc69100be302fd954c78699 100644 (file)
@@ -8,10 +8,17 @@ import { logger } from '../helpers/logger'
 import { UserAdminFlag } from '../../shared/models/users/user-flag.model'
 import { Hooks } from './plugins/hooks'
 
-async function autoBlacklistVideoIfNeeded (video: VideoModel, user?: UserModel, transaction?: Transaction) {
+async function autoBlacklistVideoIfNeeded (parameters: {
+  video: VideoModel,
+  user?: UserModel,
+  isRemote: boolean,
+  isNew: boolean,
+  transaction?: Transaction
+}) {
+  const { video, user, isRemote, isNew, transaction } = parameters
   const doAutoBlacklist = await Hooks.wrapPromiseFun(
     autoBlacklistNeeded,
-    { video, user },
+    { video, user, isRemote, isNew },
     'filter:video.auto-blacklist.result'
   )
 
@@ -23,17 +30,33 @@ async function autoBlacklistVideoIfNeeded (video: VideoModel, user?: UserModel,
     reason: 'Auto-blacklisted. Moderator review required.',
     type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED
   }
-  await VideoBlacklistModel.create(videoBlacklistToCreate, { transaction })
+  const [ videoBlacklist ] = await VideoBlacklistModel.findOrCreate({
+    where: {
+      videoId: video.id
+    },
+    defaults: videoBlacklistToCreate,
+    transaction
+  })
+
+  video.VideoBlacklist = videoBlacklist
 
   logger.info('Video %s auto-blacklisted.', video.uuid)
 
   return true
 }
 
-async function autoBlacklistNeeded (parameters: { video: VideoModel, user?: UserModel }) {
-  const { user } = parameters
+async function autoBlacklistNeeded (parameters: {
+  video: VideoModel,
+  isRemote: boolean,
+  isNew: boolean,
+  user?: UserModel
+}) {
+  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) return false
 
   if (user.hasRight(UserRight.MANAGE_VIDEO_BLACKLIST) || user.hasAdminFlag(UserAdminFlag.BY_PASS_VIDEO_AUTO_BLACKLIST)) return false