From 80fdaf064562aff968f4c9cea1cf220bc12a70da Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 7 May 2020 14:58:24 +0200 Subject: Add moderation helpers to plugins --- server/lib/plugins/plugin-helpers.ts | 78 +++++++++++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) (limited to 'server/lib/plugins') diff --git a/server/lib/plugins/plugin-helpers.ts b/server/lib/plugins/plugin-helpers.ts index 608207e05..de82b4918 100644 --- a/server/lib/plugins/plugin-helpers.ts +++ b/server/lib/plugins/plugin-helpers.ts @@ -3,6 +3,15 @@ import { sequelizeTypescript } from '@server/initializers/database' import { buildLogger } from '@server/helpers/logger' import { VideoModel } from '@server/models/video/video' import { WEBSERVER } from '@server/initializers/constants' +import { ServerModel } from '@server/models/server/server' +import { getServerActor } from '@server/models/application/application' +import { addServerInBlocklist, removeServerFromBlocklist, addAccountInBlocklist, removeAccountFromBlocklist } from '../blocklist' +import { ServerBlocklistModel } from '@server/models/server/server-blocklist' +import { AccountModel } from '@server/models/account/account' +import { VideoBlacklistCreate } from '@shared/models' +import { blacklistVideo, unblacklistVideo } from '../video-blacklist' +import { VideoBlacklistModel } from '@server/models/video/video-blacklist' +import { AccountBlocklistModel } from '@server/models/account/account-blocklist' function buildPluginHelpers (npmName: string): PeerTubeHelpers { const logger = buildPluginLogger(npmName) @@ -12,11 +21,17 @@ function buildPluginHelpers (npmName: string): PeerTubeHelpers { const config = buildConfigHelpers() + const server = buildServerHelpers() + + const moderation = buildModerationHelpers() + return { logger, database, videos, - config + config, + moderation, + server } } @@ -36,8 +51,18 @@ function buildDatabaseHelpers () { } } +function buildServerHelpers () { + return { + getServerActor: () => getServerActor() + } +} + function buildVideosHelpers () { return { + loadByUrl: (url: string) => { + return VideoModel.loadByUrl(url) + }, + removeVideo: (id: number) => { return sequelizeTypescript.transaction(async t => { const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(id, t) @@ -48,6 +73,57 @@ function buildVideosHelpers () { } } +function buildModerationHelpers () { + return { + blockServer: async (options: { byAccountId: number, hostToBlock: string }) => { + const serverToBlock = await ServerModel.loadOrCreateByHost(options.hostToBlock) + + await addServerInBlocklist(options.byAccountId, serverToBlock.id) + }, + + unblockServer: async (options: { byAccountId: number, hostToUnblock: string }) => { + const serverBlock = await ServerBlocklistModel.loadByAccountAndHost(options.byAccountId, options.hostToUnblock) + if (!serverBlock) return + + await removeServerFromBlocklist(serverBlock) + }, + + blockAccount: async (options: { byAccountId: number, handleToBlock: string }) => { + const accountToBlock = await AccountModel.loadByNameWithHost(options.handleToBlock) + if (!accountToBlock) return + + await addAccountInBlocklist(options.byAccountId, accountToBlock.id) + }, + + unblockAccount: async (options: { byAccountId: number, handleToUnblock: string }) => { + const targetAccount = await AccountModel.loadByNameWithHost(options.handleToUnblock) + if (!targetAccount) return + + const accountBlock = await AccountBlocklistModel.loadByAccountAndTarget(options.byAccountId, targetAccount.id) + if (!accountBlock) return + + await removeAccountFromBlocklist(accountBlock) + }, + + blacklistVideo: async (options: { videoIdOrUUID: number | string, createOptions: VideoBlacklistCreate }) => { + const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(options.videoIdOrUUID) + if (!video) return + + await blacklistVideo(video, options.createOptions) + }, + + unblacklistVideo: async (options: { videoIdOrUUID: number | string }) => { + const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(options.videoIdOrUUID) + if (!video) return + + const videoBlacklist = await VideoBlacklistModel.loadByVideoId(video.id) + if (!videoBlacklist) return + + await unblacklistVideo(videoBlacklist, video) + } + } +} + function buildConfigHelpers () { return { getWebserverUrl () { -- cgit v1.2.3