X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=sidebyside;f=server%2Flib%2Fplugins%2Fplugin-helpers-builder.ts;h=d235f52c08c07dfd29eb740c81119fbb5637b60a;hb=0c302acb3c358b4d4d8dee45aed1de1108ea37ea;hp=78e4a28ad6447cc11971903ab1680e3d9cc50746;hpb=c3edc5b074aa4bb1861ed0a94d3713808e87170f;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/plugins/plugin-helpers-builder.ts b/server/lib/plugins/plugin-helpers-builder.ts index 78e4a28ad..d235f52c0 100644 --- a/server/lib/plugins/plugin-helpers-builder.ts +++ b/server/lib/plugins/plugin-helpers-builder.ts @@ -1,6 +1,6 @@ import express from 'express' +import { Server } from 'http' import { join } from 'path' -import { ffprobePromise } from '@server/helpers/ffprobe-utils' import { buildLogger } from '@server/helpers/logger' import { CONFIG } from '@server/initializers/config' import { WEBSERVER } from '@server/initializers/constants' @@ -13,15 +13,17 @@ import { ServerBlocklistModel } from '@server/models/server/server-blocklist' import { UserModel } from '@server/models/user/user' import { VideoModel } from '@server/models/video/video' import { VideoBlacklistModel } from '@server/models/video/video-blacklist' -import { MPlugin } from '@server/types/models' +import { MPlugin, MVideo, UserNotificationModelForApi } from '@server/types/models' import { PeerTubeHelpers } from '@server/types/plugins' +import { ffprobePromise } from '@shared/ffmpeg' import { VideoBlacklistCreate, VideoStorage } from '@shared/models' import { addAccountInBlocklist, addServerInBlocklist, removeAccountFromBlocklist, removeServerFromBlocklist } from '../blocklist' +import { PeerTubeSocket } from '../peertube-socket' import { ServerConfigManager } from '../server-config-manager' import { blacklistVideo, unblacklistVideo } from '../video-blacklist' import { VideoPathManager } from '../video-path-manager' -function buildPluginHelpers (pluginModel: MPlugin, npmName: string): PeerTubeHelpers { +function buildPluginHelpers (httpServer: Server, pluginModel: MPlugin, npmName: string): PeerTubeHelpers { const logger = buildPluginLogger(npmName) const database = buildDatabaseHelpers() @@ -29,12 +31,14 @@ function buildPluginHelpers (pluginModel: MPlugin, npmName: string): PeerTubeHel const config = buildConfigHelpers() - const server = buildServerHelpers() + const server = buildServerHelpers(httpServer) const moderation = buildModerationHelpers() const plugin = buildPluginRelatedHelpers(pluginModel, npmName) + const socket = buildSocketHelpers() + const user = buildUserHelpers() return { @@ -45,6 +49,7 @@ function buildPluginHelpers (pluginModel: MPlugin, npmName: string): PeerTubeHel moderation, plugin, server, + socket, user } } @@ -65,8 +70,10 @@ function buildDatabaseHelpers () { } } -function buildServerHelpers () { +function buildServerHelpers (httpServer: Server) { return { + getHTTPServer: () => httpServer, + getServerActor: () => getServerActor() } } @@ -83,7 +90,7 @@ function buildVideosHelpers () { removeVideo: (id: number) => { return sequelizeTypescript.transaction(async t => { - const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(id, t) + const video = await VideoModel.loadFull(id, t) await video.destroy({ transaction: t }) }) @@ -94,7 +101,7 @@ function buildVideosHelpers () { }, getFiles: async (id: number | string) => { - const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(id) + const video = await VideoModel.loadFull(id) if (!video) return undefined const webtorrentVideoFiles = (video.VideoFiles || []).map(f => ({ @@ -126,7 +133,7 @@ function buildVideosHelpers () { const thumbnails = video.Thumbnails.map(t => ({ type: t.type, - url: t.getFileUrl(video), + url: t.getOriginFileUrl(video), path: t.getPath() })) @@ -178,14 +185,14 @@ function buildModerationHelpers () { }, blacklistVideo: async (options: { videoIdOrUUID: number | string, createOptions: VideoBlacklistCreate }) => { - const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(options.videoIdOrUUID) + const video = await VideoModel.loadFull(options.videoIdOrUUID) if (!video) return await blacklistVideo(video, options.createOptions) }, unblacklistVideo: async (options: { videoIdOrUUID: number | string }) => { - const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(options.videoIdOrUUID) + const video = await VideoModel.loadFull(options.videoIdOrUUID) if (!video) return const videoBlacklist = await VideoBlacklistModel.loadByVideoId(video.id) @@ -202,6 +209,10 @@ function buildConfigHelpers () { return WEBSERVER.URL }, + getServerListeningConfig () { + return { hostname: CONFIG.LISTEN.HOSTNAME, port: CONFIG.LISTEN.PORT } + }, + getServerConfig () { return ServerConfigManager.Instance.getServerConfig() } @@ -214,14 +225,31 @@ function buildPluginRelatedHelpers (plugin: MPlugin, npmName: string) { getBaseRouterRoute: () => `/plugins/${plugin.name}/${plugin.version}/router/`, + getBaseWebSocketRoute: () => `/plugins/${plugin.name}/${plugin.version}/ws/`, + getDataDirectoryPath: () => join(CONFIG.STORAGE.PLUGINS_DIR, 'data', npmName) } } +function buildSocketHelpers () { + return { + sendNotification: (userId: number, notification: UserNotificationModelForApi) => { + PeerTubeSocket.Instance.sendNotification(userId, notification) + }, + sendVideoLiveNewState: (video: MVideo) => { + PeerTubeSocket.Instance.sendVideoLiveNewState(video) + } + } +} + function buildUserHelpers () { return { + loadById: (id: number) => { + return UserModel.loadByIdFull(id) + }, + getAuthUser: (res: express.Response) => { - const user = res.locals.oauth?.token?.User + const user = res.locals.oauth?.token?.User || res.locals.videoFileToken?.user if (!user) return undefined return UserModel.loadByIdFull(user.id)