From 36999861ca08080d0d16240effc706ad02bdaeeb Mon Sep 17 00:00:00 2001
From: Gabriel Ruschel <grc15@inf.ufpr.br>
Date: Wed, 16 May 2018 11:11:37 -0300
Subject: [PATCH] Verification if the account already exists in the same (or
 another) plataform

---
 src/libs/routes/user.js | 98 +++++++++++++++++++++++++----------------
 1 file changed, 60 insertions(+), 38 deletions(-)

diff --git a/src/libs/routes/user.js b/src/libs/routes/user.js
index af123a58..7becb191 100644
--- a/src/libs/routes/user.js
+++ b/src/libs/routes/user.js
@@ -141,54 +141,76 @@ userApp.post('/', (req, res, next) => {
     admin: false
   });
 
-  if (typeof req.body.password === 'undefined' || !req.body.password) {
-    res.statusCode = 400;
-    return res.json({errors: ["O campo senha é obrigatório"]});
-  } else {
-    user.save((err) => {
-      if(err) {
+  let emailAddress = req.body.email;
+  let origin = req.body.origin;
+  User.findOne({email: emailAddress}, (err, find)=> {
+    if(err) {
         log.error(err);
         let errors = [];
         for(let errName in err.errors) {
           errors.push(err.errors[errName].message);
         }
-        log.error(errors);
         res.statusCode = 400;
         return res.json({err, errors});
-      }
+    } else if (find) {
+          if (find.origin != origin) {
+              res.statusCode = 400;
+              return res.json({errors:["Esta conta já existe em outra plataforma"]});
+          } else {
+              res.statusCode = 400;
+              return res.json({errors:["Esta conta já existe nesta plataforma"]});
+          }
+    } else {
+          if (typeof req.body.password === 'undefined' || !req.body.password) {
+            res.statusCode = 400;
+            return res.json({errors: ["O campo senha é obrigatório"]});
+          } else {
+            user.save((err) => {
+              if(err) {
+                log.error(err);
+                let errors = [];
+                for(let errName in err.errors) {
+                  errors.push(err.errors[errName].message);
+                }
+                log.error(errors);
+                res.statusCode = 400;
+                return res.json({err, errors});
+              }
 
-      // Create verification token
-      let verificationToken = new VerificationToken({
-        userId: user._id
-      });
+              // Create verification token
+              let verificationToken = new VerificationToken({
+                userId: user._id
+              });
 
-      verificationToken.createVerificationToken((err, token) => {
-        if(err) {
-          log.error(err);
-          return next(err);
-        }
-        let url = config.default.lde.url + '/verify';
-        let text = `Olá, ${user.name}, seja bem vindo/a ao Laboratório de Dados Educacionais.\n\nClique neste link para confirmar sua conta: ${url}/${token}`;
-        // Send confirmation email
-        let mailOptions = {
-          to: `"${user.name} <${user.email}>"`,
-          subject: "Confirme seu cadastro - Laboratório de Dados Educacionais",
-          text
-        }
-        email(mailOptions, (err, info) => {
-          if(err) {
-            log.error(err);
-            res.json({msg: 'User created'});
-          }
-          if(info) {
-            log.info(`Message ${info.messageId} sent: ${info.response}`);
-            log.info(`Usuário ${user.email} foi criado`);
+              verificationToken.createVerificationToken((err, token) => {
+                if(err) {
+                  log.error(err);
+                  return next(err);
+                }
+                let url = config.default.lde.url + '/verify';
+                let text = `Olá, ${user.name}, seja bem vindo/a ao Laboratório de Dados Educacionais.\n\nClique neste link para confirmar sua conta: ${url}/${token}`;
+                // Send confirmation email
+                let mailOptions = {
+                  to: `"${user.name} <${user.email}>"`,
+                  subject: "Confirme seu cadastro - Laboratório de Dados Educacionais",
+                  text
+                }
+                email(mailOptions, (err, info) => {
+                  if(err) {
+                    log.error(err);
+                    res.json({msg: 'User created'});
+                  }
+                  if(info) {
+                    log.info(`Message ${info.messageId} sent: ${info.response}`);
+                    log.info(`Usuário ${user.email} foi criado`);
+                  }
+                  res.json({msg: 'User created'});
+                });
+              });
+            });
           }
-          res.json({msg: 'User created'});
-        });
-      });
-    });
-  }
+      }
+  })
 
 });
 
-- 
GitLab