diff --git a/src/libs/middlewares/email.js b/src/libs/middlewares/email.js
index 4d1d51711566a586fc5d29c0bf8ba7953f7da0f1..679b06414717367fec4666c060cab9032c6f41eb 100644
--- a/src/libs/middlewares/email.js
+++ b/src/libs/middlewares/email.js
@@ -32,8 +32,10 @@ module.exports = function send(options, cb) {
     let opt = Object.assign({}, mailOptions, options);
     transporter.sendMail(opt, (err, info) => {
         if(err) {
+	    console.log("Erro email");
             return cb(err);
         }
+	console.log("OK email");
         cb(null, info);
     });
 };
diff --git a/src/libs/routes_v1/user.js b/src/libs/routes_v1/user.js
index cc99eebdb7517de6a59e8ad7540778fd5436be77..95949bc3d2a40ab25578090a0662728918bc9d36 100644
--- a/src/libs/routes_v1/user.js
+++ b/src/libs/routes_v1/user.js
@@ -328,9 +328,8 @@ userApp.get('/reset/password', async (req, res, next) => {
       text
     }
     console.log(mailOptions);
-    email(mailOptions, (err) => {
+    email(mailOptions, (err, info) => {
       if (err) {
-        console.log(err);
         log.error(err);
         res.json({ msg: 'Undelivered Reset Password Mail' });
       }
diff --git a/src/libs/routes_v1/user.js.save b/src/libs/routes_v1/user.js.save
new file mode 100644
index 0000000000000000000000000000000000000000..f8390c04555ed4ea96892476b8715d7d908a473d
--- /dev/null
+++ b/src/libs/routes_v1/user.js.save
@@ -0,0 +1,340 @@
+const express = require('express');
+
+const userApp = express();
+
+const libs = `${process.cwd()}/libs`;
+
+const config = require(`${libs}/config`);
+
+const log = require(`${libs}/log`)(module);
+
+const User = require(`${libs}/models/user`);
+
+const VerificationToken = require(`${libs}/models/verificationToken`);
+
+const ResetToken = require(`${libs}/models/resetToken`);
+
+const response = require(`${libs}/middlewares/response`);
+
+const email = require(`${libs}/middlewares/email`);
+
+const passport = require('passport');
+
+const uuid = require('node-uuid');
+
+function emailSyntax(email) {
+  const regex = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
+  return regex.test(email);
+}
+
+userApp.get('/schooling', (req, res, next) => {
+  req.result = [
+    'Não estudou',
+    'Ensino Fundamental Incompleto',
+    'Ensino Fundamental Completo',
+    'Ensino Médio',
+    'Graduação',
+    'Mestrado',
+    'Doutorado'
+  ];
+  next();
+}, response('schooling'));
+
+userApp.get('/segment', (req, res, next) => {
+  req.result = [
+    'Gestores e equipe gestora das secretarias e ministério da Educação',
+    'Gestores dos órgãos de planejamento e finanças (das três esferas de governo)',
+    'Agentes do poder legislativo',
+    'Agentes dos conselhos de educação',
+    'Profissionais da educação',
+    'Sindicato',
+    'Sociedade civil interessada no financiamento da Educação Básica de qualidade',
+    'Comunidade acadêmica',
+    'Imprensa',
+    'Outro [citar segmento]'
+  ];
+  next();
+}, response('segment'));
+
+userApp.get('/role', (req, res, next) => {
+  req.result = [
+    { "Gestores e equipe gestora das secretarias e ministério da Educação": ["Dirigente municipal, estadual e federal", "Secretário do MEC", "Servidor da área de planejamento educacional", "Membro de associação de gestores (Ex. Undime, Consed, etc)", "Outro [citar função]"] },
+    { "Gestores dos órgãos de planejamento e finanças (das três esferas de governo)": ["Equipe gestora dos órgãos de planejamento", "Equipe gestora dos órgãos de finanças", "Outro [citar função]"] },
+    { "Agentes do poder legislativo": ["Parlamentar", "Assessor/a parlamentar", "Auditor/a dos tribunais de conta", "Conselheiro/a de tribunais de conta.", "Outro [citar função]"] },
+    { "Agentes dos conselhos de educação": ["Conselheiro/a municipais, estaduais e federais", "Conselheiro/a do Fundeb", "Outro [citar função]"] },
+    { "Profissionais da educação": ["Professor/a da Educação Básica", "Profissional da educação não-docente", "Outro [citar função]"] },
+    { "Sindicato": ["Agente de sindicatos"] },
+    { "Sociedade civil interessada no financiamento da Educação Básica de qualidade": ["Membro de fóruns educacionais", "Membro de ONGs e demais entidades sem fins lucrativos", "Estudante da educação básica e membro de entidades estudantis", "Pais e membros de entidades de pais", "Outro [citar função]"] },
+    { "Comunidade acadêmica": ["Pesquisador/a", "Estudantes de graduação e pós-graduação", "Representantes de entidades de pesquisa (Ex.: ANPED, ANPAE e FINEDUCA)", "Outro [citar função]"] },
+    { "Imprensa": ["Jornalista", "Outro [citar função]"] },
+    { "Outro [citar segmento]": [] }
+  ]
+  next();
+}, response('role'));
+
+/*
+userApp.get('/', passport.authenticate('bearer', {session: false}), (req, res, next) => {
+  User.find((err, users) => {
+    if(err) {
+      log.error(err);
+      return next(err);
+    }
+
+    let result = [];
+    users.forEach((user) => {
+      let u = user.toObject();
+      delete u.hashedPassword;
+      delete u.salt;
+      result.push(u);
+    });
+    req.result = result;
+    next();
+  });
+}, response('users'));
+*/
+
+userApp.get('/me', passport.authenticate('bearer', { session: false }), (req, res, next) => {
+  let u = req.user.toJSON();
+  u._id = u.id;
+  u.institutionName = u.institution_name;
+  u.receiveEmails = u.receive_email;
+  u.receive_emails = u.receive_email;
+  delete u.id;
+  delete u.institution_name;
+  delete u.receive_email;
+  delete u.hashed_password;
+  delete u.salt;
+
+  req.result = u;
+  next();
+}, response('user'));
+
+function isEmpty(str) {
+  return (!str || str.length === 0 );
+}
+
+userApp.get('/:id', (req, res, next) => {
+  User.findByPk(req.params.id).then((user) => {
+    if (!user) {
+      res.statusCode = 404;
+      res.json({ msg: "O usuário não está cadastrado" });
+    } else {
+      let u = user.toJSON();
+      u._id = u.id;
+      u.institutionName = u.institution_name;
+      u.receiveEmails = u.receive_email;
+      u.receive_emails = u.receive_email;
+      delete u.id;
+      delete u.institution_name;
+      delete u.receive_email;
+      delete u.hashed_password;
+      delete u.salt;
+      req.result = u;
+      next();
+    }
+  }).catch(function (err) {
+    log.error(err);
+    return next(err);
+  });
+}, response('user'));
+
+userApp.post('/', async (req, res, next) => {
+  if (typeof req.body.password === 'undefined' || !req.body.password) {
+    res.statusCode = 400;
+    return res.json({ errors: ["O campo senha é obrigatório"] });
+  } 
+  else {
+    let user = await User.create({
+      id: 0,
+      email: req.body.email,
+      password: req.body.password,
+      hashed_password: 0,
+      salt: 0,
+      name: req.body.name,
+      nickname: req.body.nickname,
+      cpf: req.body.cpf,
+      cep: req.body.cep,
+      complement: req.body.complement,
+      address: req.body.address,
+      phone: req.body.phone,
+      schooling: req.body.schooling,
+      course: req.body.course,
+      segment: req.body.segment,
+      role: req.body.role,
+      institution_name: req.body.institutionName,
+      state: req.body.state,
+      city: req.body.city,
+      receive_email: false || req.body.receiveEmails || req.body.receive_emails,
+      origin: req.body.origin,
+      citesegment: req.body.citesegment,
+      citerole: req.body.citerole,
+      admin: false,
+      role_id: 0
+    }).catch(function (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 });
+      // handle error;
+    });
+    let tokenValue = uuid.v4();
+    const verificationToken = VerificationToken.create({
+      user_id: user.id,
+      token: tokenValue,
+      verified: false
+    });
+    if (!verificationToken) {
+      res.statusCode = 404;
+      return res.json({ msg: "Couldn't create Verification Token" });
+    }
+    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}/${tokenValue}`;
+    // 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: 'Message not delivered, user created but not confirmed' });
+      }
+      if (info) {
+        log.info(`Message ${info.messageId} sent: ${info.response}`);
+        log.info(`Usuário ${user.email} foi criado`);
+      }
+      res.json({ msg: 'User created' });
+    });
+  }
+});
+
+userApp.put('/:id', passport.authenticate('bearer', { session: false }), async (req, res, next) => {
+  let user = await User.findByPk(req.params.id).catch(function (err) {
+    if (err) {
+      log.error(err);
+      return next({ err });
+    }
+  })
+  if (!user) {
+    res.statusCode = 404;
+    return next({
+      err: {
+        message: 'Usuário não encontrado'
+      }
+    });
+  }
+
+  user.email = req.body.email || user.email;
+  user.name = req.body.name || user.name;
+  user.nickname = req.body.nickname || user.nickname || user.name;
+  user.cep = req.body.cep || user.cep;
+  user.complement = req.body.complement || user.complement;
+  user.address = req.body.address || user.address;
+  user.phone = req.body.phone || user.phone;
+  user.schooling = req.body.schooling || user.schooling;
+  user.course = req.body.course || user.course;
+  user.segment = req.body.segment || user.segment;
+  user.role = req.body.role || user.role;
+  user.institutionName = req.body.institutionName || user.institutionName;
+  user.state = req.body.state || user.state;
+  user.city = req.body.city || user.city;
+  user.receive_email = req.body.receiveEmails || req.body.receive_emails || user.receive_email;
+  user.citesegment = req.body.citesegment || user.citesegment;
+  user.citerole = req.body.citerole || user.citerole;
+
+  if((!isEmpty(req.body.password)) && (!isEmpty(req.body.newpassword))){
+    if (req.body.password != req.body.newpassword) {
+      if (user.checkPassword(user, req.body.password)) {
+          await user.update({password:req.body.newpassword});
+        } 
+      else {
+        res.statusCode = 500;
+        return res.json({
+          error: {
+            message: 'A senha atual está incorreta'
+          }
+        });
+      }
+    } else {
+      res.statusCode = 500;
+      return res.json({
+        error: {
+          message: 'A nova senha é a mesma da senha atual'
+        }
+      });
+    }
+  }
+
+  user.save().catch(err => {
+    if (err) {
+      log.error(err);
+      return next({ message: 'Erro ao atualizar usuário' });
+    }})
+  let u = user.toJSON();
+  u._id = u.id;
+  u.institutionName = u.institution_name;
+  u.receiveEmails = u.receive_email;
+  u.receive_emails = u.receive_email;
+  delete u.id;
+  delete u.institution_name;
+  delete u.receive_email;
+  delete u.hashed_password;
+  delete u.salt;
+  delete u.password;
+  res.json({ user: u });
+
+});
+
+
+userApp.get('/reset/password', async (req, res, next) => {
+  let emailAddress = req.query.email;
+  let user = await User.findOne({ where: { email: emailAddress } }).catch(function (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 });
+    // handle error;
+  });
+  if (!user) {
+    res.statusCode = 404;
+    res.json({ msg: "O usuário não está cadastrado" });
+  }
+  else {
+    let tokenValue = uuid.v4();
+    const rt = await ResetToken.create({
+      user_id: user.id,
+      token: tokenValue,
+      reset: false
+    });
+    if (!rt) {
+      res.statusCode = 404;
+      return res.json({ msg: "Couldn't create Reset Password Token" });
+    }
+    let url = config.default.lde.url + '/reset-password';
+    let text = `Olá, ${user.name}.\n\nRecebemos uma solicitação para redefinir sua senha do Laboratório de Dados Educacionais. Clique neste link para redefinir a sua senha: ${url}/${tokenValue}`;
+    let mailOptions = {
+      to: `"${user.name} <${user.email}>"`,
+      subject: "Redefinição de Senha - Laboratório de Dados Educacionais",
+      text
+    }
+    console.log(mailOptions);
+    email(mailOptions, (err, info) => {
+      if (err) {
+        log.error(err);
+        res.json({ msg: 'Undelivered Reset Password Mail' });
+      }
+      res.json({ msg: 'Reset Password Mail Successfully Delivered' });
+    });
+  }
+});
+
+module.exports = userApp;