267 lines
11 KiB
JavaScript
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; |