diff --git a/users/userservice/src/controllers/user-controller.ts b/users/userservice/src/controllers/user-controller.ts index c1dd8eb1..df8d7cdd 100644 --- a/users/userservice/src/controllers/user-controller.ts +++ b/users/userservice/src/controllers/user-controller.ts @@ -1,6 +1,7 @@ import { Request, Response } from 'express'; import bcrypt from 'bcrypt'; import { validateProfileBody } from '../utils/profile-body-validation'; +import { validateNoSpaces, validateMaxLength } from '../utils/username-validation'; const { validateRequiredFields, @@ -17,6 +18,8 @@ const addUser = async (req: Request, res: Response) => { validateRequiredFields(req, ['username', 'password']); validateNotEmpty(req, ['username']); validateRequiredLength(req, ['password'], 8); + validateNoSpaces(req, ['username']); + validateMaxLength(req, ['username'], 20); const username = req.body.username.toString(); const password = req.body.password.toString(); diff --git a/users/userservice/src/utils/username-validation.ts b/users/userservice/src/utils/username-validation.ts new file mode 100644 index 00000000..fadfe530 --- /dev/null +++ b/users/userservice/src/utils/username-validation.ts @@ -0,0 +1,19 @@ +import { Request } from 'express'; + +function validateNoSpaces(req: Request, fieldsThatCannotHaveSpace: string[]) { + for (const field of fieldsThatCannotHaveSpace) { + if (req.body[field]!.indexOf(' ') >= 0) { + throw new Error(`The field "${field}" cannot have spaces`); + } + } +} + +function validateMaxLength(req: Request, fields: string[], maxLength: number) { + for (const field of fields) { + if (req.body[field]!.length > maxLength) { + throw new Error(`The field "${field}" cannot have more than ${maxLength} characters`); + } + } +} + +export { validateNoSpaces, validateMaxLength }; \ No newline at end of file diff --git a/users/userservice/test/user-service.test.ts b/users/userservice/test/user-service.test.ts index 8fe74efd..f86dc1e3 100644 --- a/users/userservice/test/user-service.test.ts +++ b/users/userservice/test/user-service.test.ts @@ -47,6 +47,26 @@ describe('User Service', () => { expect(response.status).toBe(400); }); + it('should get an error when registering a user with a blank space on POST /adduser', async () => { + const newUser = { + username: 'invaliduser01 ', + password: 'testpassword2', + }; + + const response = await request(app).post('/adduser').send(newUser); + expect(response.status).toBe(400); + }); + + it('should get an error when registering a user with more than 20 characters POST /adduser', async () => { + const newUser = { + username: 'thisusernamehasmorethan20characters', + password: 'testpassword2', + }; + + const response = await request(app).post('/adduser').send(newUser); + expect(response.status).toBe(400); + }); + // GET /history error (no user) it('should get an error in GET /history when not passing a user', async () => { const response = await request(app)