fix: Sistema MDM ativado e funcionando
✅ Tabelas MDM criadas (policies, device_policies, policy_commands, etc) ✅ 5 templates pré-configurados inseridos ✅ API /api/mdm/templates funcionando ✅ API /api/policies funcionando ✅ Senha admin resetada (admin123) ✅ Script setup_mdm.js criado Próximo: Corrigir menu lateral duplicado e criar frontend de políticas
This commit is contained in:
@@ -1,13 +1,12 @@
|
||||
// Rotas para gerenciamento de políticas MDM
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
const { Pool } = require('pg');
|
||||
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
|
||||
const { query } = require('../config/database');
|
||||
|
||||
// Listar todas as políticas
|
||||
router.get('/', async (req, res) => {
|
||||
try {
|
||||
const result = await pool.query(`
|
||||
const result = await query(`
|
||||
SELECT
|
||||
p.*,
|
||||
COUNT(DISTINCT dp.device_id) as devices_count,
|
||||
@@ -40,7 +39,7 @@ router.post('/', async (req, res) => {
|
||||
priority
|
||||
} = req.body;
|
||||
|
||||
const result = await pool.query(`
|
||||
const result = await query(`
|
||||
INSERT INTO policies (
|
||||
name, description, type, config, enabled, schedule, priority
|
||||
) VALUES ($1, $2, $3, $4, $5, $6, $7)
|
||||
@@ -69,7 +68,7 @@ router.put('/:id', async (req, res) => {
|
||||
priority
|
||||
} = req.body;
|
||||
|
||||
const result = await pool.query(`
|
||||
const result = await query(`
|
||||
UPDATE policies
|
||||
SET name = $1,
|
||||
description = $2,
|
||||
@@ -101,10 +100,10 @@ router.delete('/:id', async (req, res) => {
|
||||
const { id } = req.params;
|
||||
|
||||
// Remover associações com dispositivos
|
||||
await pool.query('DELETE FROM device_policies WHERE policy_id = $1', [id]);
|
||||
await query('DELETE FROM device_policies WHERE policy_id = $1', [id]);
|
||||
|
||||
// Remover política
|
||||
const result = await pool.query('DELETE FROM policies WHERE id = $1 RETURNING *', [id]);
|
||||
const result = await query('DELETE FROM policies WHERE id = $1 RETURNING *', [id]);
|
||||
|
||||
if (result.rows.length === 0) {
|
||||
return res.status(404).json({ success: false, message: 'Política não encontrada' });
|
||||
@@ -130,7 +129,7 @@ router.post('/:id/devices', async (req, res) => {
|
||||
|
||||
// Inserir associações
|
||||
const values = device_ids.map(device_id => `('${device_id}', ${id})`).join(',');
|
||||
await pool.query(`
|
||||
await query(`
|
||||
INSERT INTO device_policies (device_id, policy_id)
|
||||
VALUES ${values}
|
||||
ON CONFLICT (device_id, policy_id) DO NOTHING
|
||||
@@ -154,7 +153,7 @@ router.delete('/:id/devices', async (req, res) => {
|
||||
return res.status(400).json({ success: false, message: 'device_ids deve ser um array não vazio' });
|
||||
}
|
||||
|
||||
const result = await pool.query(`
|
||||
const result = await query(`
|
||||
DELETE FROM device_policies
|
||||
WHERE policy_id = $1 AND device_id = ANY($2)
|
||||
`, [id, device_ids]);
|
||||
@@ -174,7 +173,7 @@ router.post('/:id/execute', async (req, res) => {
|
||||
const { device_ids } = req.body; // Se não fornecido, executa em todos os dispositivos com a política
|
||||
|
||||
// Buscar política
|
||||
const policyResult = await pool.query('SELECT * FROM policies WHERE id = $1', [id]);
|
||||
const policyResult = await query('SELECT * FROM policies WHERE id = $1', [id]);
|
||||
if (policyResult.rows.length === 0) {
|
||||
return res.status(404).json({ success: false, message: 'Política não encontrada' });
|
||||
}
|
||||
@@ -184,13 +183,13 @@ router.post('/:id/execute', async (req, res) => {
|
||||
// Buscar dispositivos
|
||||
let devicesQuery;
|
||||
if (device_ids && device_ids.length > 0) {
|
||||
devicesQuery = await pool.query(`
|
||||
devicesQuery = await query(`
|
||||
SELECT DISTINCT d.device_id, d.device_name
|
||||
FROM devices d
|
||||
WHERE d.device_id = ANY($1) AND d.status = 'online'
|
||||
`, [device_ids]);
|
||||
} else {
|
||||
devicesQuery = await pool.query(`
|
||||
devicesQuery = await query(`
|
||||
SELECT DISTINCT d.device_id, d.device_name
|
||||
FROM devices d
|
||||
INNER JOIN device_policies dp ON d.device_id = dp.device_id
|
||||
@@ -208,7 +207,7 @@ router.post('/:id/execute', async (req, res) => {
|
||||
// Criar comandos de execução para cada dispositivo
|
||||
const commands = [];
|
||||
for (const device of devicesQuery.rows) {
|
||||
const commandResult = await pool.query(`
|
||||
const commandResult = await query(`
|
||||
INSERT INTO policy_commands (
|
||||
device_id,
|
||||
policy_id,
|
||||
@@ -249,7 +248,7 @@ router.get('/:id/executions', async (req, res) => {
|
||||
const { id } = req.params;
|
||||
const { limit = 50, offset = 0 } = req.query;
|
||||
|
||||
const result = await pool.query(`
|
||||
const result = await query(`
|
||||
SELECT
|
||||
pe.*,
|
||||
d.device_name,
|
||||
@@ -261,7 +260,7 @@ router.get('/:id/executions', async (req, res) => {
|
||||
LIMIT $2 OFFSET $3
|
||||
`, [id, limit, offset]);
|
||||
|
||||
const countResult = await pool.query(
|
||||
const countResult = await query(
|
||||
'SELECT COUNT(*) FROM policy_executions WHERE policy_id = $1',
|
||||
[id]
|
||||
);
|
||||
@@ -282,7 +281,7 @@ router.get('/:id/devices', async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
const result = await pool.query(`
|
||||
const result = await query(`
|
||||
SELECT
|
||||
d.*,
|
||||
dp.assigned_at,
|
||||
|
||||
Reference in New Issue
Block a user