X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=sidebyside;f=client%2Fsrc%2Fapp%2F%2Badmin%2Fconfig%2Fedit-custom-config%2Fedit-custom-config.component.ts;h=73ff4b7bbe6551ecb68e51670f2ec2c6d8ff826f;hb=25acef90a85c1584880dec96aa402f896af8364a;hp=02726853616d7c765e7418e8695c62b696bdd9c7;hpb=00b5556c182fa70dfca17c517488b8afae6257c9;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 027268536..73ff4b7bb 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,17 +2,21 @@ 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, 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' +import { I18n } from '@ngx-translate/i18n-polyfill' @Component({ selector: 'my-edit-custom-config', @@ -43,8 +47,12 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit { form: FormGroup formErrors = { instanceName: '', + instanceShortDescription: '', instanceDescription: '', instanceTerms: '', + instanceDefaultClientRoute: '', + instanceDefaultNSFWPolicy: '', + servicesTwitterUsername: '', cachePreviewsSize: '', signupLimit: '', adminEmail: '', @@ -54,19 +62,26 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit { 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, + private i18n: I18n ) { super() } @@ -78,8 +93,13 @@ 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 ], @@ -109,10 +129,15 @@ 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) + err => this.notificationsService.error(this.i18n('Error'), err.message) ) } @@ -124,17 +149,50 @@ 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('/') + + // FIXME: i18n service does not support string concatenation + const message = this.i18n('You set custom {{customizationsText}}. ', { customizationsText }) + + this.i18n('This could lead to security issues or bugs if you do not understand it. ') + + this.i18n('Are you sure you want to update the configuration?') + const label = this.i18n( + 'Please type "I understand the {{customizationsText}} I set" to confirm.', + { customizationsText } + ) + const expectedInputValue = this.i18n('I understand the {{customizationsText}} I set', { customizationsText }) + + 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'] @@ -173,18 +231,23 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit { this.updateForm() - this.notificationsService.success('Success', 'Configuration updated.') + this.notificationsService.success(this.i18n('Success'), this.i18n('Configuration updated.')) }, - err => this.notificationsService.error('Error', err.message) + err => this.notificationsService.error(this.i18n('Error'), err.message) ) } 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,