From 428ccb8b7a44ce60cabb7401a5464cf5fcbd4dba Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 11 May 2021 12:04:47 +0200 Subject: Reorganize plugin models --- shared/models/plugins/server/api/index.ts | 3 + .../plugins/server/api/install-plugin.model.ts | 4 + .../plugins/server/api/manage-plugin.model.ts | 3 + .../plugins/server/api/peertube-plugin.model.ts | 16 +++ shared/models/plugins/server/index.ts | 6 + shared/models/plugins/server/managers/index.ts | 9 ++ .../plugin-playlist-privacy-manager.model.ts | 8 ++ .../managers/plugin-settings-manager.model.ts | 9 ++ .../managers/plugin-storage-manager.model.ts | 5 + .../managers/plugin-transcoding-manager.model.ts | 13 +++ .../plugin-video-category-manager.model.ts | 5 + .../plugin-video-language-manager.model.ts | 5 + .../managers/plugin-video-licence-manager.model.ts | 5 + .../managers/plugin-video-privacy-manager.model.ts | 9 ++ .../plugins/server/plugin-translation.model.ts | 5 + .../plugins/server/register-server-hook.model.ts | 7 ++ shared/models/plugins/server/server-hook.model.ts | 123 +++++++++++++++++++++ shared/models/plugins/server/settings/index.ts | 2 + .../server/settings/public-server.setting.ts | 3 + .../settings/register-server-setting.model.ts | 12 ++ 20 files changed, 252 insertions(+) create mode 100644 shared/models/plugins/server/api/index.ts create mode 100644 shared/models/plugins/server/api/install-plugin.model.ts create mode 100644 shared/models/plugins/server/api/manage-plugin.model.ts create mode 100644 shared/models/plugins/server/api/peertube-plugin.model.ts create mode 100644 shared/models/plugins/server/index.ts create mode 100644 shared/models/plugins/server/managers/index.ts create mode 100644 shared/models/plugins/server/managers/plugin-playlist-privacy-manager.model.ts create mode 100644 shared/models/plugins/server/managers/plugin-settings-manager.model.ts create mode 100644 shared/models/plugins/server/managers/plugin-storage-manager.model.ts create mode 100644 shared/models/plugins/server/managers/plugin-transcoding-manager.model.ts create mode 100644 shared/models/plugins/server/managers/plugin-video-category-manager.model.ts create mode 100644 shared/models/plugins/server/managers/plugin-video-language-manager.model.ts create mode 100644 shared/models/plugins/server/managers/plugin-video-licence-manager.model.ts create mode 100644 shared/models/plugins/server/managers/plugin-video-privacy-manager.model.ts create mode 100644 shared/models/plugins/server/plugin-translation.model.ts create mode 100644 shared/models/plugins/server/register-server-hook.model.ts create mode 100644 shared/models/plugins/server/server-hook.model.ts create mode 100644 shared/models/plugins/server/settings/index.ts create mode 100644 shared/models/plugins/server/settings/public-server.setting.ts create mode 100644 shared/models/plugins/server/settings/register-server-setting.model.ts (limited to 'shared/models/plugins/server') diff --git a/shared/models/plugins/server/api/index.ts b/shared/models/plugins/server/api/index.ts new file mode 100644 index 000000000..eb59a03f0 --- /dev/null +++ b/shared/models/plugins/server/api/index.ts @@ -0,0 +1,3 @@ +export * from './install-plugin.model' +export * from './manage-plugin.model' +export * from './peertube-plugin.model' diff --git a/shared/models/plugins/server/api/install-plugin.model.ts b/shared/models/plugins/server/api/install-plugin.model.ts new file mode 100644 index 000000000..5a268ebe1 --- /dev/null +++ b/shared/models/plugins/server/api/install-plugin.model.ts @@ -0,0 +1,4 @@ +export interface InstallOrUpdatePlugin { + npmName?: string + path?: string +} diff --git a/shared/models/plugins/server/api/manage-plugin.model.ts b/shared/models/plugins/server/api/manage-plugin.model.ts new file mode 100644 index 000000000..612b3056c --- /dev/null +++ b/shared/models/plugins/server/api/manage-plugin.model.ts @@ -0,0 +1,3 @@ +export interface ManagePlugin { + npmName: string +} diff --git a/shared/models/plugins/server/api/peertube-plugin.model.ts b/shared/models/plugins/server/api/peertube-plugin.model.ts new file mode 100644 index 000000000..54c383f57 --- /dev/null +++ b/shared/models/plugins/server/api/peertube-plugin.model.ts @@ -0,0 +1,16 @@ +import { PluginType } from '../../plugin.type' + +export interface PeerTubePlugin { + name: string + type: PluginType + latestVersion: string + version: string + enabled: boolean + uninstalled: boolean + peertubeEngine: string + description: string + homepage: string + settings: { [ name: string ]: string } + createdAt: Date + updatedAt: Date +} diff --git a/shared/models/plugins/server/index.ts b/shared/models/plugins/server/index.ts new file mode 100644 index 000000000..d3ff49d3b --- /dev/null +++ b/shared/models/plugins/server/index.ts @@ -0,0 +1,6 @@ +export * from './api' +export * from './managers' +export * from './settings' +export * from './plugin-translation.model' +export * from './register-server-hook.model' +export * from './server-hook.model' diff --git a/shared/models/plugins/server/managers/index.ts b/shared/models/plugins/server/managers/index.ts new file mode 100644 index 000000000..49365a854 --- /dev/null +++ b/shared/models/plugins/server/managers/index.ts @@ -0,0 +1,9 @@ + +export * from './plugin-playlist-privacy-manager.model' +export * from './plugin-settings-manager.model' +export * from './plugin-storage-manager.model' +export * from './plugin-transcoding-manager.model' +export * from './plugin-video-category-manager.model' +export * from './plugin-video-language-manager.model' +export * from './plugin-video-licence-manager.model' +export * from './plugin-video-privacy-manager.model' diff --git a/shared/models/plugins/server/managers/plugin-playlist-privacy-manager.model.ts b/shared/models/plugins/server/managers/plugin-playlist-privacy-manager.model.ts new file mode 100644 index 000000000..4703c0a8b --- /dev/null +++ b/shared/models/plugins/server/managers/plugin-playlist-privacy-manager.model.ts @@ -0,0 +1,8 @@ +import { VideoPlaylistPrivacy } from '../../../videos/playlist/video-playlist-privacy.model' + +export interface PluginPlaylistPrivacyManager { + // PUBLIC = 1, + // UNLISTED = 2, + // PRIVATE = 3 + deletePlaylistPrivacy: (privacyKey: VideoPlaylistPrivacy) => boolean +} diff --git a/shared/models/plugins/server/managers/plugin-settings-manager.model.ts b/shared/models/plugins/server/managers/plugin-settings-manager.model.ts new file mode 100644 index 000000000..3c28c0565 --- /dev/null +++ b/shared/models/plugins/server/managers/plugin-settings-manager.model.ts @@ -0,0 +1,9 @@ +export interface PluginSettingsManager { + getSetting: (name: string) => Promise + + getSettings: (names: string[]) => Promise<{ [settingName: string]: string | boolean }> + + setSetting: (name: string, value: string) => Promise + + onSettingsChange: (cb: (names: string[]) => Promise) => void +} diff --git a/shared/models/plugins/server/managers/plugin-storage-manager.model.ts b/shared/models/plugins/server/managers/plugin-storage-manager.model.ts new file mode 100644 index 000000000..51567044a --- /dev/null +++ b/shared/models/plugins/server/managers/plugin-storage-manager.model.ts @@ -0,0 +1,5 @@ +export interface PluginStorageManager { + getData: (key: string) => Promise + + storeData: (key: string, data: any) => Promise +} diff --git a/shared/models/plugins/server/managers/plugin-transcoding-manager.model.ts b/shared/models/plugins/server/managers/plugin-transcoding-manager.model.ts new file mode 100644 index 000000000..a0422a460 --- /dev/null +++ b/shared/models/plugins/server/managers/plugin-transcoding-manager.model.ts @@ -0,0 +1,13 @@ +import { EncoderOptionsBuilder } from '../../../videos/video-transcoding.model' + +export interface PluginTranscodingManager { + addLiveProfile (encoder: string, profile: string, builder: EncoderOptionsBuilder): boolean + + addVODProfile (encoder: string, profile: string, builder: EncoderOptionsBuilder): boolean + + addLiveEncoderPriority (streamType: 'audio' | 'video', encoder: string, priority: number): void + + addVODEncoderPriority (streamType: 'audio' | 'video', encoder: string, priority: number): void + + removeAllProfilesAndEncoderPriorities(): void +} diff --git a/shared/models/plugins/server/managers/plugin-video-category-manager.model.ts b/shared/models/plugins/server/managers/plugin-video-category-manager.model.ts new file mode 100644 index 000000000..201bfa979 --- /dev/null +++ b/shared/models/plugins/server/managers/plugin-video-category-manager.model.ts @@ -0,0 +1,5 @@ +export interface PluginVideoCategoryManager { + addCategory: (categoryKey: number, categoryLabel: string) => boolean + + deleteCategory: (categoryKey: number) => boolean +} diff --git a/shared/models/plugins/server/managers/plugin-video-language-manager.model.ts b/shared/models/plugins/server/managers/plugin-video-language-manager.model.ts new file mode 100644 index 000000000..3fd577a79 --- /dev/null +++ b/shared/models/plugins/server/managers/plugin-video-language-manager.model.ts @@ -0,0 +1,5 @@ +export interface PluginVideoLanguageManager { + addLanguage: (languageKey: string, languageLabel: string) => boolean + + deleteLanguage: (languageKey: string) => boolean +} diff --git a/shared/models/plugins/server/managers/plugin-video-licence-manager.model.ts b/shared/models/plugins/server/managers/plugin-video-licence-manager.model.ts new file mode 100644 index 000000000..82a634d3a --- /dev/null +++ b/shared/models/plugins/server/managers/plugin-video-licence-manager.model.ts @@ -0,0 +1,5 @@ +export interface PluginVideoLicenceManager { + addLicence: (licenceKey: number, licenceLabel: string) => boolean + + deleteLicence: (licenceKey: number) => boolean +} diff --git a/shared/models/plugins/server/managers/plugin-video-privacy-manager.model.ts b/shared/models/plugins/server/managers/plugin-video-privacy-manager.model.ts new file mode 100644 index 000000000..7717115e3 --- /dev/null +++ b/shared/models/plugins/server/managers/plugin-video-privacy-manager.model.ts @@ -0,0 +1,9 @@ +import { VideoPrivacy } from '../../../videos/video-privacy.enum' + +export interface PluginVideoPrivacyManager { + // PUBLIC = 1 + // UNLISTED = 2 + // PRIVATE = 3 + // INTERNAL = 4 + deletePrivacy: (privacyKey: VideoPrivacy) => boolean +} diff --git a/shared/models/plugins/server/plugin-translation.model.ts b/shared/models/plugins/server/plugin-translation.model.ts new file mode 100644 index 000000000..a2dd8e560 --- /dev/null +++ b/shared/models/plugins/server/plugin-translation.model.ts @@ -0,0 +1,5 @@ +export type PluginTranslation = { + [ npmName: string ]: { + [ key: string ]: string + } +} diff --git a/shared/models/plugins/server/register-server-hook.model.ts b/shared/models/plugins/server/register-server-hook.model.ts new file mode 100644 index 000000000..746fdc329 --- /dev/null +++ b/shared/models/plugins/server/register-server-hook.model.ts @@ -0,0 +1,7 @@ +import { ServerHookName } from './server-hook.model' + +export interface RegisterServerHookOptions { + target: ServerHookName + handler: Function + priority?: number +} diff --git a/shared/models/plugins/server/server-hook.model.ts b/shared/models/plugins/server/server-hook.model.ts new file mode 100644 index 000000000..88277af5a --- /dev/null +++ b/shared/models/plugins/server/server-hook.model.ts @@ -0,0 +1,123 @@ +// {hookType}:{api?}.{location}.{subLocation?}.{actionType}.{target} + +export const serverFilterHookObject = { + // Filter params/result used to list videos for the REST API + // (used by the trending page, recently-added page, local page etc) + 'filter:api.videos.list.params': true, + 'filter:api.videos.list.result': true, + + // Filter params/result used to list account videos for the REST API + 'filter:api.accounts.videos.list.params': true, + 'filter:api.accounts.videos.list.result': true, + + // Filter params/result used to list channel videos for the REST API + 'filter:api.video-channels.videos.list.params': true, + 'filter:api.video-channels.videos.list.result': true, + + // Filter params/result used to list my user videos for the REST API + 'filter:api.user.me.videos.list.params': true, + 'filter:api.user.me.videos.list.result': true, + + // Filter params/results to search videos/channels in the DB or on the remote index + 'filter:api.search.videos.local.list.params': true, + 'filter:api.search.videos.local.list.result': true, + 'filter:api.search.videos.index.list.params': true, + 'filter:api.search.videos.index.list.result': true, + 'filter:api.search.video-channels.local.list.params': true, + 'filter:api.search.video-channels.local.list.result': true, + 'filter:api.search.video-channels.index.list.params': true, + 'filter:api.search.video-channels.index.list.result': true, + + // Filter the result of the get function + // Used to get detailed video information (video watch page for example) + 'filter:api.video.get.result': true, + + // Filter the result of the accept upload/live, import via torrent/url functions + // If this function returns false then the upload is aborted with an error + 'filter:api.video.upload.accept.result': true, + 'filter:api.live-video.create.accept.result': true, + 'filter:api.video.pre-import-url.accept.result': true, + 'filter:api.video.pre-import-torrent.accept.result': true, + 'filter:api.video.post-import-url.accept.result': true, + 'filter:api.video.post-import-torrent.accept.result': true, + // Filter the result of the accept comment (thread or reply) functions + // If the functions return false then the user cannot post its comment + 'filter:api.video-thread.create.accept.result': true, + 'filter:api.video-comment-reply.create.accept.result': true, + + // Filter params/result used to list threads of a specific video + // (used by the video watch page) + 'filter:api.video-threads.list.params': true, + 'filter:api.video-threads.list.result': true, + + // Filter params/result used to list replies of a specific thread + // (used by the video watch page when we click on the "View replies" button) + 'filter:api.video-thread-comments.list.params': true, + 'filter:api.video-thread-comments.list.result': true, + + // Filter result used to check if we need to auto blacklist a video + // (fired when a local or remote video is created or updated) + 'filter:video.auto-blacklist.result': true, + + // Filter result used to check if a user can register on the instance + 'filter:api.user.signup.allowed.result': true, + + // Filter result used to check if video/torrent download is allowed + 'filter:api.download.video.allowed.result': true, + 'filter:api.download.torrent.allowed.result': true, + + // Filter result to check if the embed is allowed for a particular request + 'filter:html.embed.video.allowed.result': true, + 'filter:html.embed.video-playlist.allowed.result': true +} + +export type ServerFilterHookName = keyof typeof serverFilterHookObject + +export const serverActionHookObject = { + // Fired when the application has been loaded and is listening HTTP requests + 'action:application.listening': true, + + // Fired when a local video is updated + 'action:api.video.updated': true, + // Fired when a local video is deleted + 'action:api.video.deleted': true, + // Fired when a local video is uploaded + 'action:api.video.uploaded': true, + // Fired when a local video is viewed + 'action:api.video.viewed': true, + + // Fired when a live video is created + 'action:api.live-video.created': true, + + // Fired when a thread is created + 'action:api.video-thread.created': true, + // Fired when a reply to a thread is created + 'action:api.video-comment-reply.created': true, + // Fired when a comment (thread or reply) is deleted + 'action:api.video-comment.deleted': true, + + // Fired when a user is blocked (banned) + 'action:api.user.blocked': true, + // Fired when a user is unblocked (unbanned) + 'action:api.user.unblocked': true, + // Fired when a user registered on the instance + 'action:api.user.registered': true, + // Fired when an admin/moderator created a user + 'action:api.user.created': true, + // Fired when a user is removed by an admin/moderator + 'action:api.user.deleted': true, + // Fired when a user is updated by an admin/moderator + 'action:api.user.updated': true, + + // Fired when a user got a new oauth2 token + 'action:api.user.oauth2-got-token': true +} + +export type ServerActionHookName = keyof typeof serverActionHookObject + +export const serverHookObject = Object.assign({}, serverFilterHookObject, serverActionHookObject) +export type ServerHookName = keyof typeof serverHookObject + +export interface ServerHook { + runHook (hookName: ServerHookName, result?: T, params?: any): Promise +} diff --git a/shared/models/plugins/server/settings/index.ts b/shared/models/plugins/server/settings/index.ts new file mode 100644 index 000000000..b456de019 --- /dev/null +++ b/shared/models/plugins/server/settings/index.ts @@ -0,0 +1,2 @@ +export * from './public-server.setting' +export * from './register-server-setting.model' diff --git a/shared/models/plugins/server/settings/public-server.setting.ts b/shared/models/plugins/server/settings/public-server.setting.ts new file mode 100644 index 000000000..9802c4d7d --- /dev/null +++ b/shared/models/plugins/server/settings/public-server.setting.ts @@ -0,0 +1,3 @@ +export interface PublicServerSetting { + publicSettings: { [ name: string ]: string } +} diff --git a/shared/models/plugins/server/settings/register-server-setting.model.ts b/shared/models/plugins/server/settings/register-server-setting.model.ts new file mode 100644 index 000000000..d9a798cac --- /dev/null +++ b/shared/models/plugins/server/settings/register-server-setting.model.ts @@ -0,0 +1,12 @@ +import { RegisterClientFormFieldOptions } from '../../client' + +export type RegisterServerSettingOptions = RegisterClientFormFieldOptions & { + // If the setting is not private, anyone can view its value (client code included) + // If the setting is private, only server-side hooks can access it + // Mainly used by the PeerTube client to get admin config + private: boolean +} + +export interface RegisteredServerSettings { + registeredSettings: RegisterServerSettingOptions[] +} -- cgit v1.2.3