Fix auto blacklisting unlisted videos

This commit is contained in:
Chocobozzz 2024-11-12 09:37:34 +01:00
parent 81f19ef47c
commit af7ffcf813
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
2 changed files with 63 additions and 23 deletions

View File

@ -1,18 +1,19 @@
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
import { expect } from 'chai'
import { FIXTURE_URLS } from '@tests/shared/fixture-urls.js'
import { sortObjectComparator } from '@peertube/peertube-core-utils' import { sortObjectComparator } from '@peertube/peertube-core-utils'
import { HttpStatusCode, UserAdminFlag, UserRole, VideoBlacklist, VideoBlacklistType } from '@peertube/peertube-models' import { HttpStatusCode, UserAdminFlag, UserRole, VideoBlacklist, VideoBlacklistType, VideoPrivacy } from '@peertube/peertube-models'
import { import {
BlacklistCommand, BlacklistCommand,
cleanupTests, cleanupTests,
createMultipleServers, createMultipleServers,
doubleFollow, makeActivityPubGetRequest, PeerTubeServer, doubleFollow, makeActivityPubGetRequest,
PeerTubeServer,
setAccessTokensToServers, setAccessTokensToServers,
setDefaultChannelAvatar, setDefaultChannelAvatar,
waitJobs waitJobs
} from '@peertube/peertube-server-commands' } from '@peertube/peertube-server-commands'
import { FIXTURE_URLS } from '@tests/shared/fixture-urls.js'
import { expect } from 'chai'
describe('Test video blacklist', function () { describe('Test video blacklist', function () {
let servers: PeerTubeServer[] = [] let servers: PeerTubeServer[] = []
@ -93,6 +94,7 @@ describe('Test video blacklist', function () {
}) })
describe('When listing manually blacklisted videos', function () { describe('When listing manually blacklisted videos', function () {
it('Should display all the blacklisted videos', async function () { it('Should display all the blacklisted videos', async function () {
const body = await command.list() const body = await command.list()
expect(body.total).to.equal(2) expect(body.total).to.equal(2)
@ -163,6 +165,7 @@ describe('Test video blacklist', function () {
}) })
describe('When updating blacklisted videos', function () { describe('When updating blacklisted videos', function () {
it('Should change the reason', async function () { it('Should change the reason', async function () {
await command.update({ videoId, reason: 'my super reason updated' }) await command.update({ videoId, reason: 'my super reason updated' })
@ -323,9 +326,15 @@ describe('Test video blacklist', function () {
let userWithFlag: string let userWithFlag: string
let channelOfUserWithoutFlag: number let channelOfUserWithoutFlag: number
before(async function () { async function checkBlacklist (videoUUID: string, password?: string) {
this.timeout(20000) await servers[0].videos.get({ id: videoUUID, expectedStatus: HttpStatusCode.UNAUTHORIZED_401 })
if (password) {
await servers[0].videos.getWithPassword({ id: videoUUID, password, expectedStatus: HttpStatusCode.UNAUTHORIZED_401 })
}
}
before(async function () {
await servers[0].config.enableAutoBlacklist() await servers[0].config.enableAutoBlacklist()
{ {
@ -358,27 +367,56 @@ describe('Test video blacklist', function () {
await waitJobs(servers) await waitJobs(servers)
}) })
it('Should auto blacklist a video on upload', async function () { it('Should auto blacklist a public video on upload', async function () {
await servers[0].videos.upload({ token: userWithoutFlag, attributes: { name: 'blacklisted' } }) const video = await servers[0].videos.quickUpload({ token: userWithoutFlag, name: 'blacklisted 1' })
const body = await command.list({ type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED }) const body = await command.list({ sort: '-createdAt', type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED })
expect(body.total).to.equal(1) expect(body.total).to.equal(1)
expect(body.data[0].video.name).to.equal('blacklisted') expect(body.data[0].video.name).to.equal('blacklisted 1')
await checkBlacklist(video.uuid)
})
it('Should auto blacklist an unlisted video on upload', async function () {
const video = await servers[0].videos.quickUpload({ token: userWithoutFlag, name: 'blacklisted 2', privacy: VideoPrivacy.UNLISTED })
const body = await command.list({ sort: '-createdAt', type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED })
expect(body.total).to.equal(2)
expect(body.data[0].video.name).to.equal('blacklisted 2')
await checkBlacklist(video.uuid)
})
it('Should auto blacklist a password protected video on upload', async function () {
const video = await servers[0].videos.upload({
token: userWithoutFlag,
attributes: {
name: 'blacklisted 3',
privacy: VideoPrivacy.PASSWORD_PROTECTED,
videoPasswords: [ 'toto' ]
}
})
const body = await command.list({ sort: '-createdAt', type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED })
expect(body.total).to.equal(3)
expect(body.data[0].video.name).to.equal('blacklisted 3')
await checkBlacklist(video.uuid, 'toto')
}) })
it('Should auto blacklist a video on URL import', async function () { it('Should auto blacklist a video on URL import', async function () {
this.timeout(15000)
const attributes = { const attributes = {
targetUrl: FIXTURE_URLS.goodVideo, targetUrl: FIXTURE_URLS.goodVideo,
name: 'URL import', name: 'URL import',
channelId: channelOfUserWithoutFlag channelId: channelOfUserWithoutFlag
} }
await servers[0].videoImports.importVideo({ token: userWithoutFlag, attributes }) const { video } = await servers[0].videoImports.importVideo({ token: userWithoutFlag, attributes })
const body = await command.list({ sort: 'createdAt', type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED }) const body = await command.list({ sort: '-createdAt', type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED })
expect(body.total).to.equal(2) expect(body.total).to.equal(4)
expect(body.data[1].video.name).to.equal('URL import') expect(body.data[0].video.name).to.equal('URL import')
await checkBlacklist(video.uuid)
}) })
it('Should auto blacklist a video on torrent import', async function () { it('Should auto blacklist a video on torrent import', async function () {
@ -387,18 +425,20 @@ describe('Test video blacklist', function () {
name: 'Torrent import', name: 'Torrent import',
channelId: channelOfUserWithoutFlag channelId: channelOfUserWithoutFlag
} }
await servers[0].videoImports.importVideo({ token: userWithoutFlag, attributes }) const { video } = await servers[0].videoImports.importVideo({ token: userWithoutFlag, attributes })
const body = await command.list({ sort: 'createdAt', type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED }) const body = await command.list({ sort: '-createdAt', type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED })
expect(body.total).to.equal(3) expect(body.total).to.equal(5)
expect(body.data[2].video.name).to.equal('Torrent import') expect(body.data[0].video.name).to.equal('Torrent import')
await checkBlacklist(video.uuid)
}) })
it('Should not auto blacklist a video on upload if the user has the bypass blacklist flag', async function () { it('Should not auto blacklist a video on upload if the user has the bypass blacklist flag', async function () {
await servers[0].videos.upload({ token: userWithFlag, attributes: { name: 'not blacklisted' } }) await servers[0].videos.upload({ token: userWithFlag, attributes: { name: 'not blacklisted' } })
const body = await command.list({ type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED }) const body = await command.list({ type: VideoBlacklistType.AUTO_BEFORE_PUBLISHED })
expect(body.total).to.equal(3) expect(body.total).to.equal(5)
}) })
}) })

View File

@ -2129,6 +2129,8 @@ export class VideoModel extends SequelizeModel<VideoModel> {
}) { }) {
const { urlParamId, checkBlacklist } = options const { urlParamId, checkBlacklist } = options
if (checkBlacklist && this.VideoBlacklist) return true
if (this.privacy === VideoPrivacy.PRIVATE || this.privacy === VideoPrivacy.INTERNAL) { if (this.privacy === VideoPrivacy.PRIVATE || this.privacy === VideoPrivacy.INTERNAL) {
return true return true
} }
@ -2139,8 +2141,6 @@ export class VideoModel extends SequelizeModel<VideoModel> {
return false return false
} }
if (checkBlacklist && this.VideoBlacklist) return true
if (this.privacy === VideoPrivacy.PUBLIC || this.privacy === VideoPrivacy.PASSWORD_PROTECTED) { if (this.privacy === VideoPrivacy.PUBLIC || this.privacy === VideoPrivacy.PASSWORD_PROTECTED) {
return false return false
} }