X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2F%2Badmin%2Fconfig%2Fedit-custom-config%2Fedit-custom-config.component.ts;h=a1e334a746af0533079781ebd09a81cb6af7a0c6;hb=351d5225d6a4fe6863f760f02454eac88f730607;hp=1b35227864c87759eed9038a51e14c8aa6c8698e;hpb=fd206f0b2d7e5c8e00e2817266d90ec54f79e1da;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts index 1b3522786..a1e334a74 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts +++ b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts @@ -2,11 +2,18 @@ import { Component, OnInit } from '@angular/core' import { FormBuilder, FormGroup } from '@angular/forms' import { Router } from '@angular/router' import { ConfigService } from '@app/+admin/config/shared/config.service' +import { ConfirmService } from '@app/core' import { ServerService } from '@app/core/server/server.service' import { FormReactive, USER_VIDEO_QUOTA } from '@app/shared' -import { ADMIN_EMAIL, CACHE_PREVIEWS_SIZE, SIGNUP_LIMIT, TRANSCODING_THREADS } from '@app/shared/forms/form-validators/custom-config' +import { + ADMIN_EMAIL, + CACHE_PREVIEWS_SIZE, + INSTANCE_NAME, INSTANCE_SHORT_DESCRIPTION, SERVICES_TWITTER_USERNAME, + SIGNUP_LIMIT, + TRANSCODING_THREADS +} from '@app/shared/forms/form-validators/custom-config' import { NotificationsService } from 'angular2-notifications' -import { CustomConfig } from '../../../../../../shared/models/config/custom-config.model' +import { CustomConfig } from '../../../../../../shared/models/server/custom-config.model' @Component({ selector: 'my-edit-custom-config', @@ -36,25 +43,41 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit { form: FormGroup formErrors = { + instanceName: '', + instanceShortDescription: '', + instanceDescription: '', + instanceTerms: '', + instanceDefaultClientRoute: '', + instanceDefaultNSFWPolicy: '', + servicesTwitterUsername: '', cachePreviewsSize: '', signupLimit: '', adminEmail: '', userVideoQuota: '', - transcodingThreads: '' + transcodingThreads: '', + customizationJavascript: '', + customizationCSS: '' } validationMessages = { + instanceShortDescription: INSTANCE_SHORT_DESCRIPTION.MESSAGES, + instanceName: INSTANCE_NAME.MESSAGES, + servicesTwitterUsername: SERVICES_TWITTER_USERNAME, cachePreviewsSize: CACHE_PREVIEWS_SIZE.MESSAGES, signupLimit: SIGNUP_LIMIT.MESSAGES, adminEmail: ADMIN_EMAIL.MESSAGES, userVideoQuota: USER_VIDEO_QUOTA.MESSAGES } + private oldCustomJavascript: string + private oldCustomCSS: string + constructor ( private formBuilder: FormBuilder, private router: Router, private notificationsService: NotificationsService, private configService: ConfigService, - private serverService: ServerService + private serverService: ServerService, + private confirmService: ConfirmService ) { super() } @@ -65,13 +88,23 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit { buildForm () { const formGroupData = { + instanceName: [ '', INSTANCE_NAME.VALIDATORS ], + instanceShortDescription: [ '', INSTANCE_SHORT_DESCRIPTION.VALIDATORS ], + instanceDescription: [ '' ], + instanceTerms: [ '' ], + instanceDefaultClientRoute: [ '' ], + instanceDefaultNSFWPolicy: [ '' ], + servicesTwitterUsername: [ '', SERVICES_TWITTER_USERNAME.VALIDATORS ], + servicesTwitterWhitelisted: [ ], cachePreviewsSize: [ '', CACHE_PREVIEWS_SIZE.VALIDATORS ], signupEnabled: [ ], signupLimit: [ '', SIGNUP_LIMIT.VALIDATORS ], adminEmail: [ '', ADMIN_EMAIL.VALIDATORS ], userVideoQuota: [ '', USER_VIDEO_QUOTA.VALIDATORS ], transcodingThreads: [ '', TRANSCODING_THREADS.VALIDATORS ], - transcodingEnabled: [ ] + transcodingEnabled: [ ], + customizationJavascript: [ '' ], + customizationCSS: [ '' ] } for (const resolution of this.resolutions) { @@ -92,7 +125,12 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit { res => { this.customConfig = res + this.oldCustomCSS = this.customConfig.instance.customizations.css + this.oldCustomJavascript = this.customConfig.instance.customizations.javascript + this.updateForm() + // Force form validation + this.forceCheck() }, err => this.notificationsService.error('Error', err.message) @@ -107,8 +145,46 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit { return this.form.value['signupEnabled'] === true } - formValidated () { - const data = { + async formValidated () { + const newCustomizationJavascript = this.form.value['customizationJavascript'] + const newCustomizationCSS = this.form.value['customizationCSS'] + + const customizations = [] + if (newCustomizationJavascript && newCustomizationJavascript !== this.oldCustomJavascript) customizations.push('JavaScript') + if (newCustomizationCSS && newCustomizationCSS !== this.oldCustomCSS) customizations.push('CSS') + + if (customizations.length !== 0) { + const customizationsText = customizations.join('/') + + const message = `You set custom ${customizationsText}. ` + + 'This could lead to security issues or bugs if you do not understand it. ' + + 'Are you sure you want to update the configuration?' + const label = `Please type "I understand the ${customizationsText} I set" to confirm.` + const expectedInputValue = `I understand the ${customizationsText} I set` + + const confirmRes = await this.confirmService.confirmWithInput(message, label, expectedInputValue) + if (confirmRes === false) return + } + + const data: CustomConfig = { + instance: { + name: this.form.value['instanceName'], + shortDescription: this.form.value['instanceShortDescription'], + description: this.form.value['instanceDescription'], + terms: this.form.value['instanceTerms'], + defaultClientRoute: this.form.value['instanceDefaultClientRoute'], + defaultNSFWPolicy: this.form.value['instanceDefaultNSFWPolicy'], + customizations: { + javascript: this.form.value['customizationJavascript'], + css: this.form.value['customizationCSS'] + } + }, + services: { + twitter: { + username: this.form.value['servicesTwitterUsername'], + whitelisted: this.form.value['servicesTwitterWhitelisted'] + } + }, cache: { previews: { size: this.form.value['cachePreviewsSize'] @@ -146,6 +222,8 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit { this.serverService.loadConfig() this.updateForm() + + this.notificationsService.success('Success', 'Configuration updated.') }, err => this.notificationsService.error('Error', err.message) @@ -154,13 +232,23 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit { private updateForm () { const data = { + instanceName: this.customConfig.instance.name, + instanceShortDescription: this.customConfig.instance.shortDescription, + instanceDescription: this.customConfig.instance.description, + instanceTerms: this.customConfig.instance.terms, + instanceDefaultClientRoute: this.customConfig.instance.defaultClientRoute, + instanceDefaultNSFWPolicy: this.customConfig.instance.defaultNSFWPolicy, + servicesTwitterUsername: this.customConfig.services.twitter.username, + servicesTwitterWhitelisted: this.customConfig.services.twitter.whitelisted, cachePreviewsSize: this.customConfig.cache.previews.size, signupEnabled: this.customConfig.signup.enabled, signupLimit: this.customConfig.signup.limit, adminEmail: this.customConfig.admin.email, userVideoQuota: this.customConfig.user.videoQuota, transcodingThreads: this.customConfig.transcoding.threads, - transcodingEnabled: this.customConfig.transcoding.enabled + transcodingEnabled: this.customConfig.transcoding.enabled, + customizationJavascript: this.customConfig.instance.customizations.javascript, + customizationCSS: this.customConfig.instance.customizations.css } for (const resolution of this.resolutions) {