Add encrypted operator recovery for online backup keys
CI / verify (push) Waiting to run

This commit is contained in:
Sucukdeluxe
2026-09-22 04:34:52 +02:00
parent fa2ca27424
commit de1b79ed4b
15 changed files with 251 additions and 14 deletions
+12 -2
View File
@@ -156,7 +156,7 @@ function onlineBackupExpiration(exportedAt, retention) {
return new Date(created.getTime() + seconds * 1000).toISOString();
}
function createOnlineBackup(settings, appVersion, exportedAt = new Date().toISOString(), retention = DEFAULT_ONLINE_BACKUP_RETENTION) {
function createOnlineBackup(settings, appVersion, exportedAt = new Date().toISOString(), retention = DEFAULT_ONLINE_BACKUP_RETENTION, recoveryPublicKey = null) {
const normalizedRetention = normalizeOnlineBackupRetention(retention);
const expiresInSeconds = ONLINE_BACKUP_RETENTION_SECONDS[normalizedRetention];
const expiresAt = onlineBackupExpiration(exportedAt, normalizedRetention);
@@ -192,7 +192,8 @@ function createOnlineBackup(settings, appVersion, exportedAt = new Date().toISOS
id: parsed.id,
blob: blobBytes.toString('base64url'),
deleteVerifier,
expiresInSeconds
expiresInSeconds,
...(recoveryPublicKey ? { recovery: require('./online-backup-recovery').wrapBackupKey(key, parsed.id, recoveryPublicKey) } : {})
},
expiresAt
};
@@ -228,6 +229,14 @@ function restoreOnlineBackup(key, blob) {
}
}
async function downloadRecoveryPublicKey(baseUrl = ONLINE_BACKUP_API_URL, options) {
const { response, body } = await requestText(endpoint(baseUrl, '/v1/recovery-key'), { method: 'GET', headers: { accept: 'application/json' } }, options);
if (response.status !== 200) throw new Error('Wiederherstellungsschlüssel des Sicherungsdienstes ist nicht verfügbar');
const value = JSON.parse(body);
require('./online-backup-recovery').recoveryPublicKey(value.publicKey);
return value.publicKey;
}
async function uploadOnlineBackup(record, baseUrl = ONLINE_BACKUP_API_URL, options) {
const { response } = await requestText(endpoint(baseUrl, '/v1/backups'), {
method: 'POST',
@@ -277,6 +286,7 @@ module.exports = {
createOnlineBackup,
deleteOnlineBackup,
downloadOnlineBackup,
downloadRecoveryPublicKey,
normalizeOnlineBackupRetention,
onlineBackupExpiration,
parseOnlineBackupKey,