Fix: AGENT_VERSION-Fallback-Bug erneut behoben (Downgrade auf v2.0.0)

Beim heutigen Secrets-Cleanup von docker-compose.yml ging AGENT_VERSION
verloren (war nur ad-hoc auf dem Server gesetzt, nie versioniert) — der
Code-Fallback griff dadurch wieder auf hartcodierte Alt-Versionen zurück
('2.0.0'/'1.2.4'/'1.2.3'), wodurch 17 Agents beim Selbst-Update-Versuch
fälschlich auf v2.0.0 downgraded wurden. AGENT_VERSION jetzt fest im
docker-compose.yml-Template verankert, alle Fallback-Stellen im Code auf
eine gemeinsame FALLBACK_AGENT_VERSION-Konstante zusammengeführt.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-26 14:14:14 +02:00
parent f3bd8d0910
commit 33e0b73f7f
2 changed files with 12 additions and 3 deletions

View File

@@ -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 {