feat: Implementação completa do NoIdle - Cliente, Backend e Scripts
- Cliente Windows com modo silencioso e auto-start robusto - Backend Node.js + API REST - Frontend Next.js + Dashboard - Scripts PowerShell de configuração e diagnóstico - Documentação completa - Build scripts para Windows e Linux - Solução de auto-start após reinicialização Resolução do problema: Cliente não voltava ativo após reboot Solução: Registro do Windows + Task Scheduler + Modo silencioso
This commit is contained in:
82
backend/server.js
Normal file
82
backend/server.js
Normal file
@@ -0,0 +1,82 @@
|
||||
const express = require('express');
|
||||
const cors = require('cors');
|
||||
require('dotenv').config();
|
||||
|
||||
const app = express();
|
||||
|
||||
// Middleware CORS
|
||||
const corsOptions = {
|
||||
origin: function (origin, callback) {
|
||||
// Permitir requisições sem origin (mobile apps, Postman, etc)
|
||||
if (!origin) return callback(null, true);
|
||||
|
||||
// Lista de origens permitidas
|
||||
const allowedOrigins = [
|
||||
'https://admin.noidle.tech',
|
||||
'https://admin.pointcontrol.co',
|
||||
'http://localhost:3000',
|
||||
'http://localhost:3001'
|
||||
];
|
||||
|
||||
if (allowedOrigins.indexOf(origin) !== -1 || origin.includes('localhost')) {
|
||||
callback(null, true);
|
||||
} else {
|
||||
callback(null, true); // Permitir todas por enquanto, pode restringir depois
|
||||
}
|
||||
},
|
||||
credentials: true,
|
||||
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
|
||||
allowedHeaders: ['Content-Type', 'Authorization', 'X-API-Key']
|
||||
};
|
||||
|
||||
app.use(cors(corsOptions));
|
||||
app.use(express.json());
|
||||
app.use(express.urlencoded({ extended: true }));
|
||||
|
||||
// Log
|
||||
app.use((req, res, next) => {
|
||||
console.log(`${new Date().toISOString()} - ${req.method} ${req.url}`);
|
||||
next();
|
||||
});
|
||||
|
||||
// Rotas
|
||||
const authRoutes = require('./routes/auth');
|
||||
const dashboardRoutes = require('./routes/dashboard');
|
||||
const devicesRoutes = require('./routes/devices');
|
||||
const activitiesRoutes = require('./routes/activities');
|
||||
const activityRoutes = require('./routes/activity');
|
||||
const keysRoutes = require('./routes/keys');
|
||||
const usersRoutes = require('./routes/users');
|
||||
const teamsRoutes = require("./routes/teams");
|
||||
|
||||
app.use('/api/auth', authRoutes);
|
||||
app.use('/api/dashboard', dashboardRoutes);
|
||||
app.use('/api/devices', devicesRoutes);
|
||||
app.use('/api/activities', activitiesRoutes);
|
||||
app.use("/api/activity", activityRoutes);
|
||||
app.use('/api/keys', keysRoutes);
|
||||
app.use('/api/users', usersRoutes);
|
||||
app.use("/api/teams", teamsRoutes);
|
||||
|
||||
// Health check
|
||||
app.get('/api/health', (req, res) => {
|
||||
res.json({ status: 'ok', timestamp: new Date().toISOString() });
|
||||
});
|
||||
|
||||
// 404
|
||||
app.use((req, res) => {
|
||||
res.status(404).json({ error: 'Rota não encontrada' });
|
||||
});
|
||||
|
||||
// Error handler
|
||||
app.use((err, req, res, next) => {
|
||||
console.error('Erro:', err);
|
||||
res.status(500).json({ error: 'Erro interno do servidor' });
|
||||
});
|
||||
|
||||
const PORT = process.env.PORT || 3005;
|
||||
|
||||
app.listen(PORT, () => {
|
||||
console.log(`✅ PointControl API rodando na porta ${PORT}`);
|
||||
console.log(`📅 ${new Date().toISOString()}`);
|
||||
});
|
||||
Reference in New Issue
Block a user