Site/server/controllers/usuariosController.js

267 lines
11 KiB
JavaScript

const express = require('express');
const router = express.Router();
var routes = function () {
router.get('/ativarUsuario/:idusuarios', function (req, res) {
const idusuarios = parseInt(req.params.idusuarios);
if (!idusuarios || isNaN(idusuarios)) {
return res.status(400).send(RenderPaginaAtivacao({
sucesso: false,
titulo: 'Link inválido',
mensagem: 'O link de ativação utilizado é inválido ou está incompleto.',
textoBotao: 'Voltar ao site'
}));
}
const sqlQuery = `
UPDATE usuarios
SET habilitado = 1
WHERE idusuarios = ?;
`;
mysqlConnection.query(sqlQuery, [idusuarios], function (error, results) {
console.log(`${new Date().toUTCString()} - ${req.originalUrl} ${(error) ? '500 error' : '200 success'}`);
if (error) {
return res.status(500).send(RenderPaginaAtivacao({
sucesso: false,
titulo: 'Erro ao ativar conta',
mensagem: 'Não foi possível ativar sua conta no momento. Tente novamente mais tarde ou entre em contato com o suporte.',
textoBotao: 'Voltar ao site'
}));
}
if (!results || results.affectedRows === 0) {
return res.status(404).send(RenderPaginaAtivacao({
sucesso: false,
titulo: 'Conta não encontrada',
mensagem: 'Não encontramos uma conta associada a este link de ativação.',
textoBotao: 'Voltar ao site'
}));
}
return res.status(200).send(RenderPaginaAtivacao({
sucesso: true,
titulo: 'Conta ativada com sucesso!',
mensagem: 'Sua conta foi ativada e você já pode acessar a plataforma Zendion, INC.',
textoBotao: 'Entrar agora'
}));
});
});
function RenderPaginaAtivacao({ sucesso, titulo, mensagem, textoBotao }) {
const corPrincipal = sucesso ? '#071b63' : '#991b1b';
const corFundoIcone = sucesso ? '#dcfce7' : '#fee2e2';
const corIcone = sucesso ? '#15803d' : '#b91c1c';
const icone = sucesso ? '✓' : '!';
const linkBotao = sucesso ? 'https://zendioninc.com.br/login' : 'https://zendioninc.com.br/home';
return `
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>${titulo}</title>
</head>
<body style="margin:0; padding:0; background:#f4f6fb; font-family:Arial, Helvetica, sans-serif; color:#1f2937;">
<div style="min-height:100vh; display:flex; align-items:center; justify-content:center; padding:32px 16px; box-sizing:border-box; background:linear-gradient(135deg, #f4f6fb 0%, #eef3ff 45%, #ffffff 100%);">
<div style="width:100%; max-width:560px; background:#ffffff; border-radius:22px; overflow:hidden; box-shadow:0 24px 70px rgba(15, 23, 42, 0.16); border:1px solid rgba(148, 163, 184, 0.22);">
<div style="background:#071b63; padding:28px 32px; text-align:center;">
<img src="https://zendioninc.com.br/assets/logo_escrito.png" alt="Zendion, INC." style="height:54px; max-width:240px; object-fit:contain; filter:brightness(0) invert(1);">
</div>
<div style="padding:42px 34px; text-align:center;">
<div style="width:72px; height:72px; margin:0 auto 22px auto; border-radius:999px; display:flex; align-items:center; justify-content:center; background:${corFundoIcone}; color:${corIcone}; font-size:38px; font-weight:900;">
${icone}
</div>
<h1 style="margin:0 0 14px 0; color:#0f172a; font-size:28px; line-height:36px; font-weight:800;">
${titulo}
</h1>
<p style="margin:0 0 28px 0; color:#64748b; font-size:16px; line-height:26px;">
${mensagem}
</p>
<a href="${linkBotao}" style="display:inline-block; background:${corPrincipal}; color:#ffffff; text-decoration:none; font-size:15px; font-weight:800; padding:14px 28px; border-radius:12px; box-shadow:0 12px 24px rgba(7, 27, 99, 0.22);">
${textoBotao}
</a>
</div>
<div style="background:#f8fafc; padding:18px 28px; text-align:center; border-top:1px solid #e5e7eb;">
<p style="margin:0; color:#94a3b8; font-size:12px; line-height:20px;">
Zendion, INC. • Este é um processo automático de ativação de conta.
</p>
</div>
</div>
</div>
</body>
</html>
`;
}
router.get('/getUsuarios', function (req, res) {
const sqlQuery = `SELECT * FROM usuarios;`;
ExecuteQuery(sqlQuery, req, res);
});
router.get('/getUsuarioByID/:idusuarios', function (req, res) {
const idusuarios = parseInt(req.params.idusuarios);
const sqlQuery = `SELECT * FROM usuarios WHERE idusuarios = ${idusuarios};`;
ExecuteQuery(sqlQuery, req, res);
});
router.get('/getSistemasDoUsuario/:idusuarios', function (req, res) {
const idusuarios = parseInt(req.params.idusuarios);
const sqlQuery = `SELECT
s.idsistemas,
s.nome,
su.data_download,
su.idusuarios,
s.descricao,
(SELECT COUNT(1) FROM chaves cv WHERE cv.idsistemas = s.idsistemas AND cv.idusuarios = su.idusuarios AND cv.data_validade > CURRENT_DATE) AS chavesValidas,
CASE WHEN s.idtiposlicenca = 6 THEN 1 ELSE 0 END AS gratis
FROM sistemasusuario su
INNER JOIN sistemas s ON s.idsistemas = su.idsistemas
WHERE su.idusuarios = ${idusuarios};`;
ExecuteQuery(sqlQuery, req, res);
});
router.post('/authUser', function (req, res) {
let usuario = req.body.usuario;
let senha = req.body.senha;
const sqlQuery = `SELECT
idusuarios,
nome,
idtiposdeusuario,
habilitado
FROM usuarios
WHERE usuario = '${usuario}' AND senha = '${senha}';`;
ExecuteQuery(sqlQuery, req, res);
});
router.get('/getTiposdeusuario', function (req, res) {
const sqlQuery = `SELECT * FROM tiposdeusuario;`;
ExecuteQuery(sqlQuery, req, res);
});
router.post('/insertUsuarios', function (req, res) {
let idusuarios = req.body.idusuarios;
let nome = req.body.nome;
let usuario = req.body.usuario;
let senha = req.body.senha;
let email = req.body.email;
let idtiposdeusuario = req.body.idtiposdeusuario;
let cpf = req.body.cpf;
let habilitado = req.body.habilitado ? 1 : 0;
const sqlQuery = `INSERT INTO usuarios (nome, usuario, senha, data_cadastro, cpf, habilitado, email, idtiposdeusuario)
VALUES ('${nome}', UPPER('${usuario}'), UPPER('${senha}'), now(), '${cpf}', ${habilitado}, '${email}', ${idtiposdeusuario});`;
ExecuteQuery(sqlQuery, req, res);
});
router.patch('/updateUsuarios', function (req, res) {
let idusuarios = req.body.idusuarios;
let nome = req.body.nome;
let usuario = req.body.usuario;
let senha = req.body.senha;
let email = req.body.email;
let idtiposdeusuario = req.body.idtiposdeusuario;
let cpf = req.body.cpf;
let habilitado = req.body.habilitado ? 1 : 0;
const sqlQuery = `UPDATE usuarios SET
nome = '${nome}',
usuario = UPPER('${usuario}'),
senha = UPPER('${senha}'),
cpf = '${cpf}',
habilitado = ${habilitado},
email = '${email}',
idtiposdeusuario = ${idtiposdeusuario}
WHERE idusuarios = ${idusuarios};`;
ExecuteQuery(sqlQuery, req, res);
});
router.delete('/deleteUsuarios/:idusuarios', function (req, res) {
let idusuarios = parseInt(req.params.idusuarios);
const sqlQuery = `DELETE FROM usuarios WHERE idusuarios = ${idusuarios};`;
ExecuteQuery(sqlQuery, req, res);
});
router.post('/setUsada', function (req, res) {
let chave = req.body.Chave;
const sqlQuery = `UPDATE chaves SET usada = 1 WHERE licenca = '${chave}';`;
ExecuteQuery(sqlQuery, req, res);
});
router.post('/validaLicenca', function (req, res) {
let usuario = req.body.Usuario;
let senha = req.body.Senha;
let chave = req.body.Chave;
const sqlQuery = `SELECT
u.nome AS Nome,
u.cpf AS CPF,
c.usada AS Usada,
c.idsistemas AS IDSistema
FROM chaves c
INNER JOIN usuarios u ON c.idusuarios = u.idusuarios
WHERE c.licenca = '${chave}' AND u.usuario = '${usuario}' AND u.senha = '${senha}' AND u.habilitado = 1 AND c.usada = 0;`;
ExecuteQuery(sqlQuery, req, res);
});
router.post('/insertTrocasenha', function (req, res) {
let idusuarios = parseInt(req.body.idusuarios);
let tag = req.body.tag;
const sqlQuery = `INSERT INTO trocasenha (idusuarios, tag, usada) VALUES (${idusuarios}, '${tag}', 0);`;
ExecuteQuery(sqlQuery, req, res);
});
router.get('/getTrocasenha', function (req, res, next) {
const sqlQuery = `SELECT * FROM trocasenha WHERE usada = 0;`;
ExecuteQuery(sqlQuery, req, res);
});
router.get('/getTrocasenhaByTag/:tag', function (req, res, next) {
let tag = req.params.tag;
const sqlQuery = `SELECT * FROM trocasenha WHERE tag = '${tag}' AND usada = 0;`;
ExecuteQuery(sqlQuery, req, res);
});
router.post('/setExpirado', function (req, res, next) {
let tag = req.body.tag;
const sqlQuery = `UPDATE trocasenha SET usada = 1 WHERE tag = '${tag}';`;
ExecuteQuery(sqlQuery, req, res);
});
router.patch('/trocaSenha', function (req, res, next) {
const idusuarios = parseInt(req.body.idusuarios);
const senha = req.body.senha;
const sqlQuery = `UPDATE usuarios SET
senha = UPPER('${senha}')
WHERE idusuarios = ${idusuarios};`;
ExecuteQuery(sqlQuery, req, res);
});
router.post('/validaLicencaByChave/:idsistemas', function (req, res, next) {
const idsistemas = parseInt(req.params.idsistemas);
const chave = req.body.Chave;
const sqlQuery = `SELECT
u.nome AS Nome,
u.cpf AS CPF,
c.usada AS Usada,
c.idsistemas AS IDSistema
FROM chaves c
INNER JOIN usuarios u ON c.idusuarios = u.idusuarios
WHERE c.licenca = '${chave}' AND c.idsistemas = ${idsistemas} AND u.habilitado = 1 AND c.usada = 0;`;
ExecuteQuery(sqlQuery, req, res);
});
return router;
}
module.exports = routes;