Created
August 30, 2024 12:03
-
-
Save carlosdelfino/eb43d6f27ac9b31cb37b7fec047d13af to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import express from "express"; | |
import session from "express-session"; | |
import { Request, Response, NextFunction } from "express"; | |
import { AppController } from "./appController"; | |
import { AppConfig, AppRequest } from "./types"; | |
// @ts-ignore | |
import createLogger from "../../library/logger"; | |
import path from "path"; | |
import bodyParser from 'body-parser'; | |
import AuthRouters from "./routes/auth"; | |
import { createServer } from "http"; | |
import { Server } from "socket.io"; | |
const config: AppConfig = { | |
port: 3000, | |
maxSessions: 50, | |
assets: { | |
images: { | |
connecting: "/assets/images/waiting.png", // Imagem exibida durante a espera do processo de conexão da api | |
connected: "/assets/images/connected.png", // Imagem exibida quando a conexão da api é bem-sucedida | |
disconnected: "/assets/images/disconnected.png", // Imagem exibida quando o usuário está deslogado e api desconectada | |
waiting: "/assets/images/waiting.png", // Imagem exibida enquanto aguarda algum processo | |
networkError: "/assets/images/networkerror.png", // Imagem exibida quando ouver erro na rede | |
loggedIn: "/assets/images/loggedin.png", // Imagem exibida quando o usuário estiver logado | |
}, | |
path: path.join(__dirname, "views/assets"), // Configuração do caminho dos estáticos | |
}, | |
logFolderPath: path.join(path.sep, 'var', 'log', 'rapport-api'), | |
debug: true, | |
authState: { | |
//type: 'mysql', | |
type: "file", | |
session: "session", | |
folderName: path.join(__dirname, '..', '..', 'data', 'bayleis_auth_info'), | |
dataService: { | |
host: "localhost", | |
user: "rapport_site_bot_v0_3", | |
password: "3244234cvsfde", | |
database: "rapport_site_v0_3", | |
}, | |
}, | |
mailer: { | |
host: 'mail.ibova.com.br', | |
port: 25, | |
secure: false, // true para 465, false para outras portas | |
auth: { | |
user: '[email protected]', // Usuário do servidor SMTP | |
pass: '(4564562dgdc)' // Senha do servidor SMTP | |
}, | |
tls: { | |
rejectUnauthorized: false // Isso garante que mesmo certificados não confiáveis ainda funcionarão | |
} | |
}, | |
}; | |
const logger = createLogger(config); | |
logger.info("Aplicação Iniciando!"); | |
const app = express(); | |
// Configuração para parsear JSON | |
app.use(express.json()); | |
app.use(bodyParser.json()); | |
// Configuração da engine de template para usar arquivos .html | |
app.engine('html', require('ejs').renderFile); | |
app.set('view engine', 'html'); | |
app.set('views', path.join(__dirname, 'views', 'templates')); | |
const sessionMiddleware = session({ | |
secret: 'your-secret-key', // Troque por uma chave segura | |
resave: false, | |
saveUninitialized: false, | |
cookie: { | |
secure: false, // true se estiver usando HTTPS | |
maxAge: 1000 * 60 * 60 * 24, // Tempo de expiração da sessão (1 dia) | |
httpOnly: true | |
} | |
}); | |
// Usar o middleware de sessão para todas as rotas, exceto para o WebSocket | |
app.use(sessionMiddleware); | |
//código original da tela de aparelhos @@@ | |
// Configura o diretório de arquivos estáticos | |
app.use("/assets", express.static(config.assets.path as string)); | |
// Rota para servir o modal.html | |
app.get("/modal-status", (req, res) => { | |
const modalId = req.query.modalId; | |
const message = req.query.message; | |
const sessionId = req.query.sessionID; | |
res.render("modal", { | |
modalId: modalId, | |
message: message, | |
sessionName: sessionId, | |
}); | |
}); | |
// Rota para renderizar o index.html | |
const authRoutes = (new AuthRouters(config)).getRouter(); | |
app.use('/', authRoutes); | |
// Rota principal | |
// Rota para renderizar o index.html | |
app.get('/', (req, res) => { | |
res.render('index', { | |
// Passar variáveis para o template se necessário | |
}); | |
}); | |
const server = createServer(app); | |
const wss = new Server(server, { | |
transports: ['websocket'], | |
path: '/ws/admin', | |
cors: { | |
origin: "*", | |
methods: ["GET", "POST"] | |
} | |
}); | |
// Função para converter middleware Express para Socket.IO | |
const wrap = (middleware: any) => (socket: any, next: (err?: Error) => void) => | |
middleware(socket.request, {}, next); | |
// Integração do middleware de sessão com o Socket.IO | |
wss.use(wrap(sessionMiddleware)); | |
// WebSocket connection handler | |
wss.on('connection', () => { | |
console.log('New WebSocket connection'); | |
// Periodically send updates to the connected client | |
const sendUpdates = async () => { | |
// const connections = await appController.getConnections(); | |
// const stats = await connectionManager.getConnectionStatistics(); | |
const data = { | |
// type: 'connectionInfo', | |
user: { | |
name: 'Nome do Usuário', // Simulação: deve ser recuperado dinamicamente | |
nickname: 'Apelido' // Simulação: deve ser recuperado dinamicamente | |
}, | |
connections: { | |
// active: connections.filter(conn => conn.status === 'active').length, | |
// waiting: connections.filter(conn => conn.status === 'waiting').length | |
}, | |
// stats: stats | |
}; | |
wss.send(JSON.stringify(data)); | |
}; | |
let wssInterval = setInterval(sendUpdates, 5000); // Envia atualizações a cada 5 segundos | |
wss.on('message', (message: any) => { | |
console.log('Received:', message); | |
// Handle incoming messages if necessary | |
}); | |
wss.on('close', () => { | |
clearInterval(wssInterval); // Limpa o intervalo quando a conexão for fechada | |
console.log('WebSocket connection closed'); | |
}); | |
}); | |
server.listen(config.port, () => { | |
logger.info(`Servidor rodando em http://localhost:${config.port}`); | |
}); | |
logger.info("Aplicação Iniciada!"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$(document).ready(function() { | |
// Função para limpar os formulários | |
function clearForms() { | |
$('#form-register')[0].reset(); | |
$('#form-login')[0].reset(); | |
$('#nickname-check').hide(); // Esconde a mensagem de verificação de apelido | |
$('#register-button-form').prop('disabled', false); // Reativa o botão de envio do cadastro | |
} | |
// Mostra o formulário de cadastro | |
$('#register-button').click(function () { | |
clearForms(); // Limpa o formulário antes de exibir | |
$('#main-menu').hide(); | |
$('#register-form').show(); | |
}); | |
// Mostra o formulário de login | |
$('#login-button').click(function () { | |
clearForms(); // Limpa o formulário antes de exibir | |
$('#main-menu').hide(); | |
$('#login-form').show(); | |
}); | |
// Voltar à página principal | |
$('#back-button, #back-button-login').click(function () { | |
$('#register-form, #login-form').hide(); | |
$('#main-menu').show(); | |
clearForms(); // Limpa os formulários ao voltar para a tela principal | |
}); | |
// Função para mostrar o overlay de carregamento e desativar botões | |
function startLoading() { | |
$('#loading-overlay').show(); | |
$('button').prop('disabled', true); | |
} | |
// Função para ocultar o overlay de carregamento e reativar botões | |
function stopLoading() { | |
$('#loading-overlay').hide(); | |
$('button').prop('disabled', false); | |
} | |
// Formatação do telefone | |
$('#whatsapp').on('input', function() { | |
let value = $(this).val().replace(/\D/g, ''); | |
if (value.length > 2) { | |
value = '+' + value.slice(0, 2) + ' (' + value.slice(2, 4) + ') ' + value.slice(4, 9) + '-' + value.slice(9, 13); | |
} | |
$(this).val(value); | |
}); | |
// Verificação do apelido em tempo real | |
$('#nickname').on('blur', function() { | |
const nickname = $(this).val(); | |
if (nickname.length > 0) { | |
startLoading(); | |
$.ajax({ | |
url: '/check-nickname', | |
method: 'GET', | |
dataType: 'json', | |
data: { nickname: nickname }, | |
success: function(response) { | |
stopLoading(); | |
if (response.exists) { | |
$('#nickname-check').show(); | |
$('#register-button-form').prop('disabled', true); // Desativa o botão de envio do cadastro | |
} else { | |
$('#nickname-check').hide(); | |
$('#register-button-form').prop('disabled', false); // Reativa o botão de envio do cadastro | |
} | |
}, | |
error: function() { | |
stopLoading(); | |
} | |
}); | |
} | |
}); | |
// Submissão do formulário de cadastro via AJAX | |
$('#form-register').on('submit', function (e) { | |
e.preventDefault(); | |
startLoading(); | |
const data = { | |
name: $('#name').val(), | |
nickname: $('#nickname').val(), | |
whatsapp: $('#whatsapp').val().replace(/[()\-\s]/g, ''), | |
address: $('#address').val(), | |
district: $('#district').val(), | |
cep: $('#cep').val(), | |
email: $('#email').val(), | |
city: $('#city').val(), | |
country: $('#country').val() | |
}; | |
$.ajax({ | |
url: '/register', | |
method: 'POST', | |
contentType: 'application/json', | |
dataType: 'json', | |
data: JSON.stringify(data), | |
success: function(response) { | |
stopLoading(); | |
alert(response.message); | |
clearForms(); // Limpa o formulário após o envio bem-sucedido | |
}, | |
error: function(response) { | |
stopLoading(); | |
alert(response.responseJSON.message); | |
} | |
}); | |
}); | |
// Submissão do formulário de login via AJAX | |
$('#form-login').on('submit', function (e) { | |
e.preventDefault(); | |
startLoading(); | |
const data = { | |
nickname: $('#login-nickname').val(), | |
password: $('#login-password').val() | |
}; | |
$.ajax({ | |
url: '/login', | |
method: 'POST', | |
contentType: 'application/json', | |
dataType: 'json', | |
data: JSON.stringify(data), | |
success: function(response) { | |
stopLoading(); | |
if (response.redirectTo) { | |
window.location.href = response.redirectTo; | |
} else { | |
alert(response.message); | |
} | |
clearForms(); // Limpa o formulário após o login bem-sucedido | |
}, | |
error: function(response) { | |
stopLoading(); | |
alert(response.responseJSON.message); | |
} | |
}); | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment