diff --git a/backend/src/controllers/monitoringAgent.controller.js b/backend/src/controllers/monitoringAgent.controller.js index b558874..fddaa62 100644 --- a/backend/src/controllers/monitoringAgent.controller.js +++ b/backend/src/controllers/monitoringAgent.controller.js @@ -7,6 +7,11 @@ const { getForAgent } = require('./announcement.controller'); const { validateAgentKey } = require('../utils/agentAuth'); const crypto = require('crypto'); +// Code-seitiger Fallback falls AGENT_VERSION env-Var fehlt — bei jedem Agent-Release mit hochziehen! +// (War zuvor an mehreren Stellen hartcodiert auf alte Versionen wie '2.0.0'/'1.2.4' — echter +// Downgrade-Bug für Agents ohne Patch-Gruppe oder ohne ?hostname-Parameter.) +const FALLBACK_AGENT_VERSION = '2.8.0'; + // POST /api/monitoring/enroll — Agent tauscht geteilten Bootstrap-Key gegen individuellen Per-Device-Key. // Idempotent: ein bereits enrollter Agent bekommt seinen bestehenden Key einfach erneut zurück. const enroll = asyncHandler(async (req, res) => { @@ -123,7 +128,7 @@ const checkin = asyncHandler(async (req, res) => { const { pending, running } = getPendingCommands(agent.id); // Zielversion: Gruppen-spezifisch (staged rollout) oder globaler Default - const GLOBAL_VERSION = process.env.AGENT_VERSION || '1.2.4'; + const GLOBAL_VERSION = process.env.AGENT_VERSION || FALLBACK_AGENT_VERSION; let targetVersion = GLOBAL_VERSION; try { const db = getDatabase(); @@ -211,7 +216,7 @@ const downloadScript = asyncHandler(async (req, res) => { return res.status(404).json({ status: 'error', message: 'Script nicht gefunden' }); } res.setHeader('Content-Type', 'text/plain; charset=utf-8'); - res.setHeader('X-Agent-Version', process.env.AGENT_VERSION || '1.2.3'); + res.setHeader('X-Agent-Version', process.env.AGENT_VERSION || FALLBACK_AGENT_VERSION); res.sendFile(scriptPath); }); @@ -244,7 +249,7 @@ const downloadSetup = asyncHandler(async (req, res) => { const fs = require('fs'); // Zielversion: Gruppen-spezifisch (staged rollout) oder globaler Default — gleiche Logik wie checkin() - let version = process.env.AGENT_VERSION || '2.0.0'; + let version = process.env.AGENT_VERSION || FALLBACK_AGENT_VERSION; const hostname = req.query.hostname; if (hostname) { try { diff --git a/docker-compose.yml b/docker-compose.yml index dac0e81..4fd973f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,6 +18,10 @@ services: - SCANNER_API_KEY=${SCANNER_API_KEY} - ENCRYPTION_KEY=${ENCRYPTION_KEY} - TV_DASHBOARD_KEY=${TV_DASHBOARD_KEY} + # Globaler Fallback für Agents ohne Patch-Gruppe ODER ohne ?hostname-Parameter (alte Agent-Versionen + # vor v2.5.0) — bei jedem neuen Agent-Release IMMER mit hochziehen, sonst fallen alte/gruppenlose + # Agents auf den hartcodierten Code-Default zurück (war zuvor 2.0.0 — ein echter Downgrade-Bug)! + - AGENT_VERSION=${AGENT_VERSION} - JWT_EXPIRATION=8h - DATABASE_PATH=/app/data/database.sqlite - FRONTEND_URL=https://it-nexus.cereda-systems.de