From 67ed6552b831df66713bac9e672738796128d33f Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 23 Jun 2020 14:10:17 +0200 Subject: Reorganize client shared modules --- server/types/plugins/index.ts | 3 + server/types/plugins/plugin-library.model.ts | 7 ++ server/types/plugins/register-server-auth.model.ts | 52 ++++++++++++++ .../types/plugins/register-server-option.model.ts | 84 ++++++++++++++++++++++ 4 files changed, 146 insertions(+) create mode 100644 server/types/plugins/index.ts create mode 100644 server/types/plugins/plugin-library.model.ts create mode 100644 server/types/plugins/register-server-auth.model.ts create mode 100644 server/types/plugins/register-server-option.model.ts (limited to 'server/types/plugins') diff --git a/server/types/plugins/index.ts b/server/types/plugins/index.ts new file mode 100644 index 000000000..de30ff2ab --- /dev/null +++ b/server/types/plugins/index.ts @@ -0,0 +1,3 @@ +export * from './plugin-library.model' +export * from './register-server-auth.model' +export * from './register-server-option.model' diff --git a/server/types/plugins/plugin-library.model.ts b/server/types/plugins/plugin-library.model.ts new file mode 100644 index 000000000..5b517ee9f --- /dev/null +++ b/server/types/plugins/plugin-library.model.ts @@ -0,0 +1,7 @@ +import { RegisterServerOptions } from './register-server-option.model' + +export interface PluginLibrary { + register: (options: RegisterServerOptions) => Promise + + unregister: () => Promise +} diff --git a/server/types/plugins/register-server-auth.model.ts b/server/types/plugins/register-server-auth.model.ts new file mode 100644 index 000000000..31c71b0d0 --- /dev/null +++ b/server/types/plugins/register-server-auth.model.ts @@ -0,0 +1,52 @@ +import * as express from 'express' +import { UserRole } from '@shared/models' +import { MOAuthToken, MUser } from '../models' + +export type RegisterServerAuthOptions = RegisterServerAuthPassOptions | RegisterServerAuthExternalOptions + +export interface RegisterServerAuthenticatedResult { + username: string + email: string + role?: UserRole + displayName?: string +} + +export interface RegisterServerExternalAuthenticatedResult extends RegisterServerAuthenticatedResult { + req: express.Request + res: express.Response +} + +interface RegisterServerAuthBase { + // Authentication name (a plugin can register multiple auth strategies) + authName: string + + // Called by PeerTube when a user from your plugin logged out + onLogout?(user: MUser): void + + // Your plugin can hook PeerTube access/refresh token validity + // So you can control for your plugin the user session lifetime + hookTokenValidity?(options: { token: MOAuthToken, type: 'access' | 'refresh' }): Promise<{ valid: boolean }> +} + +export interface RegisterServerAuthPassOptions extends RegisterServerAuthBase { + // Weight of this authentication so PeerTube tries the auth methods in DESC weight order + getWeight(): number + + // Used by PeerTube to login a user + // Returns null if the login failed, or { username, email } on success + login(body: { + id: string + password: string + }): Promise +} + +export interface RegisterServerAuthExternalOptions extends RegisterServerAuthBase { + // Will be displayed in a block next to the login form + authDisplayName: () => string + + onAuthRequest: (req: express.Request, res: express.Response) => void +} + +export interface RegisterServerAuthExternalResult { + userAuthenticated (options: RegisterServerExternalAuthenticatedResult): void +} diff --git a/server/types/plugins/register-server-option.model.ts b/server/types/plugins/register-server-option.model.ts new file mode 100644 index 000000000..74303d383 --- /dev/null +++ b/server/types/plugins/register-server-option.model.ts @@ -0,0 +1,84 @@ +import * as Bluebird from 'bluebird' +import { Router } from 'express' +import { Logger } from 'winston' +import { ActorModel } from '@server/models/activitypub/actor' +import { + PluginPlaylistPrivacyManager, + PluginSettingsManager, + PluginStorageManager, + PluginVideoCategoryManager, + PluginVideoLanguageManager, + PluginVideoLicenceManager, + PluginVideoPrivacyManager, + RegisterServerHookOptions, + RegisterServerSettingOptions, + VideoBlacklistCreate +} from '@shared/models' +import { MVideoThumbnail } from '../models' +import { + RegisterServerAuthExternalOptions, + RegisterServerAuthExternalResult, + RegisterServerAuthPassOptions +} from './register-server-auth.model' + +export type PeerTubeHelpers = { + logger: Logger + + database: { + query: Function + } + + videos: { + loadByUrl: (url: string) => Bluebird + + removeVideo: (videoId: number) => Promise + } + + config: { + getWebserverUrl: () => string + } + + moderation: { + blockServer: (options: { byAccountId: number, hostToBlock: string }) => Promise + unblockServer: (options: { byAccountId: number, hostToUnblock: string }) => Promise + blockAccount: (options: { byAccountId: number, handleToBlock: string }) => Promise + unblockAccount: (options: { byAccountId: number, handleToUnblock: string }) => Promise + + blacklistVideo: (options: { videoIdOrUUID: number | string, createOptions: VideoBlacklistCreate }) => Promise + unblacklistVideo: (options: { videoIdOrUUID: number | string }) => Promise + } + + server: { + getServerActor: () => Promise + } +} + +export type RegisterServerOptions = { + registerHook: (options: RegisterServerHookOptions) => void + + registerSetting: (options: RegisterServerSettingOptions) => void + + settingsManager: PluginSettingsManager + + storageManager: PluginStorageManager + + videoCategoryManager: PluginVideoCategoryManager + videoLanguageManager: PluginVideoLanguageManager + videoLicenceManager: PluginVideoLicenceManager + + videoPrivacyManager: PluginVideoPrivacyManager + playlistPrivacyManager: PluginPlaylistPrivacyManager + + registerIdAndPassAuth: (options: RegisterServerAuthPassOptions) => void + registerExternalAuth: (options: RegisterServerAuthExternalOptions) => RegisterServerAuthExternalResult + unregisterIdAndPassAuth: (authName: string) => void + unregisterExternalAuth: (authName: string) => void + + // Get plugin router to create custom routes + // Base routes of this router are + // * /plugins/:pluginName/:pluginVersion/router/... + // * /plugins/:pluginName/router/... + getRouter(): Router + + peertubeHelpers: PeerTubeHelpers +} -- cgit v1.2.3