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:
@@ -7,6 +7,11 @@ const { getForAgent } = require('./announcement.controller');
|
|||||||
const { validateAgentKey } = require('../utils/agentAuth');
|
const { validateAgentKey } = require('../utils/agentAuth');
|
||||||
const crypto = require('crypto');
|
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.
|
// 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.
|
// Idempotent: ein bereits enrollter Agent bekommt seinen bestehenden Key einfach erneut zurück.
|
||||||
const enroll = asyncHandler(async (req, res) => {
|
const enroll = asyncHandler(async (req, res) => {
|
||||||
@@ -123,7 +128,7 @@ const checkin = asyncHandler(async (req, res) => {
|
|||||||
const { pending, running } = getPendingCommands(agent.id);
|
const { pending, running } = getPendingCommands(agent.id);
|
||||||
|
|
||||||
// Zielversion: Gruppen-spezifisch (staged rollout) oder globaler Default
|
// 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;
|
let targetVersion = GLOBAL_VERSION;
|
||||||
try {
|
try {
|
||||||
const db = getDatabase();
|
const db = getDatabase();
|
||||||
@@ -211,7 +216,7 @@ const downloadScript = asyncHandler(async (req, res) => {
|
|||||||
return res.status(404).json({ status: 'error', message: 'Script nicht gefunden' });
|
return res.status(404).json({ status: 'error', message: 'Script nicht gefunden' });
|
||||||
}
|
}
|
||||||
res.setHeader('Content-Type', 'text/plain; charset=utf-8');
|
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);
|
res.sendFile(scriptPath);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -244,7 +249,7 @@ const downloadSetup = asyncHandler(async (req, res) => {
|
|||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|
||||||
// Zielversion: Gruppen-spezifisch (staged rollout) oder globaler Default — gleiche Logik wie checkin()
|
// 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;
|
const hostname = req.query.hostname;
|
||||||
if (hostname) {
|
if (hostname) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -18,6 +18,10 @@ services:
|
|||||||
- SCANNER_API_KEY=${SCANNER_API_KEY}
|
- SCANNER_API_KEY=${SCANNER_API_KEY}
|
||||||
- ENCRYPTION_KEY=${ENCRYPTION_KEY}
|
- ENCRYPTION_KEY=${ENCRYPTION_KEY}
|
||||||
- TV_DASHBOARD_KEY=${TV_DASHBOARD_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
|
- JWT_EXPIRATION=8h
|
||||||
- DATABASE_PATH=/app/data/database.sqlite
|
- DATABASE_PATH=/app/data/database.sqlite
|
||||||
- FRONTEND_URL=https://it-nexus.cereda-systems.de
|
- FRONTEND_URL=https://it-nexus.cereda-systems.de
|
||||||
|
|||||||
Reference in New Issue
Block a user