import * as express from 'express'
import { PluginVideoPrivacyManager } from '@shared/models/plugins/plugin-video-privacy-manager.model'
import { PluginPlaylistPrivacyManager } from '@shared/models/plugins/plugin-playlist-privacy-manager.model'
+import {
+ RegisterServerAuthExternalOptions,
+ RegisterServerAuthExternalResult,
+ RegisterServerAuthPassOptions
+} from '@shared/models/plugins/register-server-auth.model'
+import { onExternalAuthPlugin } from '@server/lib/auth'
type AlterableVideoConstant = 'language' | 'licence' | 'category' | 'privacy' | 'playlistPrivacy'
type VideoConstant = { [key in number | string]: string }
private readonly settings: RegisterServerSettingOptions[] = []
+ private readonly idAndPassAuths: RegisterServerAuthPassOptions[] = []
+ private readonly externalAuths: RegisterServerAuthExternalOptions[] = []
+
private readonly router: express.Router
constructor (
const videoPrivacyManager = this.buildVideoPrivacyManager()
const playlistPrivacyManager = this.buildPlaylistPrivacyManager()
+ const registerIdAndPassAuth = this.buildRegisterIdAndPassAuth()
+ const registerExternalAuth = this.buildRegisterExternalAuth()
+
const peertubeHelpers = buildPluginHelpers(this.npmName)
return {
videoPrivacyManager,
playlistPrivacyManager,
+ registerIdAndPassAuth,
+ registerExternalAuth,
+
peertubeHelpers
}
}
return this.router
}
+ getIdAndPassAuths () {
+ return this.idAndPassAuths
+ }
+
+ getExternalAuths () {
+ return this.externalAuths
+ }
+
private buildGetRouter () {
return () => this.router
}
}
}
+ private buildRegisterIdAndPassAuth () {
+ return (options: RegisterServerAuthPassOptions) => {
+ if (!options.authName || typeof options.getWeight !== 'function' || typeof options.login !== 'function') {
+ logger.error('Cannot register auth plugin %s: authName of getWeight or login are not valid.', this.npmName)
+ return
+ }
+
+ this.idAndPassAuths.push(options)
+ }
+ }
+
+ private buildRegisterExternalAuth () {
+ const self = this
+
+ return (options: RegisterServerAuthExternalOptions) => {
+ this.externalAuths.push(options)
+
+ return {
+ onAuth (options: { username: string, email: string }): void {
+ onExternalAuthPlugin(self.npmName, options.username, options.email)
+ }
+ } as RegisterServerAuthExternalResult
+ }
+ }
+
private buildSettingsManager (): PluginSettingsManager {
return {
getSetting: (name: string) => PluginModel.getSetting(this.plugin.name, this.plugin.type, name),