Implement checks for existing encryption with the new key in re-encryption scripts. Add functionality to skip re-encryption if data is already encrypted, enhancing efficiency and preventing redundant operations.
This commit is contained in:
@@ -82,10 +82,25 @@ function isEncrypted(data) {
|
||||
}
|
||||
}
|
||||
|
||||
// Prüft ob Daten bereits mit dem neuen Schlüssel verschlüsselt sind
|
||||
async function isEncryptedWithNewKey(encryptedData) {
|
||||
try {
|
||||
await decryptObject(encryptedData, NEW_KEY)
|
||||
return true
|
||||
} catch {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// Versucht mit verschiedenen Schlüsseln zu entschlüsseln
|
||||
async function decryptWithFallback(encryptedData, keys) {
|
||||
const errors = []
|
||||
|
||||
// Prüfe zuerst, ob die Daten bereits mit dem neuen Schlüssel verschlüsselt sind
|
||||
if (await isEncryptedWithNewKey(encryptedData)) {
|
||||
throw new Error('ALREADY_ENCRYPTED_WITH_NEW_KEY')
|
||||
}
|
||||
|
||||
// encryptedData sollte bereits ein String sein (entweder direkt verschlüsselt oder aus einem JSON-Objekt extrahiert)
|
||||
// Versuche mit jedem Schlüssel zu entschlüsseln
|
||||
for (const key of keys) {
|
||||
@@ -115,6 +130,12 @@ async function reencryptUsers(backupDir, oldKeys) {
|
||||
return
|
||||
}
|
||||
|
||||
// Prüfe ob bereits mit neuem Schlüssel verschlüsselt
|
||||
if (await isEncryptedWithNewKey(data)) {
|
||||
console.log('ℹ️ users.json ist bereits mit dem neuen Schlüssel verschlüsselt, überspringe...')
|
||||
return
|
||||
}
|
||||
|
||||
console.log('🔄 Entschlüssele users.json...')
|
||||
const decrypted = await decryptWithFallback(data, oldKeys)
|
||||
|
||||
@@ -129,6 +150,10 @@ async function reencryptUsers(backupDir, oldKeys) {
|
||||
console.log('ℹ️ users.json existiert nicht, überspringe...')
|
||||
return
|
||||
}
|
||||
if (error.message === 'ALREADY_ENCRYPTED_WITH_NEW_KEY') {
|
||||
console.log('ℹ️ users.json ist bereits mit dem neuen Schlüssel verschlüsselt, überspringe...')
|
||||
return
|
||||
}
|
||||
throw error
|
||||
}
|
||||
}
|
||||
@@ -147,6 +172,12 @@ async function reencryptMembers(backupDir, oldKeys) {
|
||||
return
|
||||
}
|
||||
|
||||
// Prüfe ob bereits mit neuem Schlüssel verschlüsselt
|
||||
if (await isEncryptedWithNewKey(data)) {
|
||||
console.log('ℹ️ members.json ist bereits mit dem neuen Schlüssel verschlüsselt, überspringe...')
|
||||
return
|
||||
}
|
||||
|
||||
console.log('🔄 Entschlüssele members.json...')
|
||||
const decrypted = await decryptWithFallback(data, oldKeys)
|
||||
|
||||
@@ -161,6 +192,10 @@ async function reencryptMembers(backupDir, oldKeys) {
|
||||
console.log('ℹ️ members.json existiert nicht, überspringe...')
|
||||
return
|
||||
}
|
||||
if (error.message === 'ALREADY_ENCRYPTED_WITH_NEW_KEY') {
|
||||
console.log('ℹ️ members.json ist bereits mit dem neuen Schlüssel verschlüsselt, überspringe...')
|
||||
return
|
||||
}
|
||||
throw error
|
||||
}
|
||||
}
|
||||
@@ -197,28 +232,40 @@ async function reencryptMembershipApplications(backupDir, oldKeys) {
|
||||
|
||||
// Prüfe ob encryptedData Feld vorhanden ist
|
||||
if (parsed.encryptedData) {
|
||||
console.log(`🔄 Entschlüssele ${file}...`)
|
||||
// Nur das encryptedData Feld entschlüsseln
|
||||
const decrypted = await decryptWithFallback(parsed.encryptedData, oldKeys)
|
||||
|
||||
console.log(`🔐 Verschlüssele ${file} mit neuem Schlüssel...`)
|
||||
const reencrypted = encryptObject(decrypted, NEW_KEY)
|
||||
|
||||
parsed.encryptedData = reencrypted
|
||||
await fs.writeFile(filePath, JSON.stringify(parsed, null, 2), 'utf-8')
|
||||
console.log(`✅ ${file} erfolgreich neu verschlüsselt`)
|
||||
processed++
|
||||
// Prüfe ob bereits mit neuem Schlüssel verschlüsselt
|
||||
if (await isEncryptedWithNewKey(parsed.encryptedData)) {
|
||||
console.log(`ℹ️ ${file} ist bereits mit dem neuen Schlüssel verschlüsselt, überspringe...`)
|
||||
skipped++
|
||||
} else {
|
||||
console.log(`🔄 Entschlüssele ${file}...`)
|
||||
// Nur das encryptedData Feld entschlüsseln
|
||||
const decrypted = await decryptWithFallback(parsed.encryptedData, oldKeys)
|
||||
|
||||
console.log(`🔐 Verschlüssele ${file} mit neuem Schlüssel...`)
|
||||
const reencrypted = encryptObject(decrypted, NEW_KEY)
|
||||
|
||||
parsed.encryptedData = reencrypted
|
||||
await fs.writeFile(filePath, JSON.stringify(parsed, null, 2), 'utf-8')
|
||||
console.log(`✅ ${file} erfolgreich neu verschlüsselt`)
|
||||
processed++
|
||||
}
|
||||
} else if (file.endsWith('.data')) {
|
||||
// .data Dateien sind direkt verschlüsselt
|
||||
console.log(`🔄 Entschlüssele ${file}...`)
|
||||
const decrypted = await decryptWithFallback(content, oldKeys)
|
||||
|
||||
console.log(`🔐 Verschlüssele ${file} mit neuem Schlüssel...`)
|
||||
const reencrypted = encrypt(JSON.stringify(decrypted), NEW_KEY)
|
||||
|
||||
await fs.writeFile(filePath, reencrypted, 'utf-8')
|
||||
console.log(`✅ ${file} erfolgreich neu verschlüsselt`)
|
||||
processed++
|
||||
// Prüfe ob bereits mit neuem Schlüssel verschlüsselt
|
||||
if (await isEncryptedWithNewKey(content)) {
|
||||
console.log(`ℹ️ ${file} ist bereits mit dem neuen Schlüssel verschlüsselt, überspringe...`)
|
||||
skipped++
|
||||
} else {
|
||||
console.log(`🔄 Entschlüssele ${file}...`)
|
||||
const decrypted = await decryptWithFallback(content, oldKeys)
|
||||
|
||||
console.log(`🔐 Verschlüssele ${file} mit neuem Schlüssel...`)
|
||||
const reencrypted = encrypt(JSON.stringify(decrypted), NEW_KEY)
|
||||
|
||||
await fs.writeFile(filePath, reencrypted, 'utf-8')
|
||||
console.log(`✅ ${file} erfolgreich neu verschlüsselt`)
|
||||
processed++
|
||||
}
|
||||
} else {
|
||||
console.log(`ℹ️ ${file} enthält keine verschlüsselten Daten, überspringe...`)
|
||||
skipped++
|
||||
|
||||
Reference in New Issue
Block a user