406 lines
15 KiB
JavaScript
406 lines
15 KiB
JavaScript
require('../connector');
|
|
const express = require('express');
|
|
const router = express.Router();
|
|
const nodemailer = require('nodemailer');
|
|
const formidable = require('formidable');
|
|
const shell = require('shelljs');
|
|
var admin = require("firebase-admin");
|
|
var serviceAccount = require("./../gca-control-bcb9b-firebase-adminsdk-pf0od-2e672cfd0a.json");
|
|
|
|
|
|
var routes = function () {
|
|
|
|
//#region EMAIL
|
|
const Email = 'gcacontrol@gmail.com';
|
|
const Senha = 'gcaCtrl123';
|
|
var transporter = nodemailer.createTransport({
|
|
service: 'gmail',
|
|
//host: "email-ssl.com.br",
|
|
//port: 465,
|
|
//secure: true,
|
|
auth: {
|
|
user: Email,
|
|
pass: Senha,
|
|
//user: 'iyrconline@myrobot.com.br',
|
|
//pass: 'iyrcMyrobot@2255',
|
|
//user: 'myrobotschool@gmail.com',
|
|
//pass: 'myrobot2020**==',
|
|
}
|
|
});
|
|
|
|
function EnviarEmail(Dados, idemail) {
|
|
ConexaoMySQL_GCA.query(`SELECT
|
|
em.*
|
|
FROM emails em
|
|
where em.idemails = ${idemail};`, function (error, results, fields) {
|
|
if (!error && results.length > 0) {
|
|
let Mensagem = results[0]['texto'];
|
|
for (let i = 0; i < 10; i++) {
|
|
if (Dados['descricao'])
|
|
Mensagem = Mensagem.replace('>DISPOSITIVO<', Dados['descricao']);
|
|
if (Dados['nome'])
|
|
Mensagem = Mensagem.replace('>CLIENTE<', Dados['nome']);
|
|
if (Dados['Segredo'])
|
|
Mensagem = Mensagem.replace('>SEGREDO<', Dados['Segredo']);
|
|
}
|
|
var mailOptions = {
|
|
from: "GCA Control <gcacontrol@gmail.com>",
|
|
to: Dados['email'],
|
|
subject: results[0]['assunto'],
|
|
html: Mensagem
|
|
};
|
|
transporter.sendMail(mailOptions, function (error, info) {
|
|
if (error) {
|
|
console.log(error);
|
|
}
|
|
else {
|
|
console.log('Email enviado para: ' + mailOptions.to + ' - ' + info.response);
|
|
ConexaoMySQL_GCA.query(`insert into emailsenviados (iddispositivos, idemails) values (${Dados['iddispositivos']}, ${idemail});`, function (error2, results2, fields2) {
|
|
});
|
|
}
|
|
/*
|
|
// envia sms
|
|
const Hash = "0cc6fcb95a28d506def8259e1e8dd90e";
|
|
const https = require('https');
|
|
https.get(`https://smsmobile.com.br/sms/shortcode/routes/sms.php?hash=${Hash}&mensagem=${encodeURI(Mensagem)}&numero=${Telefone}`, (resp) => {
|
|
let data = '';
|
|
resp.on('data', (chunk) => {
|
|
data += chunk;
|
|
});
|
|
resp.on('end', () => {
|
|
console.log("SMS enviado com sucesso para " + Dispositivo['telefone']);
|
|
});
|
|
}).on("error", (err) => {
|
|
console.log("Erro ao enviar SMS: " + err.message);
|
|
});
|
|
*/
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
router.get('/sendEmail/:iddispositivos/:idemail', (req, res) => {
|
|
const iddispositivos = parseInt(req.params.iddispositivos);
|
|
const idemail = parseInt(req.params.idemail);
|
|
ConexaoMySQL_GCA.query(`SELECT di.iddispositivos, di.descricao, di.alarme, cl.email, cl.telefone, cl.token FROM dispositivos di inner join clientes cl on cl.idclientes = di.idclientes WHERE di.iddispositivos = ${iddispositivos};`, function (error2, results2, fields2) {
|
|
EnviarEmail(results2[0], idemail);
|
|
console.log(req.originalUrl + "/ success 200");
|
|
res.send(true);
|
|
});
|
|
});
|
|
|
|
//#endregion
|
|
|
|
//#region DISPOSITIVOS
|
|
|
|
router.get('/getDispositivos', (req, res) => {
|
|
ConexaoMySQL_GCA.query(`select
|
|
di.iddispositivos,
|
|
di.qrcode,
|
|
di.idkits,
|
|
ki.descricao as 'Kit',
|
|
di.insert_date
|
|
from dispositivos di
|
|
left join clientes cl on cl.idclientes = di.idclientes
|
|
inner join kits ki on ki.idkits = di.idkits
|
|
where cl.idclientes is null;`, function (error, results, fields) {
|
|
if (error) throw error;
|
|
if (results) {
|
|
console.log(req.originalUrl + "/ success 200");
|
|
res.send(results);
|
|
}
|
|
else {
|
|
console.log(req.originalUrl + "/ success 500");
|
|
res.send([]);
|
|
}
|
|
});
|
|
});
|
|
|
|
router.get('/getDispositivosCliente/:segredo', (req, res) => {
|
|
const segredo = req.params.segredo;
|
|
ConexaoMySQL_GCA.query(`select
|
|
di.iddispositivos,
|
|
di.qrcode,
|
|
di.descricao,
|
|
di.idclientes,
|
|
cl.nome as 'Cliente',
|
|
di.idkits,
|
|
ki.descricao as 'Kit',
|
|
di.alarme,
|
|
di.statusalarme,
|
|
di.portao,
|
|
di.lampada,
|
|
di.statuslampada,
|
|
di.update_date
|
|
from dispositivos di
|
|
inner join clientes cl on cl.idclientes = di.idclientes
|
|
inner join kits ki on ki.idkits = di.idkits
|
|
where cl.segredo = '${segredo}';`, function (error, results, fields) {
|
|
if (error) throw error;
|
|
if (results) {
|
|
console.log(req.originalUrl + "/ success 200");
|
|
res.send(results);
|
|
}
|
|
else {
|
|
console.log(req.originalUrl + "/ success 500");
|
|
res.send([]);
|
|
}
|
|
});
|
|
});
|
|
|
|
router.get('/getStatus/:segredo/:iddispositivos', (req, res) => {
|
|
const segredo = req.params.segredo;
|
|
const iddispositivos = parseInt(req.params.iddispositivos);
|
|
ConexaoMySQL_GCA.query(`select
|
|
di.alarme,
|
|
di.statusalarme,
|
|
di.portao,
|
|
di.lampada,
|
|
di.statuslampada
|
|
FROM dispositivos di
|
|
inner join clientes cl on cl.idclientes = di.idclientes
|
|
where cl.segredo = '${segredo}' and di.iddispositivos = ${iddispositivos};`, function (error, results, fields) {
|
|
if (error) throw error;
|
|
if (results[0]) {
|
|
console.log(req.originalUrl + "/ success 200");
|
|
res.send(results[0]);
|
|
}
|
|
else {
|
|
console.log(req.originalUrl + "/ success 500");
|
|
res.send(false);
|
|
}
|
|
});
|
|
});
|
|
|
|
router.get('/setStatus/:segredo/:iddispositivos/:Atuador/:Estado', (req, res) => {
|
|
const segredo = req.params.segredo;
|
|
const iddispositivos = parseInt(req.params.iddispositivos);
|
|
const Atuador = parseInt(req.params.Atuador);
|
|
const Estado = parseInt(req.params.Estado);
|
|
ConexaoMySQL_GCA.query(`UPDATE dispositivos D
|
|
inner join clientes C on C.idclientes = D.idclientes
|
|
SET ${
|
|
(Atuador == 0) ? 'alarme' :
|
|
(Atuador == 1) ? 'statusalarme' :
|
|
(Atuador == 2) ? 'portao' :
|
|
(Atuador == 3) ? 'lampada' :
|
|
(Atuador == 4) ? 'statuslampada' :
|
|
''} = ${Estado}
|
|
WHERE D.iddispositivos = ${iddispositivos} and C.segredo = '${segredo}';`, function (error, results, fields) {
|
|
if (error) throw error;
|
|
console.log(req.originalUrl + "/ success 200");
|
|
let Resposta = shell.exec(`sudo mosquitto_pub -h gcacontrol.mooo.com -p 1883 -t "${segredo}" -m "${Atuador}:${Estado}" -u "tht" -P "123"`);
|
|
if (Atuador == 1 && Estado == 1) {
|
|
ConexaoMySQL_GCA.query(`select di.iddispositivos, di.descricao, di.alarme, cl.email, cl.telefone, cl.token from dispositivos di inner join clientes cl on cl.idclientes = di.idclientes where di.iddispositivos = ${iddispositivos};`, function (error2, results2, fields2) {
|
|
if (results2[0]['alarme'] == 1) {
|
|
EnviarEmail(results2[0], 1);
|
|
|
|
const DadosMensagem = {
|
|
title: "Alarme Acionado!",
|
|
message: "Seu alarme no dispositivo " + results2[0]['descricao'] + " foi acionado!"
|
|
};
|
|
EnviarNotificacao(DadosMensagem, results2[0]['token']);
|
|
}
|
|
res.send(true);
|
|
});
|
|
}
|
|
else {
|
|
res.send(true);
|
|
}
|
|
});
|
|
});
|
|
|
|
router.post('/vincularDispositivo', (req, res) => {
|
|
const descricao = req.body.descricao;
|
|
const segredo = req.body.segredo;
|
|
const iddispositivos = parseInt(req.body.iddispositivos);
|
|
ConexaoMySQL_GCA.query(`UPDATE dispositivos set
|
|
descricao = '${descricao}',
|
|
idclientes = (select idclientes from clientes where segredo = '${segredo}')
|
|
where iddispositivos = ${iddispositivos};`, function (error, results, fields) {
|
|
if (!error) {
|
|
console.log(req.originalUrl + "/ success 200");
|
|
res.send(true);
|
|
}
|
|
else {
|
|
console.log(error);
|
|
console.log(req.originalUrl + "/ error 500");
|
|
res.send(false);
|
|
}
|
|
});
|
|
});
|
|
|
|
//#endregion
|
|
|
|
//#region CLIENTES
|
|
|
|
router.post('/insertCliente', (req, res) => {
|
|
const nome = req.body.nome;
|
|
const cidade = req.body.cidade;
|
|
const telefone = req.body.telefone;
|
|
const email = req.body.email;
|
|
const cpf = req.body.cpf;
|
|
ConexaoMySQL_GCA.query(`select * from clientes where cpf = '${cpf}' or email = '${email}';`, function (errorS, resultsS, fieldsS) {
|
|
if (resultsS.length == 0) {
|
|
GeraSegredo(function(segredo) {
|
|
ConexaoMySQL_GCA.query(`insert into clientes (nome, cidade, telefone, email, segredo, cpf)
|
|
values ('${nome}', '${cidade}', '${telefone}', '${email}', '${segredo}', '${cpf}');`, function (error, results, fields) {
|
|
if (error) throw error;
|
|
if (!error) {
|
|
console.log(req.originalUrl + "/ success 200");
|
|
let Cliente = {
|
|
nome: nome,
|
|
email: email,
|
|
telefone: telefone,
|
|
Segredo: segredo
|
|
}
|
|
EnviarEmail(Cliente, 2);
|
|
res.redirect(`http://${req.headers.host.split(':')[0]}/cadastro.html?segredo=${segredo}`);
|
|
}
|
|
else {
|
|
console.log(req.originalUrl + "/ error 500");
|
|
res.redirect(`http://${req.headers.host.split(':')[0]}/cadastro.html?erro=0`);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
else {
|
|
res.redirect(`http://${req.headers.host.split(':')[0]}/cadastro.html?erro=1`);
|
|
}
|
|
});
|
|
});
|
|
|
|
function GeraSegredo(callback) {
|
|
const caracteresPermitidos = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!@$?_-";
|
|
let secret = "";
|
|
ConexaoMySQL_GCA.query(`select segredo from clientes;`, function (error, results, fields) {
|
|
for (let i = 0; i < 15; i++) {
|
|
secret += caracteresPermitidos[Math.floor(Math.random() * (caracteresPermitidos.length))];
|
|
}
|
|
let Aprovado = true;
|
|
for (let i = 0; i < results.length; i++) {
|
|
if (results[i]['segredo'] == secret)
|
|
Aprovado = false;
|
|
}
|
|
if (Aprovado)
|
|
callback(secret);
|
|
else
|
|
GeraSegredo(callback);
|
|
});
|
|
}
|
|
|
|
router.get('/setClienteToken/:segredo/:token', (req, res) => {
|
|
const segredo = req.params.segredo;
|
|
const token = req.params.token;
|
|
ConexaoMySQL_GCA.query(`UPDATE clientes SET
|
|
token = '${token}'
|
|
where segredo = '${segredo}';`, function (error, results, fields) {
|
|
if (error) throw error;
|
|
if (results) {
|
|
console.log(req.originalUrl + "/ success 200");
|
|
res.send(true);
|
|
}
|
|
else {
|
|
console.log(req.originalUrl + "/ success 500");
|
|
res.send(false);
|
|
}
|
|
});
|
|
});
|
|
|
|
router.post('/salvarConfigCliente', (req, res) => {
|
|
const Segredo = req.body.Segredo;
|
|
const NomeRede = req.body.NomeRede;
|
|
const SenhaRede = req.body.SenhaRede;
|
|
const Dispositivo = parseInt(req.body.Dispositivo);
|
|
ConexaoMySQL_GCA.query(`UPDATE clientes set
|
|
nomeRede = '${NomeRede}',
|
|
senhaRede = '${SenhaRede}',
|
|
indexDispositivo = ${Dispositivo}
|
|
where segredo = '${Segredo}';`, function (error, results, fields) {
|
|
if (!error) {
|
|
console.log(req.originalUrl + "/ success 200");
|
|
res.send(true);
|
|
}
|
|
else {
|
|
console.log(error);
|
|
console.log(req.originalUrl + "/ error 500");
|
|
res.send(false);
|
|
}
|
|
});
|
|
});
|
|
|
|
//#endregion
|
|
|
|
//#region CONFIGURACOES
|
|
|
|
router.get('/getConfig', (req, res) => {
|
|
ConexaoMySQL_GCA.query(`select * from configuracoes;`, function (error, results, fields) {
|
|
if (error) throw error;
|
|
if (results) {
|
|
console.log(req.originalUrl + "/ success 200");
|
|
res.send(results[0]);
|
|
}
|
|
else {
|
|
console.log(req.originalUrl + "/ success 500");
|
|
res.send([]);
|
|
}
|
|
});
|
|
});
|
|
|
|
//#endregion
|
|
|
|
//#region PUSH NOTIFICATION FIREBASE
|
|
|
|
admin.initializeApp({
|
|
credential: admin.credential.cert(serviceAccount),
|
|
projectId: "gca-control-bcb9b"
|
|
});
|
|
|
|
function EnviarNotificacao(DadosMensagem, registrationToken) {
|
|
// This registration token comes from the client FCM SDKs.
|
|
|
|
const message = {
|
|
data: DadosMensagem,
|
|
token: registrationToken
|
|
};
|
|
|
|
// Send a message to the device corresponding to the provided
|
|
// registration token.
|
|
admin.messaging().send(message).then((response) => {
|
|
// Response is a message ID string.
|
|
console.log('Successfully sent message:', response);
|
|
}).catch((error) => {
|
|
console.log('Error sending message:', error);
|
|
});
|
|
}
|
|
|
|
router.post('/sendPushNotification', (req, res) => {
|
|
const titulo = req.body.titulo;
|
|
const mensagem = req.body.mensagem;
|
|
const segredo = req.body.segredo;
|
|
ConexaoMySQL_GCA.query(`SELECT token FROM clientes WHERE segredo = '${segredo}';`, function (error, results, fields) {
|
|
if (!error) {
|
|
|
|
const DadosMensagem = {
|
|
title: titulo,
|
|
message: mensagem
|
|
};
|
|
EnviarNotificacao(DadosMensagem, results[0]['token']);
|
|
|
|
console.log(req.originalUrl + "/ success 200");
|
|
res.send(true);
|
|
}
|
|
else {
|
|
console.log(error);
|
|
console.log(req.originalUrl + "/ error 500");
|
|
res.send(false);
|
|
}
|
|
});
|
|
});
|
|
|
|
//#endregion
|
|
|
|
return router;
|
|
}
|
|
|
|
module.exports = routes; |