Usernames are case insensitive now
authorChocobozzz <florian.bigard@gmail.com>
Sat, 4 Nov 2017 17:32:38 +0000 (18:32 +0100)
committerChocobozzz <florian.bigard@gmail.com>
Sat, 4 Nov 2017 17:32:38 +0000 (18:32 +0100)
client/src/app/shared/forms/form-validators/user.ts
server/helpers/custom-validators/users.ts
server/middlewares/validators/users.ts
server/tests/api/check-params/users.ts

index 9d200649cfae6f98297365d731ac94957d59b39e..602576efa00b5608f7ce96ebe9676448e8b5d1d3 100644 (file)
@@ -1,11 +1,17 @@
 import { Validators } from '@angular/forms'
 
 export const USER_USERNAME = {
-  VALIDATORS: [ Validators.required, Validators.minLength(3), Validators.maxLength(20) ],
+  VALIDATORS: [
+    Validators.required,
+    Validators.minLength(3),
+    Validators.maxLength(20),
+    Validators.pattern(/^[a-z0-9._]+$/)
+  ],
   MESSAGES: {
     'required': 'Username is required.',
     'minlength': 'Username must be at least 3 characters long.',
-    'maxlength': 'Username cannot be more than 20 characters long.'
+    'maxlength': 'Username cannot be more than 20 characters long.',
+    'pattern': 'Username should be only lowercase alphanumeric characters.'
   }
 }
 export const USER_EMAIL = {
index f423d63177a0bfb58efb5196c46b21b873826b80..b5b5642d6ff5fe992d3f6ec99061e42fea7688f8 100644 (file)
@@ -18,7 +18,7 @@ function isUserVideoQuotaValid (value: string) {
 function isUserUsernameValid (value: string) {
   const max = USERS_CONSTRAINTS_FIELDS.USERNAME.max
   const min = USERS_CONSTRAINTS_FIELDS.USERNAME.min
-  return exists(value) && validator.matches(value, new RegExp(`^[a-zA-Z0-9._]{${min},${max}}$`))
+  return exists(value) && validator.matches(value, new RegExp(`^[a-z0-9._]{${min},${max}}$`))
 }
 
 function isUserDisplayNSFWValid (value: any) {
index 0b463acc031a7914e03c3c1987a43577e3dfbea1..6b845f62bbbe3ed37520e466a71fc18a2012ae9d 100644 (file)
@@ -19,7 +19,7 @@ import {
 import { UserInstance, VideoInstance } from '../../models'
 
 const usersAddValidator = [
-  body('username').custom(isUserUsernameValid).withMessage('Should have a valid username'),
+  body('username').custom(isUserUsernameValid).withMessage('Should have a valid username (lowercase alphanumeric characters)'),
   body('password').custom(isUserPasswordValid).withMessage('Should have a valid password'),
   body('email').isEmail().withMessage('Should have a valid email'),
   body('videoQuota').custom(isUserVideoQuotaValid).withMessage('Should have a valid user quota'),
@@ -196,7 +196,7 @@ function checkUserDoesNotAlreadyExist (username: string, email: string, res: exp
       .then(user => {
         if (user) {
           return res.status(409)
-                    .send({ error: 'User already exists.' })
+                    .send({ error: 'User with this username of email already exists.' })
                     .end()
         }
 
index 687999c096a6667adb7e2352d975dee280e9b1fc..578fece49a7fc2bfd5223342e8b318acf95ea634 100644 (file)
@@ -112,6 +112,18 @@ describe('Test users API validators', function () {
       await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields })
     })
 
+    it('Should fail with a not lowercase username', async function () {
+      const fields = {
+        username: 'Toto',
+        email: 'test@example.com',
+        password: 'my_super_password',
+        videoQuota: 42000000,
+        role: UserRole.USER
+      }
+
+      await makePostBodyRequest({ url: server.url, path, token: server.accessToken, fields })
+    })
+
     it('Should fail with an incorrect username', async function () {
       const fields = {
         username: 'my username',