Fix video import if autoblacklist is enabled
authorChocobozzz <me@florianbigard.com>
Fri, 7 Jun 2019 12:34:11 +0000 (14:34 +0200)
committerChocobozzz <me@florianbigard.com>
Fri, 7 Jun 2019 12:35:53 +0000 (14:35 +0200)
server/controllers/api/videos/import.ts
server/controllers/static.ts
server/tests/api/videos/video-blacklist.ts

index bfb69090652a340261f80824442c34be315d16bd..dcba0e08f4a2372505de2d71615cd4eb408c2735 100644 (file)
@@ -26,6 +26,7 @@ import { sequelizeTypescript } from '../../../initializers/database'
 import { createVideoMiniatureFromExisting } from '../../../lib/thumbnail'
 import { ThumbnailType } from '../../../../shared/models/videos/thumbnail.type'
 import { ThumbnailModel } from '../../../models/video/thumbnail'
+import { UserModel } from '../../../models/account/user'
 
 const auditLogger = auditLoggerFactory('video-imports')
 const videoImportsRouter = express.Router()
@@ -107,7 +108,8 @@ async function addTorrentImport (req: express.Request, res: express.Response, to
     previewModel,
     videoChannel: res.locals.videoChannel,
     tags,
-    videoImportAttributes
+    videoImportAttributes,
+    user
   })
 
   // Create job to import the video
@@ -151,12 +153,13 @@ async function addYoutubeDLImport (req: express.Request, res: express.Response)
     userId: user.id
   }
   const videoImport = await insertIntoDB({
-    video: video,
+    video,
     thumbnailModel,
     previewModel,
     videoChannel: res.locals.videoChannel,
     tags,
-    videoImportAttributes
+    videoImportAttributes,
+    user
   })
 
   // Create job to import the video
@@ -227,9 +230,10 @@ function insertIntoDB (parameters: {
   previewModel: ThumbnailModel,
   videoChannel: VideoChannelModel,
   tags: string[],
-  videoImportAttributes: Partial<VideoImportModel>
+  videoImportAttributes: Partial<VideoImportModel>,
+  user: UserModel
 }): Bluebird<VideoImportModel> {
-  let { video, thumbnailModel, previewModel, videoChannel, tags, videoImportAttributes } = parameters
+  const { video, thumbnailModel, previewModel, videoChannel, tags, videoImportAttributes, user } = parameters
 
   return sequelizeTypescript.transaction(async t => {
     const sequelizeOptions = { transaction: t }
@@ -241,7 +245,7 @@ function insertIntoDB (parameters: {
     if (thumbnailModel) await videoCreated.addAndSaveThumbnail(thumbnailModel, t)
     if (previewModel) await videoCreated.addAndSaveThumbnail(previewModel, t)
 
-    await autoBlacklistVideoIfNeeded(video, videoChannel.Account.User, t)
+    await autoBlacklistVideoIfNeeded(video, user, t)
 
     // Set tags to the video
     if (tags) {
index 73951be2d4b3ff0cc9a1283f276365a31754d827..fb2e7742a06dfefa9a8bf0e8fe9f544e9cb9808c 100644 (file)
@@ -158,7 +158,7 @@ staticRouter.use('/.well-known/change-password',
 
 staticRouter.use('/.well-known/host-meta',
   (_, res: express.Response) => {
-    res.type('application/xml');
+    res.type('application/xml')
 
     const xml = '<?xml version="1.0" encoding="UTF-8"?>\n' +
       '<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">\n' +
index e907bbdc0dbffd4dc69f12d5646ac698fbaa3042..8760a47875d9dd358a2246e8877cb4d1fb671b25 100644 (file)
@@ -4,10 +4,11 @@ import * as chai from 'chai'
 import { orderBy } from 'lodash'
 import 'mocha'
 import {
-  addVideoToBlacklist, cleanupTests,
+  addVideoToBlacklist,
+  cleanupTests,
   createUser,
   flushAndRunMultipleServers,
-  getBlacklistedVideosList,
+  getBlacklistedVideosList, getMyUserInformation,
   getMyVideos,
   getVideosList,
   killallServers,
@@ -16,6 +17,7 @@ import {
   searchVideo,
   ServerInfo,
   setAccessTokensToServers,
+  setDefaultVideoChannel,
   updateVideo,
   updateVideoBlacklist,
   uploadVideo,
@@ -25,7 +27,8 @@ import { doubleFollow } from '../../../../shared/extra-utils/server/follows'
 import { waitJobs } from '../../../../shared/extra-utils/server/jobs'
 import { VideoBlacklist, VideoBlacklistType } from '../../../../shared/models/videos'
 import { UserAdminFlag } from '../../../../shared/models/users/user-flag.model'
-import { UserRole } from '../../../../shared/models/users'
+import { User, UserRole, UserUpdateMe } from '../../../../shared/models/users'
+import { getMagnetURI, getYoutubeVideoUrl, importVideo } from '../../../../shared/extra-utils/videos/video-imports'
 
 const expect = chai.expect
 
@@ -351,6 +354,7 @@ describe('Test video blacklist', function () {
   describe('When auto blacklist videos', function () {
     let userWithoutFlag: string
     let userWithFlag: string
+    let channelOfUserWithoutFlag: number
 
     before(async function () {
       this.timeout(20000)
@@ -380,6 +384,10 @@ describe('Test video blacklist', function () {
         })
 
         userWithoutFlag = await userLogin(servers[0], user)
+
+        const res = await getMyUserInformation(servers[0].url, userWithoutFlag)
+        const body: User = res.body
+        channelOfUserWithoutFlag = body.videoChannels[0].id
       }
 
       {
@@ -399,7 +407,7 @@ describe('Test video blacklist', function () {
       await waitJobs(servers)
     })
 
-    it('Should auto blacklist a video', async function () {
+    it('Should auto blacklist a video on upload', async function () {
       await uploadVideo(servers[0].url, userWithoutFlag, { name: 'blacklisted' })
 
       const res = await getBlacklistedVideosList({
@@ -412,7 +420,45 @@ describe('Test video blacklist', function () {
       expect(res.body.data[0].video.name).to.equal('blacklisted')
     })
 
-    it('Should not auto blacklist a video', async function () {
+    it('Should auto blacklist a video on URL import', async function () {
+      const attributes = {
+        targetUrl: getYoutubeVideoUrl(),
+        name: 'URL import',
+        channelId: channelOfUserWithoutFlag
+      }
+      await importVideo(servers[ 0 ].url, userWithoutFlag, attributes)
+
+      const res = await getBlacklistedVideosList({
+        url: servers[ 0 ].url,
+        token: servers[ 0 ].accessToken,
+        sort: 'createdAt',
+        type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED
+      })
+
+      expect(res.body.total).to.equal(2)
+      expect(res.body.data[1].video.name).to.equal('URL import')
+    })
+
+    it('Should auto blacklist a video on torrent import', async function () {
+      const attributes = {
+        magnetUri: getMagnetURI(),
+        name: 'Torrent import',
+        channelId: channelOfUserWithoutFlag
+      }
+      await importVideo(servers[ 0 ].url, userWithoutFlag, attributes)
+
+      const res = await getBlacklistedVideosList({
+        url: servers[ 0 ].url,
+        token: servers[ 0 ].accessToken,
+        sort: 'createdAt',
+        type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED
+      })
+
+      expect(res.body.total).to.equal(3)
+      expect(res.body.data[2].video.name).to.equal('Torrent import')
+    })
+
+    it('Should not auto blacklist a video on upload if the user has the bypass blacklist flag', async function () {
       await uploadVideo(servers[0].url, userWithFlag, { name: 'not blacklisted' })
 
       const res = await getBlacklistedVideosList({
@@ -421,7 +467,7 @@ describe('Test video blacklist', function () {
         type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED
       })
 
-      expect(res.body.total).to.equal(1)
+      expect(res.body.total).to.equal(3)
     })
   })