aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src/app
diff options
context:
space:
mode:
authorPoslovitch <poslovitch@bentobox.world>2021-04-24 09:57:01 +0000
committerChocobozzz <me@florianbigard.com>2021-05-28 13:56:05 +0200
commit1f256e7d3cf056c2d999260155cdba58ae1b878b (patch)
treee33db698da50c329e1eea4122e190e6ef247d8e4 /client/src/app
parentf22e0e2c19b06edfc85429198f9e54a075f71ad3 (diff)
downloadPeerTube-1f256e7d3cf056c2d999260155cdba58ae1b878b.tar.gz
PeerTube-1f256e7d3cf056c2d999260155cdba58ae1b878b.tar.zst
PeerTube-1f256e7d3cf056c2d999260155cdba58ae1b878b.zip
Implemented configurable minimum signup age
Implements https://github.com/Chocobozzz/PeerTube/issues/3612 Fixed lint and removed debug Fixed another lint error Apply suggestions from code review Co-authored-by: Chocobozzz <chocobozzz@cpy.re> Add tests for min signup age config
Diffstat (limited to 'client/src/app')
-rw-r--r--client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html16
-rw-r--r--client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts1
-rw-r--r--client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts4
-rw-r--r--client/src/app/+signup/+register/register-step-terms.component.html4
-rw-r--r--client/src/app/+signup/+register/register-step-terms.component.ts1
-rw-r--r--client/src/app/+signup/+register/register.component.html1
-rw-r--r--client/src/app/+signup/+register/register.component.ts4
-rw-r--r--client/src/app/core/server/server.service.ts3
-rw-r--r--client/src/app/shared/form-validators/custom-config-validators.ts9
9 files changed, 37 insertions, 6 deletions
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html b/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html
index 03997ea40..1f542e458 100644
--- a/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html
+++ b/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html
@@ -158,6 +158,20 @@
158 158
159 <small i18n *ngIf="hasUnlimitedSignup()" class="text-muted">Signup won't be limited to a fixed number of users.</small> 159 <small i18n *ngIf="hasUnlimitedSignup()" class="text-muted">Signup won't be limited to a fixed number of users.</small>
160 </div> 160 </div>
161
162 <div [ngClass]="getDisabledSignupClass()" class="mt-3">
163 <label i18n for="signupMinimumAge">Minimum required age to create an account</label>
164
165 <div class="number-with-unit">
166 <input
167 type="number" min="1" id="signupMinimumAge" class="form-control"
168 formControlName="minimumAge" [ngClass]="{ 'input-error': formErrors['signup.minimumAge'] }"
169 >
170 <span i18n>{form.value['signup']['minimumAge'], plural, =1 {year old} other {years old}}</span>
171 </div>
172
173 <div *ngIf="formErrors.signup.minimumAge" class="form-error">{{ formErrors.signup.minimumAge }}</div>
174 </div>
161 </ng-container> 175 </ng-container>
162 </my-peertube-checkbox> 176 </my-peertube-checkbox>
163 </div> 177 </div>
@@ -469,7 +483,7 @@
469 <ng-container formGroupName="twitter"> 483 <ng-container formGroupName="twitter">
470 484
471 <div class="form-group"> 485 <div class="form-group">
472 <label i18n for="signupLimit">Your Twitter username</label> 486 <label for="servicesTwitterUsername" i18n>Your Twitter username</label>
473 487
474 <input 488 <input
475 type="text" id="servicesTwitterUsername" class="form-control" 489 type="text" id="servicesTwitterUsername" class="form-control"
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts
index d50148e7a..74fdb87a1 100644
--- a/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts
+++ b/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts
@@ -1,4 +1,3 @@
1
2import { pairwise } from 'rxjs/operators' 1import { pairwise } from 'rxjs/operators'
3import { SelectOptionsItem } from 'src/types/select-options-item.model' 2import { SelectOptionsItem } from 'src/types/select-options-item.model'
4import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core' 3import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core'
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 dc8334dd0..cb65ca6e7 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
@@ -21,6 +21,7 @@ import {
21 SEARCH_INDEX_URL_VALIDATOR, 21 SEARCH_INDEX_URL_VALIDATOR,
22 SERVICES_TWITTER_USERNAME_VALIDATOR, 22 SERVICES_TWITTER_USERNAME_VALIDATOR,
23 SIGNUP_LIMIT_VALIDATOR, 23 SIGNUP_LIMIT_VALIDATOR,
24 SIGNUP_MINIMUM_AGE_VALIDATOR,
24 TRANSCODING_THREADS_VALIDATOR 25 TRANSCODING_THREADS_VALIDATOR
25} from '@app/shared/form-validators/custom-config-validators' 26} from '@app/shared/form-validators/custom-config-validators'
26import { USER_VIDEO_QUOTA_DAILY_VALIDATOR, USER_VIDEO_QUOTA_VALIDATOR } from '@app/shared/form-validators/user-validators' 27import { USER_VIDEO_QUOTA_DAILY_VALIDATOR, USER_VIDEO_QUOTA_VALIDATOR } from '@app/shared/form-validators/user-validators'
@@ -120,7 +121,8 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit {
120 signup: { 121 signup: {
121 enabled: null, 122 enabled: null,
122 limit: SIGNUP_LIMIT_VALIDATOR, 123 limit: SIGNUP_LIMIT_VALIDATOR,
123 requiresEmailVerification: null 124 requiresEmailVerification: null,
125 minimumAge: SIGNUP_MINIMUM_AGE_VALIDATOR
124 }, 126 },
125 import: { 127 import: {
126 videos: { 128 videos: {
diff --git a/client/src/app/+signup/+register/register-step-terms.component.html b/client/src/app/+signup/+register/register-step-terms.component.html
index 1cfdc0a3a..28a6e0021 100644
--- a/client/src/app/+signup/+register/register-step-terms.component.html
+++ b/client/src/app/+signup/+register/register-step-terms.component.html
@@ -2,8 +2,8 @@
2 <div class="form-group form-group-terms"> 2 <div class="form-group form-group-terms">
3 <my-peertube-checkbox inputName="terms" formControlName="terms"> 3 <my-peertube-checkbox inputName="terms" formControlName="terms">
4 <ng-template ptTemplate="label"> 4 <ng-template ptTemplate="label">
5 <ng-container i18n> 5 <ng-container i18n>
6 I am at least 16 years old and agree 6 I am at least {{ minimumAge }} years old and agree
7 to the <a class="terms-anchor" (click)="onTermsClick($event)" href='#'>Terms</a> 7 to the <a class="terms-anchor" (click)="onTermsClick($event)" href='#'>Terms</a>
8 <ng-container *ngIf="hasCodeOfConduct"> and to the <a (click)="onCodeOfConductClick($event)" href='#'>Code of Conduct</a></ng-container> 8 <ng-container *ngIf="hasCodeOfConduct"> and to the <a (click)="onCodeOfConductClick($event)" href='#'>Code of Conduct</a></ng-container>
9 of this instance 9 of this instance
diff --git a/client/src/app/+signup/+register/register-step-terms.component.ts b/client/src/app/+signup/+register/register-step-terms.component.ts
index db834c68d..20c1ae1c4 100644
--- a/client/src/app/+signup/+register/register-step-terms.component.ts
+++ b/client/src/app/+signup/+register/register-step-terms.component.ts
@@ -12,6 +12,7 @@ import { FormReactive, FormValidatorService } from '@app/shared/shared-forms'
12}) 12})
13export class RegisterStepTermsComponent extends FormReactive implements OnInit { 13export class RegisterStepTermsComponent extends FormReactive implements OnInit {
14 @Input() hasCodeOfConduct = false 14 @Input() hasCodeOfConduct = false
15 @Input() minimumAge = 16
15 16
16 @Output() formBuilt = new EventEmitter<FormGroup>() 17 @Output() formBuilt = new EventEmitter<FormGroup>()
17 @Output() termsClick = new EventEmitter<void>() 18 @Output() termsClick = new EventEmitter<void>()
diff --git a/client/src/app/+signup/+register/register.component.html b/client/src/app/+signup/+register/register.component.html
index dc1c7496f..de72065d3 100644
--- a/client/src/app/+signup/+register/register.component.html
+++ b/client/src/app/+signup/+register/register.component.html
@@ -17,6 +17,7 @@
17 17
18 <my-register-step-terms 18 <my-register-step-terms
19 [hasCodeOfConduct]="!!aboutHtml.codeOfConduct" 19 [hasCodeOfConduct]="!!aboutHtml.codeOfConduct"
20 [minimumAge]="minimumAge"
20 (formBuilt)="onTermsFormBuilt($event)" (termsClick)="onTermsClick()" (codeOfConductClick)="onCodeOfConductClick()" 21 (formBuilt)="onTermsFormBuilt($event)" (termsClick)="onTermsClick()" (codeOfConductClick)="onCodeOfConductClick()"
21 ></my-register-step-terms> 22 ></my-register-step-terms>
22 23
diff --git a/client/src/app/+signup/+register/register.component.ts b/client/src/app/+signup/+register/register.component.ts
index 8e89bb01a..241ca04c6 100644
--- a/client/src/app/+signup/+register/register.component.ts
+++ b/client/src/app/+signup/+register/register.component.ts
@@ -56,6 +56,10 @@ export class RegisterComponent implements OnInit {
56 return this.serverConfig.signup.requiresEmailVerification 56 return this.serverConfig.signup.requiresEmailVerification
57 } 57 }
58 58
59 get minimumAge () {
60 return this.serverConfig.signup.minimumAge
61 }
62
59 ngOnInit (): void { 63 ngOnInit (): void {
60 this.serverConfig = this.route.snapshot.data.serverConfig 64 this.serverConfig = this.route.snapshot.data.serverConfig
61 65
diff --git a/client/src/app/core/server/server.service.ts b/client/src/app/core/server/server.service.ts
index 5b1b7603f..6918957f4 100644
--- a/client/src/app/core/server/server.service.ts
+++ b/client/src/app/core/server/server.service.ts
@@ -60,7 +60,8 @@ export class ServerService {
60 signup: { 60 signup: {
61 allowed: false, 61 allowed: false,
62 allowedForCurrentIP: false, 62 allowedForCurrentIP: false,
63 requiresEmailVerification: false 63 requiresEmailVerification: false,
64 minimumAge: 16
64 }, 65 },
65 transcoding: { 66 transcoding: {
66 profile: 'default', 67 profile: 'default',
diff --git a/client/src/app/shared/form-validators/custom-config-validators.ts b/client/src/app/shared/form-validators/custom-config-validators.ts
index ef6e9b456..1ed5700ff 100644
--- a/client/src/app/shared/form-validators/custom-config-validators.ts
+++ b/client/src/app/shared/form-validators/custom-config-validators.ts
@@ -49,6 +49,15 @@ export const SIGNUP_LIMIT_VALIDATOR: BuildFormValidator = {
49 } 49 }
50} 50}
51 51
52export const SIGNUP_MINIMUM_AGE_VALIDATOR: BuildFormValidator = {
53 VALIDATORS: [Validators.required, Validators.min(1), Validators.pattern('[0-9]+')],
54 MESSAGES: {
55 'required': $localize`Signup minimum age is required.`,
56 'min': $localize`Signup minimum age must be greater than 1.`,
57 'pattern': $localize`Signup minimum age must be a number.`
58 }
59}
60
52export const ADMIN_EMAIL_VALIDATOR: BuildFormValidator = { 61export const ADMIN_EMAIL_VALIDATOR: BuildFormValidator = {
53 VALIDATORS: [Validators.required, Validators.email], 62 VALIDATORS: [Validators.required, Validators.email],
54 MESSAGES: { 63 MESSAGES: {