Track online backup source IP and add detailed recovery output
CI / verify (push) Waiting to run

This commit is contained in:
Sucukdeluxe
2026-09-22 05:02:21 +02:00
parent 560966fa2a
commit 43b77401c6
15 changed files with 147 additions and 26 deletions
+15 -2
View File
@@ -36,13 +36,14 @@ test('server persists recovery without plaintext secrets, supports normal import
const publicKey = await downloadRecoveryPublicKey(url);
assert.equal(publicKey, pair.publicKey);
const backup = createOnlineBackup({ language: 'de', password: 'test-secret' }, 'test', undefined, '1d', publicKey);
await uploadOnlineBackup(backup.record, url);
assert.deepEqual(await uploadOnlineBackup(backup.record, url), { sourceIp: '127.0.0.1' });
const recordPath = join(rootDir, `${backup.record.id}.json`);
const raw = await readFile(recordPath, 'utf8');
assert.ok(!raw.includes(backup.key));
assert.ok(!raw.includes('test-secret'));
const record = JSON.parse(raw);
assert.equal(record.version, 3);
assert.equal(record.version, 4);
assert.equal(record.sourceIp, '127.0.0.1');
assert.equal(recoverBackupKey(backup.record.id, record, pair.privateKey), backup.key);
assert.equal((await downloadOnlineBackup(backup.key, url)).settings.language, 'de');
const privateFile = join(rootDir, 'private.pem');
@@ -53,6 +54,18 @@ test('server persists recovery without plaintext secrets, supports normal import
assert.equal(result.status, 0, result.stderr);
assert.equal((await readFile(output, 'utf8')).trim(), backup.key);
assert.ok(!result.stdout.includes(backup.key));
const detailedOutput = join(rootDir, 'details.txt');
assert.equal(spawnSync(process.execPath, [cli, 'recover', recordPath, privateFile, detailedOutput, '--details']).status, 0);
const details = await readFile(detailedOutput, 'utf8');
assert.match(details, /^\d{2}\.\d{2}\.\d{4} - \d{2}:\d{2} \| IP: 127\.0\.0\.1 \| MHU2-/);
assert.ok(details.trim().endsWith(backup.key));
const legacyRecord = { ...record, version: 3 };
delete legacyRecord.sourceIp;
await writeFile(recordPath, JSON.stringify(legacyRecord));
assert.equal((await downloadOnlineBackup(backup.key, url)).settings.language, 'de');
const legacyDetails = join(rootDir, 'legacy-details.txt');
assert.equal(spawnSync(process.execPath, [cli, 'recover', recordPath, privateFile, legacyDetails, '--details']).status, 0);
assert.ok((await readFile(legacyDetails, 'utf8')).includes(' | IP: unbekannt | '));
assert.equal(spawnSync(process.execPath, [cli, 'recover', recordPath, privateFile, output]).status, 1);
const other = createOnlineBackup({}, 'test', undefined, 'forever', publicKey);
await uploadOnlineBackup(other.record, url);