import { promises } from 'fs'; import path from 'path'; import { randomUUID } from 'crypto'; import { d as decryptObject, a as encryptObject } from './encryption.mjs'; const getDataPath = (filename) => { const cwd = process.cwd(); if (cwd.endsWith(".output")) { return path.join(cwd, "../server/data", filename); } return path.join(cwd, "server/data", filename); }; const MEMBERS_FILE = getDataPath("members.json"); function getEncryptionKey() { return process.env.ENCRYPTION_KEY || "default-key-change-in-production"; } function isEncrypted(data) { try { const parsed = JSON.parse(data.trim()); if (Array.isArray(parsed)) { return false; } if (typeof parsed === "object" && parsed !== null && !parsed.encryptedData) { return false; } return false; } catch (e) { return true; } } async function readMembers() { try { const data = await promises.readFile(MEMBERS_FILE, "utf-8"); const encrypted = isEncrypted(data); if (encrypted) { const encryptionKey = getEncryptionKey(); try { return decryptObject(data, encryptionKey); } catch (decryptError) { console.error("Fehler beim Entschl\xFCsseln der Mitgliederdaten:", decryptError); try { const plainData = JSON.parse(data); console.warn("Entschl\xFCsselung fehlgeschlagen, versuche als unverschl\xFCsseltes Format zu lesen"); return plainData; } catch (parseError) { console.error("Konnte Mitgliederdaten weder entschl\xFCsseln noch als JSON lesen"); return []; } } } else { const members = JSON.parse(data); console.log("Migriere unverschl\xFCsselte Mitgliederdaten zu verschl\xFCsselter Speicherung..."); await writeMembers(members); return members; } } catch (error) { if (error.code === "ENOENT") { return []; } console.error("Fehler beim Lesen der Mitgliederdaten:", error); return []; } } async function writeMembers(members) { try { const encryptionKey = getEncryptionKey(); const encryptedData = encryptObject(members, encryptionKey); await promises.writeFile(MEMBERS_FILE, encryptedData, "utf-8"); return true; } catch (error) { console.error("Fehler beim Schreiben der Mitgliederdaten:", error); return false; } } async function saveMember(memberData) { const members = await readMembers(); if (memberData.id) { const index = members.findIndex((m) => m.id === memberData.id); if (index !== -1) { members[index] = { ...members[index], ...memberData }; } else { throw new Error("Mitglied nicht gefunden"); } } else { const newMember = { ...memberData, id: randomUUID() // Cryptographically secure unique ID }; members.push(newMember); } await writeMembers(members); return true; } async function deleteMember(id) { const members = await readMembers(); const filtered = members.filter((m) => m.id !== id); await writeMembers(filtered); return true; } export { deleteMember as d, readMembers as r, saveMember as s }; //# sourceMappingURL=members.mjs.map