username/display_name/video_channel_name min length 1 and max length 50 (#1265)
authorBRAINS YUM <43896676+McFlat@users.noreply.github.com>
Fri, 7 Dec 2018 13:54:33 +0000 (07:54 -0600)
committerChocobozzz <me@florianbigard.com>
Fri, 7 Dec 2018 13:54:33 +0000 (14:54 +0100)
* make username, display_name and video_channel_name min length 1 and max length 50; (fixes #1263);
    ! still some bug on the frontend complains but if you remove the disabled property it creates the account just fine;
allow for usernames to start with a number;
fix test, since username can be 1 char now make test check empty;
fix test, Should fail with a too long username;
fix test, Should fail with a too small username;
fix regular expression for username and videoChannel;
change username, videoChannel to be lowercase and fix message;

* change 1 characters to 1 character

client/src/app/shared/forms/form-validators/user-validators.service.ts
client/src/app/shared/forms/form-validators/video-channel-validators.service.ts
server/initializers/constants.ts
server/tests/api/check-params/users.ts

index d14fa47779b9460d137756c7c0bda4c84e8569d0..66543657a380a6fbaed4f735e22b08a14f76e848 100644 (file)
@@ -23,15 +23,15 @@ export class UserValidatorsService {
     this.USER_USERNAME = {
       VALIDATORS: [
         Validators.required,
-        Validators.minLength(3),
-        Validators.maxLength(20),
-        Validators.pattern(/^[a-z0-9._]+$/)
+        Validators.minLength(1),
+        Validators.maxLength(50),
+        Validators.pattern(/^[a-z0-9][a-z0-9-._]*$/)
       ],
       MESSAGES: {
         'required': this.i18n('Username is required.'),
-        'minlength': this.i18n('Username must be at least 3 characters long.'),
-        'maxlength': this.i18n('Username cannot be more than 20 characters long.'),
-        'pattern': this.i18n('Username should be only lowercase alphanumeric characters.')
+        'minlength': this.i18n('Username must be at least 1 character long.'),
+        'maxlength': this.i18n('Username cannot be more than 50 characters long.'),
+        'pattern': this.i18n('Username should be lowercase alphanumeric; dots, dashes and underscores are allowed.')
       }
     }
 
@@ -88,13 +88,13 @@ export class UserValidatorsService {
     this.USER_DISPLAY_NAME = {
       VALIDATORS: [
         Validators.required,
-        Validators.minLength(3),
-        Validators.maxLength(120)
+        Validators.minLength(1),
+        Validators.maxLength(50)
       ],
       MESSAGES: {
         'required': this.i18n('Display name is required.'),
-        'minlength': this.i18n('Display name must be at least 3 characters long.'),
-        'maxlength': this.i18n('Display name cannot be more than 120 characters long.')
+        'minlength': this.i18n('Display name must be at least 1 character long.'),
+        'maxlength': this.i18n('Display name cannot be more than 50 characters long.')
       }
     }
 
index f62ff65f776b49cbaa4ba33b04dc6434d9d0ed66..7df4f6adfe0de3b804fe65096cfe5aadbbf26ab6 100644 (file)
@@ -14,28 +14,28 @@ export class VideoChannelValidatorsService {
     this.VIDEO_CHANNEL_NAME = {
       VALIDATORS: [
         Validators.required,
-        Validators.minLength(3),
-        Validators.maxLength(20),
-        Validators.pattern(/^[a-z0-9._]+$/)
+        Validators.minLength(1),
+        Validators.maxLength(50),
+        Validators.pattern(/^[a-z0-9][a-z0-9-._]*$/)
       ],
       MESSAGES: {
         'required': this.i18n('Name is required.'),
-        'minlength': this.i18n('Name must be at least 3 characters long.'),
-        'maxlength': this.i18n('Name cannot be more than 20 characters long.'),
-        'pattern': this.i18n('Name should be only lowercase alphanumeric characters.')
+        'minlength': this.i18n('Name must be at least 1 character long.'),
+        'maxlength': this.i18n('Name cannot be more than 50 characters long.'),
+        'pattern': this.i18n('Name should be lowercase alphanumeric; dots, dashes and underscores are allowed.')
       }
     }
 
     this.VIDEO_CHANNEL_DISPLAY_NAME = {
       VALIDATORS: [
         Validators.required,
-        Validators.minLength(3),
-        Validators.maxLength(120)
+        Validators.minLength(1),
+        Validators.maxLength(50)
       ],
       MESSAGES: {
         'required': i18n('Display name is required.'),
-        'minlength': i18n('Display name must be at least 3 characters long.'),
-        'maxlength': i18n('Display name cannot be more than 120 characters long.')
+        'minlength': i18n('Display name must be at least 1 character long.'),
+        'maxlength': i18n('Display name cannot be more than 50 characters long.')
       }
     }
 
index 6b798875cbe089bbf5fba2a7a9220d5cb5a94145..d4496bc34e36740eed0fe87407662f7dacbe9502 100644 (file)
@@ -300,9 +300,9 @@ const CONFIG = {
 
 const CONSTRAINTS_FIELDS = {
   USERS: {
-    NAME: { min: 3, max: 120 }, // Length
+    NAME: { min: 1, max: 50 }, // Length
     DESCRIPTION: { min: 3, max: 1000 }, // Length
-    USERNAME: { min: 3, max: 20 }, // Length
+    USERNAME: { min: 1, max: 50 }, // Length
     PASSWORD: { min: 6, max: 255 }, // Length
     VIDEO_QUOTA: { min: -1 },
     VIDEO_QUOTA_DAILY: { min: -1 },
@@ -316,7 +316,7 @@ const CONSTRAINTS_FIELDS = {
     REASON: { min: 2, max: 300 } // Length
   },
   VIDEO_CHANNELS: {
-    NAME: { min: 3, max: 120 }, // Length
+    NAME: { min: 1, max: 50 }, // Length
     DESCRIPTION: { min: 3, max: 1000 }, // Length
     SUPPORT: { min: 3, max: 1000 }, // Length
     URL: { min: 3, max: 2000 } // Length
index 273be1679f3e2a1fc417f5d423798270266a9a70..ee225dc2e13999edf1007b296b292c781bcfa1bc 100644 (file)
@@ -99,13 +99,13 @@ describe('Test users API validators', function () {
     }
 
     it('Should fail with a too small username', async function () {
-      const fields = immutableAssign(baseCorrectParams, { username: 'fi' })
+      const fields = immutableAssign(baseCorrectParams, { username: '' })
 
       await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields })
     })
 
     it('Should fail with a too long username', async function () {
-      const fields = immutableAssign(baseCorrectParams, { username: 'my_super_username_which_is_very_long' })
+      const fields = immutableAssign(baseCorrectParams, { username: 'super'.repeat(11) })
 
       await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields })
     })
@@ -550,13 +550,13 @@ describe('Test users API validators', function () {
     }
 
     it('Should fail with a too small username', async function () {
-      const fields = immutableAssign(baseCorrectParams, { username: 'ji' })
+      const fields = immutableAssign(baseCorrectParams, { username: '' })
 
       await makePostBodyRequest({ url: server.url, path: registrationPath, token: server.accessToken, fields })
     })
 
     it('Should fail with a too long username', async function () {
-      const fields = immutableAssign(baseCorrectParams, { username: 'my_super_username_which_is_very_long' })
+      const fields = immutableAssign(baseCorrectParams, { username: 'super'.repeat(11) })
 
       await makePostBodyRequest({ url: server.url, path: registrationPath, token: server.accessToken, fields })
     })