Refactor authentication and data handling in API; implement encryption for user and member data storage. Update relevant components to utilize new encryption methods, ensuring secure data management across the application. Enhance error handling and streamline data writing processes for improved reliability.
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
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();
|
||||
@@ -10,10 +11,48 @@ const getDataPath = (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");
|
||||
return JSON.parse(data);
|
||||
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 [];
|
||||
@@ -24,7 +63,9 @@ async function readMembers() {
|
||||
}
|
||||
async function writeMembers(members) {
|
||||
try {
|
||||
await promises.writeFile(MEMBERS_FILE, JSON.stringify(members, null, 2), "utf-8");
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user