]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/lib/plugins/plugin-helpers.ts
Translated using Weblate (Arabic)
[github/Chocobozzz/PeerTube.git] / server / lib / plugins / plugin-helpers.ts
index 608207e05a1c264be24d50aecde6f40843ebdfbc..39773f693757799c380f640dc4ad29a16f929087 100644 (file)
@@ -1,8 +1,17 @@
-import { PeerTubeHelpers } from '@server/typings/plugins'
+import { PeerTubeHelpers } from '@server/types/plugins'
 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 () {