(plugins) adding signup scope and init hook, modifying ensureUserRegistrationAllowed allowedParams

pull/2286/head
Rigel Kent 2019-11-25 11:16:12 +01:00 committed by Chocobozzz
parent efcd6f2e62
commit ba7b7e572f
6 changed files with 24 additions and 8 deletions

View File

@ -6,6 +6,7 @@ import { UserRegister } from '@shared/models/users/user-register.model'
import { FormGroup } from '@angular/forms' import { FormGroup } from '@angular/forms'
import { About } from '@shared/models/server' import { About } from '@shared/models/server'
import { InstanceService } from '@app/shared/instance/instance.service' import { InstanceService } from '@app/shared/instance/instance.service'
import { HooksService } from '@app/core/plugins/hooks.service'
import { NgbAccordion } from '@ng-bootstrap/ng-bootstrap' import { NgbAccordion } from '@ng-bootstrap/ng-bootstrap'
@Component({ @Component({
@ -41,6 +42,7 @@ export class RegisterComponent implements OnInit {
private serverService: ServerService, private serverService: ServerService,
private redirectService: RedirectService, private redirectService: RedirectService,
private instanceService: InstanceService, private instanceService: InstanceService,
private hooks: HooksService,
private i18n: I18n private i18n: I18n
) { ) {
} }
@ -60,6 +62,8 @@ export class RegisterComponent implements OnInit {
err => this.notifier.error(err.message) err => this.notifier.error(err.message)
) )
this.hooks.runAction('action:signup.register.init', 'signup')
} }
hasSameChannelAndAccountNames () { hasSameChannelAndAccountNames () {
@ -94,10 +98,13 @@ export class RegisterComponent implements OnInit {
if (this.accordion) this.accordion.toggle('code-of-conduct') if (this.accordion) this.accordion.toggle('code-of-conduct')
} }
signup () { async signup () {
this.error = null this.error = null
const body: UserRegister = Object.assign(this.formStepUser.value, { channel: this.formStepChannel.value }) const body: UserRegister = await this.hooks.wrapObject(
Object.assign(this.formStepUser.value, { channel: this.formStepChannel.value }),
'filter:api.signup.registration.create.params'
)
this.userService.signup(body).subscribe( this.userService.signup(body).subscribe(
() => { () => {

View File

@ -42,7 +42,8 @@ export class PluginService implements ClientHook {
pluginsLoaded: { [ scope in PluginClientScope ]: ReplaySubject<boolean> } = { pluginsLoaded: { [ scope in PluginClientScope ]: ReplaySubject<boolean> } = {
common: new ReplaySubject<boolean>(1), common: new ReplaySubject<boolean>(1),
search: new ReplaySubject<boolean>(1), search: new ReplaySubject<boolean>(1),
'video-watch': new ReplaySubject<boolean>(1) 'video-watch': new ReplaySubject<boolean>(1),
signup: new ReplaySubject<boolean>(1)
} }
translationsObservable: Observable<PluginTranslation> translationsObservable: Observable<PluginTranslation>

View File

@ -283,7 +283,8 @@ const usersVideoRatingValidator = [
const ensureUserRegistrationAllowed = [ const ensureUserRegistrationAllowed = [
async (req: express.Request, res: express.Response, next: express.NextFunction) => { async (req: express.Request, res: express.Response, next: express.NextFunction) => {
const allowedParams = { const allowedParams = {
body: req.body body: req.body,
ip: req.ip
} }
const allowedResult = await Hooks.wrapPromiseFun( const allowedResult = await Hooks.wrapPromiseFun(

View File

@ -38,7 +38,10 @@ export const clientFilterHookObject = {
'filter:api.search.videos.list.result': true, 'filter:api.search.videos.list.result': true,
// Filter params/result of the function that fetch video-channels according to the user search // Filter params/result of the function that fetch video-channels according to the user search
'filter:api.search.video-channels.list.params': true, 'filter:api.search.video-channels.list.params': true,
'filter:api.search.video-channels.list.result': true 'filter:api.search.video-channels.list.result': true,
// Filter form
'filter:api.signup.registration.create.params': true
} }
export type ClientFilterHookName = keyof typeof clientFilterHookObject export type ClientFilterHookName = keyof typeof clientFilterHookObject
@ -58,7 +61,10 @@ export const clientActionHookObject = {
'action:search.init': true, 'action:search.init': true,
// Fired every time Angular URL changes // Fired every time Angular URL changes
'action:router.navigation-end': true 'action:router.navigation-end': true,
// Fired when the registration page is being initialized
'action:signup.register.init': true
} }
export type ClientActionHookName = keyof typeof clientActionHookObject export type ClientActionHookName = keyof typeof clientActionHookObject

View File

@ -1 +1 @@
export type PluginClientScope = 'common' | 'video-watch' | 'search' export type PluginClientScope = 'common' | 'video-watch' | 'search' | 'signup'

View File

@ -3,7 +3,8 @@ export interface RegisterServerSettingOptions {
label: string label: string
type: 'input' type: 'input'
// If the setting is not private, anyone can view its value // 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 // Mainly used by the PeerTube client to get admin config
private: boolean private: boolean