Skip to content
Snippets Groups Projects
Commit e8651d45 authored by Fernando Erd's avatar Fernando Erd :ok_hand:
Browse files

Merge branch 'development' of gitlab.c3sl.ufpr.br:simcaq/simcaq-node into development

parents b25a1823 750239ad
No related branches found
No related tags found
1 merge request!116Release v1.0.0
Pipeline #
...@@ -32,6 +32,10 @@ var UserSchema = new Schema({ ...@@ -32,6 +32,10 @@ var UserSchema = new Schema({
unique: true, unique: true,
required: [true, 'O campo CPF é obrigatório.'] required: [true, 'O campo CPF é obrigatório.']
}, },
cep:{
type: String,
required: [true, 'O campo CEP é obrigatório.']
},
schooling: { schooling: {
type: String, type: String,
required: [true, 'O campo Formação é obrigatório.'] required: [true, 'O campo Formação é obrigatório.']
......
...@@ -21,209 +21,215 @@ const email = require(`${libs}/middlewares/email`); ...@@ -21,209 +21,215 @@ const email = require(`${libs}/middlewares/email`);
const passport = require('passport'); const passport = require('passport');
function emailSyntax(email) { function emailSyntax(email) {
const regex = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i; const regex = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
return regex.test(email); return regex.test(email);
} }
userApp.get('/schooling', (req, res, next) => { userApp.get('/schooling', (req, res, next) => {
req.result = [ req.result = [
'Não estudou', 'Não estudou',
'Ensino Fundamental Incompleto', 'Ensino Fundamental Incompleto',
'Ensino Fundamental Completo', 'Ensino Fundamental Completo',
'Ensino Médio', 'Ensino Médio',
'Graduação', 'Graduação',
'Mestrado', 'Mestrado',
'Doutorado' 'Doutorado'
]; ];
next(); next();
}, response('schooling')); }, response('schooling'));
userApp.get('/segment', (req, res, next) => { userApp.get('/segment', (req, res, next) => {
req.result = [ req.result = [
'Gestores e equipe gestora das secretarias e ministério da Educação', '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)', 'Gestores dos órgãos de planejamento e finanças (das três esferas de governo)',
'Agentes do poder legislativo', 'Agentes do poder legislativo',
'Agentes dos conselhos de educação', 'Agentes dos conselhos de educação',
'Profissionais da educação', 'Profissionais da educação',
'Sindicato', 'Sindicato',
'Sociedade civil interessada no financiamento da Educação Básica de qualidade', 'Sociedade civil interessada no financiamento da Educação Básica de qualidade',
'Comunidade acadêmica', 'Comunidade acadêmica',
'Imprensa', 'Imprensa',
'Outro [citar segmento]' 'Outro [citar segmento]'
]; ];
next(); next();
}, response('segment')); }, response('segment'));
userApp.get('/role', (req, res, next) => { userApp.get('/role', (req, res, next) => {
req.result = [ 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 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]"]}, {"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 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]"]}, {"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]"]}, {"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"]}, {"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]"]}, {"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]"]}, {"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]"]}, {"Imprensa" : ["Jornalista", "Outro [citar função]"]},
{"Outro [citar segmento]" : []} {"Outro [citar segmento]" : []}
] ]
next(); next();
}, response('role')); }, response('role'));
userApp.get('/', passport.authenticate('bearer', {session: false}), (req, res, next) => { userApp.get('/', passport.authenticate('bearer', {session: false}), (req, res, next) => {
User.find((err, users) => { User.find((err, users) => {
if(err) { if(err) {
log.error(err); log.error(err);
return next(err); return next(err);
} }
let result = []; let result = [];
users.forEach((user) => { users.forEach((user) => {
let u = user.toObject(); let u = user.toObject();
delete u.hashedPassword; delete u.hashedPassword;
delete u.salt; delete u.salt;
result.push(u); result.push(u);
});
req.result = result;
next();
}); });
req.result = result;
next();
});
}, response('users')); }, response('users'));
userApp.get('/me', passport.authenticate('bearer', { session: false }), (req, res, next) => { userApp.get('/me', passport.authenticate('bearer', { session: false }), (req, res, next) => {
let user = req.user.toObject(); let user = req.user.toObject();
delete user.hashedPassword; delete user.hashedPassword;
delete user.salt; delete user.salt;
req.result = user; req.result = user;
next(); next();
}, response('user')); }, response('user'));
userApp.get('/:id', (req, res, next) => { userApp.get('/:id', (req, res, next) => {
User.findById(req.params.id, (err, user) => { User.findById(req.params.id, (err, user) => {
if(err) { if(err) {
log.error(err); log.error(err);
return next(err); return next(err);
} }
if(!user) { if(!user) {
req.statusCode = 404; req.statusCode = 404;
next({msg: 'User not found'}); next({msg: 'User not found'});
} else { } else {
let u = user.toObject; let u = user.toObject;
delete u.hashedPassword; delete u.hashedPassword;
delete u.salt; delete u.salt;
req.result = u; req.result = u;
next(); next();
} }
}); });
}, response('user')); }, response('user'));
userApp.post('/', (req, res, next) => { userApp.post('/', (req, res, next) => {
let user = new User({ let user = new User({
email: req.body.email, email: req.body.email,
password: req.body.password, password: req.body.password,
name: req.body.name, name: req.body.name,
nickname: req.body.nickname, nickname: req.body.nickname,
cpf: req.body.cpf, cpf: req.body.cpf,
cep: req.body.cep, cep: req.body.cep,
complement: req.body.complement, complement: req.body.complement,
address: req.body.address, address: req.body.address,
phone: req.body.phone, phone: req.body.phone,
schooling: req.body.schooling, schooling: req.body.schooling,
course: req.body.course, course: req.body.course,
segment: req.body.segment, segment: req.body.segment,
role: req.body.role, role: req.body.role,
institutionName: req.body.institutionName, institutionName: req.body.institutionName,
state: req.body.state, state: req.body.state,
city: req.body.city, city: req.body.city,
receiveEmails: false || req.body.receiveEmails, receiveEmails: false || req.body.receiveEmails,
origin: req.body.origin origin: req.body.origin
}); });
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) => { user.save((err) => {
if(err) { if(err) {
log.error(err); log.error(err);
let errors = []; let errors = [];
for(let errName in err.errors) { for(let errName in err.errors) {
errors.push(err.errors[errName].message); errors.push(err.errors[errName].message);
}
log.error(errors);
res.statusCode = 400;
return res.json({err, errors});
} }
log.error(errors);
res.statusCode = 400;
return res.json({err, errors});
}
// Create verification token // Create verification token
let verificationToken = new VerificationToken({ let verificationToken = new VerificationToken({
userId: user._id userId: user._id
}); });
verificationToken.createVerificationToken((err, token) => { verificationToken.createVerificationToken((err, token) => {
if(err) { if(err) {
log.error(err); log.error(err);
return next(err); return next(err);
} }
let url = config.default.lde.url + '/verify'; 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}`; 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 // Send confirmation email
let mailOptions = { let mailOptions = {
to: `"${user.name} <${user.email}>"`, to: `"${user.name} <${user.email}>"`,
subject: "Confirme seu cadastro - Laboratório de Dados Educacionais", subject: "Confirme seu cadastro - Laboratório de Dados Educacionais",
text text
} }
email(mailOptions, (err, info) => { email(mailOptions, (err, info) => {
if(err) { if(err) {
log.error(err); log.error(err);
res.json({msg: 'User created'}); res.json({msg: 'User created'});
} }
log.info(`Message ${info.messageId} sent: ${info.response}`); log.info(`Message ${info.messageId} sent: ${info.response}`);
log.info(`Usuário ${user.email} foi criado`); log.info(`Usuário ${user.email} foi criado`);
res.json({msg: 'User created'}); res.json({msg: 'User created'});
});
}); });
});
}); });
}
}); });
userApp.get('/reset/password', (req, res, next) => { userApp.get('/reset/password', (req, res, next) => {
let emailAddress = req.query.email; let emailAddress = req.query.email;
User.findOne({email: emailAddress}, (err, user)=> { User.findOne({email: emailAddress}, (err, user)=> {
if(err) { if(err) {
log.error(err); log.error(err);
let errors = []; let errors = [];
for(let errName in err.errors) { for(let errName in err.errors) {
errors.push(err.errors[errName].message); errors.push(err.errors[errName].message);
} }
res.statusCode = 400; res.statusCode = 400;
return res.json({err, errors}); return res.json({err, errors});
}
if (!user) {
res.statusCode = 404;
res.json({msg: "O usuário não está cadastrado"});
}
else {
let resetToken = new ResetToken({
userId: user._id
});
resetToken.createResetToken((err, token) => {
if (err) {
log.error(err);
return next(err);
} }
if (!user) { let url = config.default.lde.url + '/reset-password';
res.statusCode = 404; 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}/${token}`;
res.json({msg: "O usuário não está cadastrado"}); let mailOptions = {
to: `"${user.name} <${user.email}>"`,
subject: "Redefinição de Senha - Laboratório de Dados Educacionais",
text
} }
else { email(mailOptions, (err, info) => {
let resetToken = new ResetToken({ if(err) {
userId: user._id log.error(err);
}); res.json({msg: 'Undelivered Reset Password Mail'});
resetToken.createResetToken((err, token) => { }
if (err) { log.debug(`Message ${info.messageId} sent: ${info.response}`);
log.error(err); res.json({msg: 'Reset Password Mail Successfully Delivered'});
return next(err); });
} })
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}/${token}`; })
let mailOptions = {
to: `"${user.name} <${user.email}>"`,
subject: "Redefinição de Senha - Laboratório de Dados Educacionais",
text
}
email(mailOptions, (err, info) => {
if(err) {
log.error(err);
res.json({msg: 'Undelivered Reset Password Mail'});
}
log.debug(`Message ${info.messageId} sent: ${info.response}`);
res.json({msg: 'Reset Password Mail Successfully Delivered'});
});
})
}
})
}) })
module.exports = userApp; module.exports = userApp;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment