Introduce blocklist command

This commit is contained in:
Chocobozzz 2021-07-07 16:02:46 +02:00
parent 9fff08cf83
commit 5f8bd4cbb1
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
13 changed files with 230 additions and 385 deletions

View File

@ -4,8 +4,6 @@ import 'mocha'
import * as chai from 'chai' import * as chai from 'chai'
import { import {
AbusesCommand, AbusesCommand,
addAccountToServerBlocklist,
addServerToServerBlocklist,
addVideoCommentThread, addVideoCommentThread,
cleanupTests, cleanupTests,
createUser, createUser,
@ -16,8 +14,6 @@ import {
getVideoCommentThreads, getVideoCommentThreads,
getVideoIdFromUUID, getVideoIdFromUUID,
getVideosList, getVideosList,
removeAccountFromServerBlocklist,
removeServerFromServerBlocklist,
removeUser, removeUser,
removeVideo, removeVideo,
ServerInfo, ServerInfo,
@ -27,7 +23,7 @@ import {
userLogin, userLogin,
waitJobs waitJobs
} from '@shared/extra-utils' } from '@shared/extra-utils'
import { AbuseMessage, AbusePredefinedReasonsString, AbuseState, Account, AdminAbuse, UserAbuse, VideoComment } from '@shared/models' import { AbuseMessage, AbusePredefinedReasonsString, AbuseState, AdminAbuse, UserAbuse, VideoComment } from '@shared/models'
const expect = chai.expect const expect = chai.expect
@ -225,7 +221,7 @@ describe('Test abuses', function () {
const accountToBlock = 'root@' + servers[1].host const accountToBlock = 'root@' + servers[1].host
{ {
await addAccountToServerBlocklist(servers[0].url, servers[0].accessToken, accountToBlock) await servers[0].blocklistCommand.addToServerBlocklist({ account: accountToBlock })
const body = await commands[0].getAdminList() const body = await commands[0].getAdminList()
expect(body.total).to.equal(2) expect(body.total).to.equal(2)
@ -235,7 +231,7 @@ describe('Test abuses', function () {
} }
{ {
await removeAccountFromServerBlocklist(servers[0].url, servers[0].accessToken, accountToBlock) await servers[0].blocklistCommand.removeFromServerBlocklist({ account: accountToBlock })
const body = await commands[0].getAdminList() const body = await commands[0].getAdminList()
expect(body.total).to.equal(3) expect(body.total).to.equal(3)
@ -246,7 +242,7 @@ describe('Test abuses', function () {
const serverToBlock = servers[1].host const serverToBlock = servers[1].host
{ {
await addServerToServerBlocklist(servers[0].url, servers[0].accessToken, servers[1].host) await servers[0].blocklistCommand.addToServerBlocklist({ server: serverToBlock })
const body = await commands[0].getAdminList() const body = await commands[0].getAdminList()
expect(body.total).to.equal(2) expect(body.total).to.equal(2)
@ -256,7 +252,7 @@ describe('Test abuses', function () {
} }
{ {
await removeServerFromServerBlocklist(servers[0].url, servers[0].accessToken, serverToBlock) await servers[0].blocklistCommand.removeFromServerBlocklist({ server: serverToBlock })
const body = await commands[0].getAdminList() const body = await commands[0].getAdminList()
expect(body.total).to.equal(3) expect(body.total).to.equal(3)

View File

@ -2,30 +2,23 @@
import 'mocha' import 'mocha'
import * as chai from 'chai' import * as chai from 'chai'
import { getUserNotifications, markAsReadAllNotifications } from '@shared/extra-utils/users/user-notifications'
import { addUserSubscription, removeUserSubscription } from '@shared/extra-utils/users/user-subscriptions'
import { UserNotification, UserNotificationType } from '@shared/models'
import { import {
addUserSubscription,
addVideoCommentThread,
cleanupTests, cleanupTests,
createUser, createUser,
doubleFollow, doubleFollow,
flushAndRunMultipleServers, flushAndRunMultipleServers,
getUserNotifications,
markAsReadAllNotifications,
removeUserSubscription,
ServerInfo, ServerInfo,
setAccessTokensToServers,
uploadVideo, uploadVideo,
userLogin userLogin,
} from '../../../../shared/extra-utils/index' waitJobs
import { waitJobs } from '../../../../shared/extra-utils/server/jobs' } from '@shared/extra-utils'
import { import { UserNotification, UserNotificationType } from '@shared/models'
addAccountToAccountBlocklist,
addAccountToServerBlocklist,
addServerToAccountBlocklist,
addServerToServerBlocklist,
removeAccountFromAccountBlocklist,
removeAccountFromServerBlocklist,
removeServerFromAccountBlocklist
} from '../../../../shared/extra-utils/users/blocklist'
import { setAccessTokensToServers } from '../../../../shared/extra-utils/users/login'
import { addVideoCommentThread } from '../../../../shared/extra-utils/videos/video-comments'
const expect = chai.expect const expect = chai.expect
@ -134,7 +127,7 @@ describe('Test blocklist', function () {
it('Should block an account', async function () { it('Should block an account', async function () {
this.timeout(10000) this.timeout(10000)
await addAccountToAccountBlocklist(servers[0].url, userToken1, 'user3@' + servers[1].host) await servers[0].blocklistCommand.addToMyBlocklist({ token: userToken1, account: 'user3@' + servers[1].host })
await waitJobs(servers) await waitJobs(servers)
}) })
@ -147,7 +140,7 @@ describe('Test blocklist', function () {
await checkNotifications(servers[0].url, userToken2, notifs) await checkNotifications(servers[0].url, userToken2, notifs)
await removeAccountFromAccountBlocklist(servers[0].url, userToken1, 'user3@' + servers[1].host) await servers[0].blocklistCommand.removeFromMyBlocklist({ token: userToken1, account: 'user3@' + servers[1].host })
}) })
}) })
@ -167,7 +160,7 @@ describe('Test blocklist', function () {
it('Should block an account', async function () { it('Should block an account', async function () {
this.timeout(10000) this.timeout(10000)
await addServerToAccountBlocklist(servers[0].url, userToken1, servers[1].host) await servers[0].blocklistCommand.addToMyBlocklist({ token: userToken1, server: servers[1].host })
await waitJobs(servers) await waitJobs(servers)
}) })
@ -180,7 +173,7 @@ describe('Test blocklist', function () {
await checkNotifications(servers[0].url, userToken2, notifs) await checkNotifications(servers[0].url, userToken2, notifs)
await removeServerFromAccountBlocklist(servers[0].url, userToken1, servers[1].host) await servers[0].blocklistCommand.removeFromMyBlocklist({ token: userToken1, server: servers[1].host })
}) })
}) })
@ -207,7 +200,7 @@ describe('Test blocklist', function () {
it('Should block an account', async function () { it('Should block an account', async function () {
this.timeout(10000) this.timeout(10000)
await addAccountToServerBlocklist(servers[0].url, servers[0].accessToken, 'user3@' + servers[1].host) await servers[0].blocklistCommand.addToServerBlocklist({ account: 'user3@' + servers[1].host })
await waitJobs(servers) await waitJobs(servers)
}) })
@ -215,7 +208,7 @@ describe('Test blocklist', function () {
await checkNotifications(servers[0].url, userToken1, []) await checkNotifications(servers[0].url, userToken1, [])
await checkNotifications(servers[0].url, userToken2, []) await checkNotifications(servers[0].url, userToken2, [])
await removeAccountFromServerBlocklist(servers[0].url, servers[0].accessToken, 'user3@' + servers[1].host) await servers[0].blocklistCommand.removeFromServerBlocklist({ account: 'user3@' + servers[1].host })
}) })
}) })
@ -242,7 +235,7 @@ describe('Test blocklist', function () {
it('Should block an account', async function () { it('Should block an account', async function () {
this.timeout(10000) this.timeout(10000)
await addServerToServerBlocklist(servers[0].url, servers[0].accessToken, servers[1].host) await servers[0].blocklistCommand.addToServerBlocklist({ server: servers[1].host })
await waitJobs(servers) await waitJobs(servers)
}) })

View File

@ -3,46 +3,27 @@
import 'mocha' import 'mocha'
import * as chai from 'chai' import * as chai from 'chai'
import { import {
addAccountToAccountBlocklist,
addAccountToServerBlocklist,
addServerToAccountBlocklist,
addServerToServerBlocklist,
addVideoCommentReply, addVideoCommentReply,
addVideoCommentThread, addVideoCommentThread,
BlocklistCommand,
cleanupTests, cleanupTests,
createUser, createUser,
deleteVideoComment, deleteVideoComment,
doubleFollow, doubleFollow,
findCommentId, findCommentId,
flushAndRunMultipleServers, flushAndRunMultipleServers,
getAccountBlocklistByAccount,
getAccountBlocklistByServer,
getServerBlocklistByAccount,
getServerBlocklistByServer,
getUserNotifications, getUserNotifications,
getVideoCommentThreads, getVideoCommentThreads,
getVideosList, getVideosList,
getVideosListWithToken, getVideosListWithToken,
getVideoThreadComments, getVideoThreadComments,
removeAccountFromAccountBlocklist,
removeAccountFromServerBlocklist,
removeServerFromAccountBlocklist,
removeServerFromServerBlocklist,
ServerInfo, ServerInfo,
setAccessTokensToServers, setAccessTokensToServers,
uploadVideo, uploadVideo,
userLogin, userLogin,
waitJobs waitJobs
} from '@shared/extra-utils' } from '@shared/extra-utils'
import { import { UserNotification, UserNotificationType, Video, VideoComment, VideoCommentThreadTree } from '@shared/models'
AccountBlock,
ServerBlock,
UserNotification,
UserNotificationType,
Video,
VideoComment,
VideoCommentThreadTree
} from '@shared/models'
const expect = chai.expect const expect = chai.expect
@ -108,6 +89,8 @@ describe('Test blocklist', function () {
let userModeratorToken: string let userModeratorToken: string
let userToken2: string let userToken2: string
let command: BlocklistCommand
before(async function () { before(async function () {
this.timeout(120000) this.timeout(120000)
@ -167,6 +150,8 @@ describe('Test blocklist', function () {
} }
await waitJobs(servers) await waitJobs(servers)
command = servers[0].blocklistCommand
}) })
describe('User blocklist', function () { describe('User blocklist', function () {
@ -181,7 +166,7 @@ describe('Test blocklist', function () {
}) })
it('Should block a remote account', async function () { it('Should block a remote account', async function () {
await addAccountToAccountBlocklist(servers[0].url, servers[0].accessToken, 'user2@localhost:' + servers[1].port) await command.addToMyBlocklist({ account: 'user2@localhost:' + servers[1].port })
}) })
it('Should hide its videos', async function () { it('Should hide its videos', async function () {
@ -195,7 +180,7 @@ describe('Test blocklist', function () {
}) })
it('Should block a local account', async function () { it('Should block a local account', async function () {
await addAccountToAccountBlocklist(servers[0].url, servers[0].accessToken, 'user1') await command.addToMyBlocklist({ account: 'user1' })
}) })
it('Should hide its videos', async function () { it('Should hide its videos', async function () {
@ -251,12 +236,10 @@ describe('Test blocklist', function () {
it('Should list blocked accounts', async function () { it('Should list blocked accounts', async function () {
{ {
const res = await getAccountBlocklistByAccount(servers[0].url, servers[0].accessToken, 0, 1, 'createdAt') const body = await command.listMyAccountBlocklist({ start: 0, count: 1, sort: 'createdAt' })
const blocks: AccountBlock[] = res.body.data expect(body.total).to.equal(2)
expect(res.body.total).to.equal(2) const block = body.data[0]
const block = blocks[0]
expect(block.byAccount.displayName).to.equal('root') expect(block.byAccount.displayName).to.equal('root')
expect(block.byAccount.name).to.equal('root') expect(block.byAccount.name).to.equal('root')
expect(block.blockedAccount.displayName).to.equal('user2') expect(block.blockedAccount.displayName).to.equal('user2')
@ -265,12 +248,10 @@ describe('Test blocklist', function () {
} }
{ {
const res = await getAccountBlocklistByAccount(servers[0].url, servers[0].accessToken, 1, 2, 'createdAt') const body = await command.listMyAccountBlocklist({ start: 1, count: 2, sort: 'createdAt' })
const blocks: AccountBlock[] = res.body.data expect(body.total).to.equal(2)
expect(res.body.total).to.equal(2) const block = body.data[0]
const block = blocks[0]
expect(block.byAccount.displayName).to.equal('root') expect(block.byAccount.displayName).to.equal('root')
expect(block.byAccount.name).to.equal('root') expect(block.byAccount.name).to.equal('root')
expect(block.blockedAccount.displayName).to.equal('user1') expect(block.blockedAccount.displayName).to.equal('user1')
@ -335,7 +316,7 @@ describe('Test blocklist', function () {
}) })
it('Should unblock the remote account', async function () { it('Should unblock the remote account', async function () {
await removeAccountFromAccountBlocklist(servers[0].url, servers[0].accessToken, 'user2@localhost:' + servers[1].port) await command.removeFromMyBlocklist({ account: 'user2@localhost:' + servers[1].port })
}) })
it('Should display its videos', async function () { it('Should display its videos', async function () {
@ -374,7 +355,7 @@ describe('Test blocklist', function () {
}) })
it('Should unblock the local account', async function () { it('Should unblock the local account', async function () {
await removeAccountFromAccountBlocklist(servers[0].url, servers[0].accessToken, 'user1') await command.removeFromMyBlocklist({ account: 'user1' })
}) })
it('Should display its comments', function () { it('Should display its comments', function () {
@ -402,6 +383,7 @@ describe('Test blocklist', function () {
}) })
describe('When managing server blocklist', function () { describe('When managing server blocklist', function () {
it('Should list all videos', function () { it('Should list all videos', function () {
return checkAllVideos(servers[0].url, servers[0].accessToken) return checkAllVideos(servers[0].url, servers[0].accessToken)
}) })
@ -411,7 +393,7 @@ describe('Test blocklist', function () {
}) })
it('Should block a remote server', async function () { it('Should block a remote server', async function () {
await addServerToAccountBlocklist(servers[0].url, servers[0].accessToken, 'localhost:' + servers[1].port) await command.addToMyBlocklist({ server: 'localhost:' + servers[1].port })
}) })
it('Should hide its videos', async function () { it('Should hide its videos', async function () {
@ -464,19 +446,17 @@ describe('Test blocklist', function () {
}) })
it('Should list blocked servers', async function () { it('Should list blocked servers', async function () {
const res = await getServerBlocklistByAccount(servers[0].url, servers[0].accessToken, 0, 1, 'createdAt') const body = await command.listMyServerBlocklist({ start: 0, count: 1, sort: 'createdAt' })
const blocks: ServerBlock[] = res.body.data expect(body.total).to.equal(1)
expect(res.body.total).to.equal(1) const block = body.data[0]
const block = blocks[0]
expect(block.byAccount.displayName).to.equal('root') expect(block.byAccount.displayName).to.equal('root')
expect(block.byAccount.name).to.equal('root') expect(block.byAccount.name).to.equal('root')
expect(block.blockedServer.host).to.equal('localhost:' + servers[1].port) expect(block.blockedServer.host).to.equal('localhost:' + servers[1].port)
}) })
it('Should unblock the remote server', async function () { it('Should unblock the remote server', async function () {
await removeServerFromAccountBlocklist(servers[0].url, servers[0].accessToken, 'localhost:' + servers[1].port) await command.removeFromMyBlocklist({ server: 'localhost:' + servers[1].port })
}) })
it('Should display its videos', function () { it('Should display its videos', function () {
@ -524,7 +504,7 @@ describe('Test blocklist', function () {
}) })
it('Should block a remote account', async function () { it('Should block a remote account', async function () {
await addAccountToServerBlocklist(servers[0].url, servers[0].accessToken, 'user2@localhost:' + servers[1].port) await command.addToServerBlocklist({ account: 'user2@localhost:' + servers[1].port })
}) })
it('Should hide its videos', async function () { it('Should hide its videos', async function () {
@ -540,7 +520,7 @@ describe('Test blocklist', function () {
}) })
it('Should block a local account', async function () { it('Should block a local account', async function () {
await addAccountToServerBlocklist(servers[0].url, servers[0].accessToken, 'user1') await command.addToServerBlocklist({ account: 'user1' })
}) })
it('Should hide its videos', async function () { it('Should hide its videos', async function () {
@ -598,12 +578,10 @@ describe('Test blocklist', function () {
it('Should list blocked accounts', async function () { it('Should list blocked accounts', async function () {
{ {
const res = await getAccountBlocklistByServer(servers[0].url, servers[0].accessToken, 0, 1, 'createdAt') const body = await command.listServerAccountBlocklist({ start: 0, count: 1, sort: 'createdAt' })
const blocks: AccountBlock[] = res.body.data expect(body.total).to.equal(2)
expect(res.body.total).to.equal(2) const block = body.data[0]
const block = blocks[0]
expect(block.byAccount.displayName).to.equal('peertube') expect(block.byAccount.displayName).to.equal('peertube')
expect(block.byAccount.name).to.equal('peertube') expect(block.byAccount.name).to.equal('peertube')
expect(block.blockedAccount.displayName).to.equal('user2') expect(block.blockedAccount.displayName).to.equal('user2')
@ -612,12 +590,10 @@ describe('Test blocklist', function () {
} }
{ {
const res = await getAccountBlocklistByServer(servers[0].url, servers[0].accessToken, 1, 2, 'createdAt') const body = await command.listServerAccountBlocklist({ start: 1, count: 2, sort: 'createdAt' })
const blocks: AccountBlock[] = res.body.data expect(body.total).to.equal(2)
expect(res.body.total).to.equal(2) const block = body.data[0]
const block = blocks[0]
expect(block.byAccount.displayName).to.equal('peertube') expect(block.byAccount.displayName).to.equal('peertube')
expect(block.byAccount.name).to.equal('peertube') expect(block.byAccount.name).to.equal('peertube')
expect(block.blockedAccount.displayName).to.equal('user1') expect(block.blockedAccount.displayName).to.equal('user1')
@ -627,7 +603,7 @@ describe('Test blocklist', function () {
}) })
it('Should unblock the remote account', async function () { it('Should unblock the remote account', async function () {
await removeAccountFromServerBlocklist(servers[0].url, servers[0].accessToken, 'user2@localhost:' + servers[1].port) await command.removeFromServerBlocklist({ account: 'user2@localhost:' + servers[1].port })
}) })
it('Should display its videos', async function () { it('Should display its videos', async function () {
@ -643,7 +619,7 @@ describe('Test blocklist', function () {
}) })
it('Should unblock the local account', async function () { it('Should unblock the local account', async function () {
await removeAccountFromServerBlocklist(servers[0].url, servers[0].accessToken, 'user1') await command.removeFromServerBlocklist({ account: 'user1' })
}) })
it('Should display its comments', async function () { it('Should display its comments', async function () {
@ -686,7 +662,7 @@ describe('Test blocklist', function () {
}) })
it('Should block a remote server', async function () { it('Should block a remote server', async function () {
await addServerToServerBlocklist(servers[0].url, servers[0].accessToken, 'localhost:' + servers[1].port) await command.addToServerBlocklist({ server: 'localhost:' + servers[1].port })
}) })
it('Should hide its videos', async function () { it('Should hide its videos', async function () {
@ -758,19 +734,17 @@ describe('Test blocklist', function () {
}) })
it('Should list blocked servers', async function () { it('Should list blocked servers', async function () {
const res = await getServerBlocklistByServer(servers[0].url, servers[0].accessToken, 0, 1, 'createdAt') const body = await command.listServerServerBlocklist({ start: 0, count: 1, sort: 'createdAt' })
const blocks: ServerBlock[] = res.body.data expect(body.total).to.equal(1)
expect(res.body.total).to.equal(1) const block = body.data[0]
const block = blocks[0]
expect(block.byAccount.displayName).to.equal('peertube') expect(block.byAccount.displayName).to.equal('peertube')
expect(block.byAccount.name).to.equal('peertube') expect(block.byAccount.name).to.equal('peertube')
expect(block.blockedServer.host).to.equal('localhost:' + servers[1].port) expect(block.blockedServer.host).to.equal('localhost:' + servers[1].port)
}) })
it('Should unblock the remote server', async function () { it('Should unblock the remote server', async function () {
await removeServerFromServerBlocklist(servers[0].url, servers[0].accessToken, 'localhost:' + servers[1].port) await command.removeFromServerBlocklist({ server: 'localhost:' + servers[1].port })
}) })
it('Should list all videos', async function () { it('Should list all videos', async function () {

View File

@ -3,7 +3,6 @@
import 'mocha' import 'mocha'
import * as chai from 'chai' import * as chai from 'chai'
import { import {
addAccountToAccountBlocklist,
addVideoCommentReply, addVideoCommentReply,
addVideoCommentThread, addVideoCommentThread,
checkCommentMention, checkCommentMention,
@ -14,7 +13,6 @@ import {
getVideoThreadComments, getVideoThreadComments,
MockSmtpServer, MockSmtpServer,
prepareNotificationsTest, prepareNotificationsTest,
removeAccountFromAccountBlocklist,
ServerInfo, ServerInfo,
updateMyUser, updateMyUser,
uploadVideo, uploadVideo,
@ -86,7 +84,7 @@ describe('Test comments notifications', function () {
it('Should not send a new comment notification if the account is muted', async function () { it('Should not send a new comment notification if the account is muted', async function () {
this.timeout(20000) this.timeout(20000)
await addAccountToAccountBlocklist(servers[0].url, userAccessToken, 'root') await servers[0].blocklistCommand.addToMyBlocklist({ token: userAccessToken, account: 'root' })
const resVideo = await uploadVideo(servers[0].url, userAccessToken, { name: 'super video' }) const resVideo = await uploadVideo(servers[0].url, userAccessToken, { name: 'super video' })
const uuid = resVideo.body.video.uuid const uuid = resVideo.body.video.uuid
@ -97,7 +95,7 @@ describe('Test comments notifications', function () {
await waitJobs(servers) await waitJobs(servers)
await checkNewCommentOnMyVideo(baseParams, uuid, commentId, commentId, 'absence') await checkNewCommentOnMyVideo(baseParams, uuid, commentId, commentId, 'absence')
await removeAccountFromAccountBlocklist(servers[0].url, userAccessToken, 'root') await servers[0].blocklistCommand.removeFromMyBlocklist({ token: userAccessToken, account: 'root' })
}) })
it('Should send a new comment notification after a local comment on my video', async function () { it('Should send a new comment notification after a local comment on my video', async function () {
@ -244,7 +242,7 @@ describe('Test comments notifications', function () {
it('Should not send a new mention notification if the account is muted', async function () { it('Should not send a new mention notification if the account is muted', async function () {
this.timeout(10000) this.timeout(10000)
await addAccountToAccountBlocklist(servers[0].url, userAccessToken, 'root') await servers[0].blocklistCommand.addToMyBlocklist({ token: userAccessToken, account: 'root' })
const resVideo = await uploadVideo(servers[0].url, servers[0].accessToken, { name: 'super video' }) const resVideo = await uploadVideo(servers[0].url, servers[0].accessToken, { name: 'super video' })
const uuid = resVideo.body.video.uuid const uuid = resVideo.body.video.uuid
@ -255,7 +253,7 @@ describe('Test comments notifications', function () {
await waitJobs(servers) await waitJobs(servers)
await checkCommentMention(baseParams, uuid, commentId, commentId, 'super root name', 'absence') await checkCommentMention(baseParams, uuid, commentId, commentId, 'super root name', 'absence')
await removeAccountFromAccountBlocklist(servers[0].url, userAccessToken, 'root') await servers[0].blocklistCommand.removeFromMyBlocklist({ token: userAccessToken, account: 'root' })
}) })
it('Should not send a new mention notification if the remote account mention a local account', async function () { it('Should not send a new mention notification if the remote account mention a local account', async function () {

View File

@ -4,10 +4,6 @@ import 'mocha'
import * as chai from 'chai' import * as chai from 'chai'
import { HttpStatusCode } from '@shared/core-utils' import { HttpStatusCode } from '@shared/core-utils'
import { import {
addAccountToAccountBlocklist,
addAccountToServerBlocklist,
addServerToAccountBlocklist,
addServerToServerBlocklist,
addVideoChannel, addVideoChannel,
addVideoInPlaylist, addVideoInPlaylist,
addVideoToBlacklist, addVideoToBlacklist,
@ -31,10 +27,6 @@ import {
getVideoPlaylistPrivacies, getVideoPlaylistPrivacies,
getVideoPlaylistsList, getVideoPlaylistsList,
getVideoPlaylistWithToken, getVideoPlaylistWithToken,
removeAccountFromAccountBlocklist,
removeAccountFromServerBlocklist,
removeServerFromAccountBlocklist,
removeServerFromServerBlocklist,
removeUser, removeUser,
removeVideoFromBlacklist, removeVideoFromBlacklist,
removeVideoFromPlaylist, removeVideoFromPlaylist,
@ -760,56 +752,58 @@ describe('Test video playlists', function () {
it('Should update the element type if the account or server of the video is blocked', async function () { it('Should update the element type if the account or server of the video is blocked', async function () {
this.timeout(90000) this.timeout(90000)
const command = servers[0].blocklistCommand
const name = 'video 90' const name = 'video 90'
const position = 2 const position = 2
{ {
await addAccountToAccountBlocklist(servers[0].url, userAccessTokenServer1, 'root@localhost:' + servers[1].port) await command.addToMyBlocklist({ token: userAccessTokenServer1, account: 'root@localhost:' + servers[1].port })
await waitJobs(servers) await waitJobs(servers)
await checkPlaylistElementType(groupUser1, playlistServer1UUID2, VideoPlaylistElementType.UNAVAILABLE, position, name, 3) await checkPlaylistElementType(groupUser1, playlistServer1UUID2, VideoPlaylistElementType.UNAVAILABLE, position, name, 3)
await checkPlaylistElementType(group2, playlistServer1UUID2, VideoPlaylistElementType.REGULAR, position, name, 3) await checkPlaylistElementType(group2, playlistServer1UUID2, VideoPlaylistElementType.REGULAR, position, name, 3)
await removeAccountFromAccountBlocklist(servers[0].url, userAccessTokenServer1, 'root@localhost:' + servers[1].port) await command.removeFromMyBlocklist({ token: userAccessTokenServer1, account: 'root@localhost:' + servers[1].port })
await waitJobs(servers) await waitJobs(servers)
await checkPlaylistElementType(group2, playlistServer1UUID2, VideoPlaylistElementType.REGULAR, position, name, 3) await checkPlaylistElementType(group2, playlistServer1UUID2, VideoPlaylistElementType.REGULAR, position, name, 3)
} }
{ {
await addServerToAccountBlocklist(servers[0].url, userAccessTokenServer1, 'localhost:' + servers[1].port) await command.addToMyBlocklist({ token: userAccessTokenServer1, server: 'localhost:' + servers[1].port })
await waitJobs(servers) await waitJobs(servers)
await checkPlaylistElementType(groupUser1, playlistServer1UUID2, VideoPlaylistElementType.UNAVAILABLE, position, name, 3) await checkPlaylistElementType(groupUser1, playlistServer1UUID2, VideoPlaylistElementType.UNAVAILABLE, position, name, 3)
await checkPlaylistElementType(group2, playlistServer1UUID2, VideoPlaylistElementType.REGULAR, position, name, 3) await checkPlaylistElementType(group2, playlistServer1UUID2, VideoPlaylistElementType.REGULAR, position, name, 3)
await removeServerFromAccountBlocklist(servers[0].url, userAccessTokenServer1, 'localhost:' + servers[1].port) await command.removeFromMyBlocklist({ token: userAccessTokenServer1, server: 'localhost:' + servers[1].port })
await waitJobs(servers) await waitJobs(servers)
await checkPlaylistElementType(group2, playlistServer1UUID2, VideoPlaylistElementType.REGULAR, position, name, 3) await checkPlaylistElementType(group2, playlistServer1UUID2, VideoPlaylistElementType.REGULAR, position, name, 3)
} }
{ {
await addAccountToServerBlocklist(servers[0].url, servers[0].accessToken, 'root@localhost:' + servers[1].port) await command.addToServerBlocklist({ account: 'root@localhost:' + servers[1].port })
await waitJobs(servers) await waitJobs(servers)
await checkPlaylistElementType(groupUser1, playlistServer1UUID2, VideoPlaylistElementType.UNAVAILABLE, position, name, 3) await checkPlaylistElementType(groupUser1, playlistServer1UUID2, VideoPlaylistElementType.UNAVAILABLE, position, name, 3)
await checkPlaylistElementType(group2, playlistServer1UUID2, VideoPlaylistElementType.REGULAR, position, name, 3) await checkPlaylistElementType(group2, playlistServer1UUID2, VideoPlaylistElementType.REGULAR, position, name, 3)
await removeAccountFromServerBlocklist(servers[0].url, servers[0].accessToken, 'root@localhost:' + servers[1].port) await command.removeFromServerBlocklist({ account: 'root@localhost:' + servers[1].port })
await waitJobs(servers) await waitJobs(servers)
await checkPlaylistElementType(group2, playlistServer1UUID2, VideoPlaylistElementType.REGULAR, position, name, 3) await checkPlaylistElementType(group2, playlistServer1UUID2, VideoPlaylistElementType.REGULAR, position, name, 3)
} }
{ {
await addServerToServerBlocklist(servers[0].url, servers[0].accessToken, 'localhost:' + servers[1].port) await command.addToServerBlocklist({ server: 'localhost:' + servers[1].port })
await waitJobs(servers) await waitJobs(servers)
await checkPlaylistElementType(groupUser1, playlistServer1UUID2, VideoPlaylistElementType.UNAVAILABLE, position, name, 3) await checkPlaylistElementType(groupUser1, playlistServer1UUID2, VideoPlaylistElementType.UNAVAILABLE, position, name, 3)
await checkPlaylistElementType(group2, playlistServer1UUID2, VideoPlaylistElementType.REGULAR, position, name, 3) await checkPlaylistElementType(group2, playlistServer1UUID2, VideoPlaylistElementType.REGULAR, position, name, 3)
await removeServerFromServerBlocklist(servers[0].url, servers[0].accessToken, 'localhost:' + servers[1].port) await command.removeFromServerBlocklist({ server: 'localhost:' + servers[1].port })
await waitJobs(servers) await waitJobs(servers)
await checkPlaylistElementType(group2, playlistServer1UUID2, VideoPlaylistElementType.REGULAR, position, name, 3) await checkPlaylistElementType(group2, playlistServer1UUID2, VideoPlaylistElementType.REGULAR, position, name, 3)

View File

@ -3,7 +3,6 @@
import 'mocha' import 'mocha'
import * as chai from 'chai' import * as chai from 'chai'
import { import {
addAccountToAccountBlocklist,
cleanupTests, cleanupTests,
flushAndRunServer, flushAndRunServer,
generateUserAccessToken, generateUserAccessToken,
@ -115,7 +114,7 @@ describe('Test a videos overview', function () {
it('Should hide muted accounts', async function () { it('Should hide muted accounts', async function () {
const token = await generateUserAccessToken(server, 'choco') const token = await generateUserAccessToken(server, 'choco')
await addAccountToAccountBlocklist(server.url, token, 'root@' + server.host) await server.blocklistCommand.addToMyBlocklist({ token, account: 'root@' + server.host })
{ {
const body = await server.overviewsCommand.getVideos({ page: 1 }) const body = await server.overviewsCommand.getVideos({ page: 1 })

View File

@ -4,8 +4,6 @@ import 'mocha'
import { expect } from 'chai' import { expect } from 'chai'
import { HttpStatusCode } from '@shared/core-utils' import { HttpStatusCode } from '@shared/core-utils'
import { import {
addAccountToServerBlocklist,
addServerToAccountBlocklist,
cleanupTests, cleanupTests,
doubleFollow, doubleFollow,
flushAndRunMultipleServers, flushAndRunMultipleServers,
@ -13,7 +11,6 @@ import {
killallServers, killallServers,
makeGetRequest, makeGetRequest,
MockBlocklist, MockBlocklist,
removeAccountFromServerBlocklist,
reRunServer, reRunServer,
ServerInfo, ServerInfo,
setAccessTokensToServers, setAccessTokensToServers,
@ -147,7 +144,7 @@ describe('Official plugin auto-mute', function () {
expect(res.body.total).to.equal(1) expect(res.body.total).to.equal(1)
} }
await removeAccountFromServerBlocklist(servers[0].url, servers[0].accessToken, account) await servers[0].blocklistCommand.removeFromServerBlocklist({ account })
{ {
const res = await getVideosList(servers[0].url) const res = await getVideosList(servers[0].url)
@ -201,8 +198,8 @@ describe('Official plugin auto-mute', function () {
} }
}) })
await addAccountToServerBlocklist(servers[0].url, servers[0].accessToken, 'root@localhost:' + servers[1].port) await servers[0].blocklistCommand.addToServerBlocklist({ account: 'root@localhost:' + servers[1].port })
await addServerToAccountBlocklist(servers[0].url, servers[0].accessToken, 'localhost:' + servers[1].port) await servers[0].blocklistCommand.addToMyBlocklist({ server: 'localhost:' + servers[1].port })
const res = await makeGetRequest({ const res = await makeGetRequest({
url: servers[0].url, url: servers[0].url,

View File

@ -3,16 +3,10 @@
import 'mocha' import 'mocha'
import * as chai from 'chai' import * as chai from 'chai'
import * as xmlParser from 'fast-xml-parser' import * as xmlParser from 'fast-xml-parser'
import { HttpStatusCode } from '@shared/core-utils'
import { import {
addAccountToAccountBlocklist, addUserSubscription,
addAccountToServerBlocklist, addVideoCommentThread,
removeAccountFromServerBlocklist
} from '@shared/extra-utils/users/blocklist'
import { addUserSubscription, listUserSubscriptionVideos } from '@shared/extra-utils/users/user-subscriptions'
import { VideoPrivacy } from '@shared/models'
import { ScopedToken } from '@shared/models/users/user-scoped-token'
import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes'
import {
cleanupTests, cleanupTests,
createUser, createUser,
doubleFollow, doubleFollow,
@ -20,16 +14,17 @@ import {
flushAndRunServer, flushAndRunServer,
getMyUserInformation, getMyUserInformation,
getUserScopedTokens, getUserScopedTokens,
listUserSubscriptionVideos,
renewUserScopedTokens, renewUserScopedTokens,
ServerInfo, ServerInfo,
setAccessTokensToServers, setAccessTokensToServers,
uploadVideo, uploadVideo,
uploadVideoAndGetId, uploadVideoAndGetId,
userLogin userLogin,
} from '../../../shared/extra-utils' waitJobs
import { waitJobs } from '../../../shared/extra-utils/server/jobs' } from '@shared/extra-utils'
import { addVideoCommentThread } from '../../../shared/extra-utils/videos/video-comments' import { User, VideoPrivacy } from '@shared/models'
import { User } from '../../../shared/models/users' import { ScopedToken } from '@shared/models/users/user-scoped-token'
chai.use(require('chai-xml')) chai.use(require('chai-xml'))
chai.use(require('chai-json-schema')) chai.use(require('chai-json-schema'))
@ -271,7 +266,7 @@ describe('Test syndication feeds', () => {
const remoteHandle = 'root@localhost:' + servers[0].port const remoteHandle = 'root@localhost:' + servers[0].port
await addAccountToServerBlocklist(servers[1].url, servers[1].accessToken, remoteHandle) await servers[1].blocklistCommand.addToServerBlocklist({ account: remoteHandle })
{ {
const json = await servers[1].feedCommand.getJSON({ feed: 'video-comments', query: { version: 2 } }) const json = await servers[1].feedCommand.getJSON({ feed: 'video-comments', query: { version: 2 } })
@ -279,7 +274,7 @@ describe('Test syndication feeds', () => {
expect(jsonObj.items.length).to.be.equal(0) expect(jsonObj.items.length).to.be.equal(0)
} }
await removeAccountFromServerBlocklist(servers[1].url, servers[1].accessToken, remoteHandle) await servers[1].blocklistCommand.removeFromServerBlocklist({ account: remoteHandle })
{ {
const videoUUID = (await uploadVideoAndGetId({ server: servers[1], videoName: 'server 2' })).uuid const videoUUID = (await uploadVideoAndGetId({ server: servers[1], videoName: 'server 2' })).uuid
@ -292,7 +287,7 @@ describe('Test syndication feeds', () => {
expect(jsonObj.items.length).to.be.equal(3) expect(jsonObj.items.length).to.be.equal(3)
} }
await addAccountToAccountBlocklist(servers[1].url, servers[1].accessToken, remoteHandle) await servers[1].blocklistCommand.addToMyBlocklist({ account: remoteHandle })
{ {
const json = await servers[1].feedCommand.getJSON({ feed: 'video-comments', query: { version: 4 } }) const json = await servers[1].feedCommand.getJSON({ feed: 'video-comments', query: { version: 4 } })

View File

@ -17,7 +17,7 @@ import { OverviewsCommand } from '../overviews'
import { makeGetRequest } from '../requests/requests' import { makeGetRequest } from '../requests/requests'
import { SearchCommand } from '../search' import { SearchCommand } from '../search'
import { SocketIOCommand } from '../socket' import { SocketIOCommand } from '../socket'
import { AccountsCommand } from '../users' import { AccountsCommand, BlocklistCommand } from '../users'
import { ConfigCommand } from './config-command' import { ConfigCommand } from './config-command'
import { ContactFormCommand } from './contact-form-command' import { ContactFormCommand } from './contact-form-command'
import { DebugCommand } from './debug-command' import { DebugCommand } from './debug-command'
@ -97,6 +97,7 @@ interface ServerInfo {
configCommand?: ConfigCommand configCommand?: ConfigCommand
socketIOCommand?: SocketIOCommand socketIOCommand?: SocketIOCommand
accountsCommand?: AccountsCommand accountsCommand?: AccountsCommand
blocklistCommand?: BlocklistCommand
} }
function parallelTests () { function parallelTests () {
@ -320,6 +321,7 @@ async function runServer (server: ServerInfo, configOverrideArg?: any, args = []
server.configCommand = new ConfigCommand(server) server.configCommand = new ConfigCommand(server)
server.socketIOCommand = new SocketIOCommand(server) server.socketIOCommand = new SocketIOCommand(server)
server.accountsCommand = new AccountsCommand(server) server.accountsCommand = new AccountsCommand(server)
server.blocklistCommand = new BlocklistCommand(server)
res(server) res(server)
}) })

View File

@ -5,7 +5,7 @@ export class SocketIOCommand extends AbstractCommand {
getUserNotificationSocket (options: OverrideCommandOptions = {}) { getUserNotificationSocket (options: OverrideCommandOptions = {}) {
return io(this.server.url + '/user-notifications', { return io(this.server.url + '/user-notifications', {
query: { accessToken: this.server.accessToken } query: { accessToken: options.token ?? this.server.accessToken }
}) })
} }

View File

@ -0,0 +1,135 @@
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
import { HttpStatusCode } from '@shared/core-utils'
import { AccountBlock, ResultList, ServerBlock } from '@shared/models'
import { AbstractCommand, OverrideCommandOptions } from '../shared'
type ListBlocklistOptions = OverrideCommandOptions & {
start: number
count: number
sort: string // default -createdAt
}
export class BlocklistCommand extends AbstractCommand {
listMyAccountBlocklist (options: ListBlocklistOptions) {
const path = '/api/v1/users/me/blocklist/accounts'
return this.listBlocklist<AccountBlock>(options, path)
}
listMyServerBlocklist (options: ListBlocklistOptions) {
const path = '/api/v1/users/me/blocklist/servers'
return this.listBlocklist<ServerBlock>(options, path)
}
listServerAccountBlocklist (options: ListBlocklistOptions) {
const path = '/api/v1/server/blocklist/accounts'
return this.listBlocklist<AccountBlock>(options, path)
}
listServerServerBlocklist (options: ListBlocklistOptions) {
const path = '/api/v1/server/blocklist/servers'
return this.listBlocklist<ServerBlock>(options, path)
}
// ---------------------------------------------------------------------------
addToMyBlocklist (options: OverrideCommandOptions & {
account?: string
server?: string
}) {
const { account, server } = options
const path = account
? '/api/v1/users/me/blocklist/accounts'
: '/api/v1/users/me/blocklist/servers'
return this.postBodyRequest({
...options,
path,
fields: {
accountName: account,
host: server
},
defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
})
}
addToServerBlocklist (options: OverrideCommandOptions & {
account?: string
server?: string
}) {
const { account, server } = options
const path = account
? '/api/v1/server/blocklist/accounts'
: '/api/v1/server/blocklist/servers'
return this.postBodyRequest({
...options,
path,
fields: {
accountName: account,
host: server
},
defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
})
}
// ---------------------------------------------------------------------------
removeFromMyBlocklist (options: OverrideCommandOptions & {
account?: string
server?: string
}) {
const { account, server } = options
const path = account
? '/api/v1/users/me/blocklist/accounts/' + account
: '/api/v1/users/me/blocklist/servers/' + server
return this.deleteRequest({
...options,
path,
defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
})
}
removeFromServerBlocklist (options: OverrideCommandOptions & {
account?: string
server?: string
}) {
const { account, server } = options
const path = account
? '/api/v1/server/blocklist/accounts/' + account
: '/api/v1/server/blocklist/servers/' + server
return this.deleteRequest({
...options,
path,
defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
})
}
private listBlocklist <T> (options: ListBlocklistOptions, path: string) {
const { start, count, sort = '-createdAt' } = options
return this.getRequestBody<ResultList<T>>({
...options,
path,
query: { start, count, sort },
defaultExpectedStatus: HttpStatusCode.OK_200
})
}
}

View File

@ -1,238 +0,0 @@
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
import { makeGetRequest, makeDeleteRequest, makePostBodyRequest } from '../requests/requests'
import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes'
function getAccountBlocklistByAccount (
url: string,
token: string,
start: number,
count: number,
sort = '-createdAt',
statusCodeExpected = HttpStatusCode.OK_200
) {
const path = '/api/v1/users/me/blocklist/accounts'
return makeGetRequest({
url,
token,
query: { start, count, sort },
path,
statusCodeExpected
})
}
function addAccountToAccountBlocklist (
url: string,
token: string,
accountToBlock: string,
statusCodeExpected = HttpStatusCode.NO_CONTENT_204
) {
const path = '/api/v1/users/me/blocklist/accounts'
return makePostBodyRequest({
url,
path,
token,
fields: {
accountName: accountToBlock
},
statusCodeExpected
})
}
function removeAccountFromAccountBlocklist (
url: string,
token: string,
accountToUnblock: string,
statusCodeExpected = HttpStatusCode.NO_CONTENT_204
) {
const path = '/api/v1/users/me/blocklist/accounts/' + accountToUnblock
return makeDeleteRequest({
url,
path,
token,
statusCodeExpected
})
}
function getServerBlocklistByAccount (
url: string,
token: string,
start: number,
count: number,
sort = '-createdAt',
statusCodeExpected = HttpStatusCode.OK_200
) {
const path = '/api/v1/users/me/blocklist/servers'
return makeGetRequest({
url,
token,
query: { start, count, sort },
path,
statusCodeExpected
})
}
function addServerToAccountBlocklist (
url: string,
token: string,
serverToBlock: string,
statusCodeExpected = HttpStatusCode.NO_CONTENT_204
) {
const path = '/api/v1/users/me/blocklist/servers'
return makePostBodyRequest({
url,
path,
token,
fields: {
host: serverToBlock
},
statusCodeExpected
})
}
function removeServerFromAccountBlocklist (
url: string,
token: string,
serverToBlock: string,
statusCodeExpected = HttpStatusCode.NO_CONTENT_204
) {
const path = '/api/v1/users/me/blocklist/servers/' + serverToBlock
return makeDeleteRequest({
url,
path,
token,
statusCodeExpected
})
}
function getAccountBlocklistByServer (
url: string,
token: string,
start: number,
count: number,
sort = '-createdAt',
statusCodeExpected = HttpStatusCode.OK_200
) {
const path = '/api/v1/server/blocklist/accounts'
return makeGetRequest({
url,
token,
query: { start, count, sort },
path,
statusCodeExpected
})
}
function addAccountToServerBlocklist (
url: string,
token: string,
accountToBlock: string,
statusCodeExpected = HttpStatusCode.NO_CONTENT_204
) {
const path = '/api/v1/server/blocklist/accounts'
return makePostBodyRequest({
url,
path,
token,
fields: {
accountName: accountToBlock
},
statusCodeExpected
})
}
function removeAccountFromServerBlocklist (
url: string,
token: string,
accountToUnblock: string,
statusCodeExpected = HttpStatusCode.NO_CONTENT_204
) {
const path = '/api/v1/server/blocklist/accounts/' + accountToUnblock
return makeDeleteRequest({
url,
path,
token,
statusCodeExpected
})
}
function getServerBlocklistByServer (
url: string,
token: string,
start: number,
count: number,
sort = '-createdAt',
statusCodeExpected = HttpStatusCode.OK_200
) {
const path = '/api/v1/server/blocklist/servers'
return makeGetRequest({
url,
token,
query: { start, count, sort },
path,
statusCodeExpected
})
}
function addServerToServerBlocklist (
url: string,
token: string,
serverToBlock: string,
statusCodeExpected = HttpStatusCode.NO_CONTENT_204
) {
const path = '/api/v1/server/blocklist/servers'
return makePostBodyRequest({
url,
path,
token,
fields: {
host: serverToBlock
},
statusCodeExpected
})
}
function removeServerFromServerBlocklist (
url: string,
token: string,
serverToBlock: string,
statusCodeExpected = HttpStatusCode.NO_CONTENT_204
) {
const path = '/api/v1/server/blocklist/servers/' + serverToBlock
return makeDeleteRequest({
url,
path,
token,
statusCodeExpected
})
}
// ---------------------------------------------------------------------------
export {
getAccountBlocklistByAccount,
addAccountToAccountBlocklist,
removeAccountFromAccountBlocklist,
getServerBlocklistByAccount,
addServerToAccountBlocklist,
removeServerFromAccountBlocklist,
getAccountBlocklistByServer,
addAccountToServerBlocklist,
removeAccountFromServerBlocklist,
getServerBlocklistByServer,
addServerToServerBlocklist,
removeServerFromServerBlocklist
}

View File

@ -1,7 +1,7 @@
export * from './accounts'
export * from './accounts-command' export * from './accounts-command'
export * from './accounts'
export * from './blocklist-command'
export * from './blocklist'
export * from './login' export * from './login'
export * from './user-notifications' export * from './user-notifications'
export * from './user-subscriptions' export * from './user-subscriptions'