Merge branch 'signup-hooks' into 'develop'

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

See merge request framasoft/peertube/PeerTube!24
This commit is contained in:
Chocobozzz 2019-11-25 11:16:12 +01:00
commit f92bb405d4
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 { About } from '@shared/models/server'
import { InstanceService } from '@app/shared/instance/instance.service'
import { HooksService } from '@app/core/plugins/hooks.service'
import { NgbAccordion } from '@ng-bootstrap/ng-bootstrap'
@Component({
@ -41,6 +42,7 @@ export class RegisterComponent implements OnInit {
private serverService: ServerService,
private redirectService: RedirectService,
private instanceService: InstanceService,
private hooks: HooksService,
private i18n: I18n
) {
}
@ -60,6 +62,8 @@ export class RegisterComponent implements OnInit {
err => this.notifier.error(err.message)
)
this.hooks.runAction('action:signup.register.init', 'signup')
}
hasSameChannelAndAccountNames () {
@ -94,10 +98,13 @@ export class RegisterComponent implements OnInit {
if (this.accordion) this.accordion.toggle('code-of-conduct')
}
signup () {
async signup () {
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(
() => {

View File

@ -42,7 +42,8 @@ export class PluginService implements ClientHook {
pluginsLoaded: { [ scope in PluginClientScope ]: ReplaySubject<boolean> } = {
common: 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>

View File

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

View File

@ -38,7 +38,10 @@ export const clientFilterHookObject = {
'filter:api.search.videos.list.result': true,
// 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.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
@ -58,7 +61,10 @@ export const clientActionHookObject = {
'action:search.init': true,
// 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

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
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
private: boolean