From 20f946a94500628201d366ece3f5de428f35e721 Mon Sep 17 00:00:00 2001 From: Alexis <35.alexis.pele@gmail.com> Date: Sat, 19 Dec 2020 18:15:39 +0100 Subject: [PATCH] - Added email availability checker in API --- api/repositories/user-repository.js | 24 +++++++++++++++++++++--- api/routes/users.js | 27 ++++++++++++++++++++++++++- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/api/repositories/user-repository.js b/api/repositories/user-repository.js index 9aceec5..a8cbe55 100644 --- a/api/repositories/user-repository.js +++ b/api/repositories/user-repository.js @@ -166,18 +166,36 @@ class UserRepository { // Check if one user already has that email checkIfEmailAvailable(mail) { return new Promise((resolve, reject) => { + + if (!this.validateEmail(mail)) { + reject({ + "message": "The request isn't a correctly formed email.", + "code": 400, + }) + } + this.getOneByEmail(mail, false) .then(() => { - reject({ + resolve({ "message": "This email is already linked to an account.", - "code": 403 + "available": false, + "code": 200 }) }) .catch(() => { - resolve(true) + resolve({ + "message": "This email is available.", + "available": true, + "code": 200 + }) }) }) } + + validateEmail(email) { + const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; + return re.test(String(email).toLowerCase()); + } } module.exports = UserRepository \ No newline at end of file diff --git a/api/routes/users.js b/api/routes/users.js index 6219953..ab41d03 100644 --- a/api/routes/users.js +++ b/api/routes/users.js @@ -38,7 +38,7 @@ router.get('/', async (req, res) => { }) -// GET ONE FORM UUID ------------------ +// GET ONE FROM UUID ------------------ const getUserByUUID = (uuid) => { return Users.getOneByUUID(uuid) .catch(err => { @@ -63,6 +63,31 @@ router.get('/:uuid/', async (req, res) => { }) +// CHECK IF MAIL IS AVAILABLE ------------------ +const checkIfEmailAvailable = (mail) => { + return Users.checkIfEmailAvailable(mail) + .catch(err => { + console.log(err) + throw err + }) +} +router.get('/available/:mail/', async (req, res) => { + checkIfEmailAvailable(req.params.mail) + .then(v => { + res.setHeader('Content-Type', 'application/json;charset=utf-8') + res.end(JSON.stringify(v)) + }) + .catch(err => { + res.status(err.code).send(JSON.stringify( + { + "error": err.message, + "code": err.code + }) + ) + }) +}) + + // LOG A USER ------------------ const logUser = (mail, password) => { return Users.logUser(mail, password)