Implement client authentication and admin clinics panel
This commit is contained in:
+24
-4
@@ -17,6 +17,8 @@ const imageRoutes = require('./routes/images');
|
||||
const patientsRouter = require('./routes/patients');
|
||||
const gtosRouter = require('./routes/gtos');
|
||||
const systemRoutes = require('./routes/system');
|
||||
const adminClinicsRoutes = require('./routes/admin-clinics');
|
||||
const { router: clientAuthRoutes, requireClientAuth } = require('./routes/client-auth');
|
||||
const { checkInstallation } = require('./installer/check-installation');
|
||||
const redis = require('./redis');
|
||||
|
||||
@@ -442,8 +444,14 @@ app.get('/reset', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'public', 'reset.html'));
|
||||
});
|
||||
|
||||
// Página de Clínicas
|
||||
app.get('/admin-clinics', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'public', 'admin-clinics.html'));
|
||||
});
|
||||
|
||||
// Rotas de autenticação (públicas)
|
||||
app.use('/api/auth', authRoutes);
|
||||
app.use('/api/client', clientAuthRoutes);
|
||||
|
||||
// Página de login
|
||||
app.get('/login', (req, res) => {
|
||||
@@ -513,6 +521,10 @@ app.use('/api/gtos', gtosRouter);
|
||||
app.use('/api/system', authenticateToken);
|
||||
app.use('/api/system', systemRoutes);
|
||||
|
||||
// APIs Administrativas (Clínicas e Dispositivos) - requerem autenticação (checagem interna na rota)
|
||||
app.use('/api/admin/clinics', authenticateToken);
|
||||
app.use('/api/admin/clinics', adminClinicsRoutes);
|
||||
|
||||
// ================================================================
|
||||
// SOCKET.IO - CONEXÕES EM TEMPO REAL
|
||||
// ================================================================
|
||||
@@ -529,17 +541,25 @@ io.use((socket, next) => {
|
||||
return next(new Error('Authentication error: Token required'));
|
||||
}
|
||||
|
||||
// 1. Verificar se é a API_KEY do Sensor
|
||||
// 1. Verificar se é a API_KEY antiga/legado do Sensor
|
||||
if (token === serverApiKey) {
|
||||
socket.clientType = 'sensor';
|
||||
return next(); // Token válido, prosseguir
|
||||
}
|
||||
|
||||
// 2. Se não for a API_KEY, tentar validar como JWT (Painel Web)
|
||||
// 2. Se não for a API_KEY, tentar validar como JWT (Painel Web ou Novo App Desktop)
|
||||
try {
|
||||
const user = jwt.verify(token, JWT_SECRET);
|
||||
socket.clientType = 'web';
|
||||
socket.user = user;
|
||||
|
||||
// Se o token for do tipo client_device (App Desktop Moderno), ele age como sensor
|
||||
if (user.role === 'client_device') {
|
||||
socket.clientType = 'sensor';
|
||||
socket.user = user;
|
||||
} else {
|
||||
socket.clientType = 'web';
|
||||
socket.user = user;
|
||||
}
|
||||
|
||||
return next(); // JWT válido, prosseguir
|
||||
} catch (error) {
|
||||
console.log(`❌ Conexão Socket.IO rejeitada (Token Inválido) - IP: ${socket.handshake.address}`);
|
||||
|
||||
Reference in New Issue
Block a user