Initial LinkedSign platform

This commit is contained in:
2026-04-06 20:33:59 -05:00
commit 1074c7c9d2
159 changed files with 19072 additions and 0 deletions
@@ -0,0 +1,78 @@
const db = require('../../config/db');
const fs = require('fs/promises');
const path = require('path');
const chainMetadataDir = path.resolve(process.cwd(), 'storage', 'certificates', 'metadata');
const chainMetadataFile = path.join(chainMetadataDir, 'chain-status.json');
const readChainMetadata = async () => {
try {
const raw = await fs.readFile(chainMetadataFile, 'utf8');
return JSON.parse(raw);
} catch {
return {};
}
};
const writeChainMetadata = async (data) => {
await fs.mkdir(chainMetadataDir, { recursive: true });
await fs.writeFile(chainMetadataFile, JSON.stringify(data, null, 2), 'utf8');
};
const create = async ({ userId, alias, filename, storagePath, subjectCn, issuerCn, validFrom, validTo, serialNumber }) => {
const [result] = await db.execute(
`INSERT INTO certificates (user_id, alias, filename, storage_path, subject_cn, issuer_cn, valid_from, valid_to, serial_number)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
[userId, alias, filename, storagePath, subjectCn || null, issuerCn || null, validFrom || null, validTo || null, serialNumber || null]
);
return result.insertId;
};
const findByUser = async (userId) => {
const [rows] = await db.execute(
'SELECT id, user_id, alias, filename, subject_cn, issuer_cn, valid_from, valid_to, serial_number, is_active, created_at FROM certificates WHERE user_id = ? ORDER BY created_at DESC',
[userId]
);
return rows;
};
const findById = async (id) => {
const [rows] = await db.execute('SELECT * FROM certificates WHERE id = ?', [id]);
return rows[0] || null;
};
const deactivate = async (id) => {
await db.execute('UPDATE certificates SET is_active = 0 WHERE id = ?', [id]);
};
const remove = async (id) => {
await db.execute('DELETE FROM certificates WHERE id = ?', [id]);
};
const saveChainStatus = async (certId, metadata) => {
const current = await readChainMetadata();
current[String(certId)] = metadata;
await writeChainMetadata(current);
};
const getChainStatus = async (certId) => {
const current = await readChainMetadata();
return current[String(certId)] || null;
};
const removeChainStatus = async (certId) => {
const current = await readChainMetadata();
delete current[String(certId)];
await writeChainMetadata(current);
};
module.exports = {
create,
findByUser,
findById,
deactivate,
remove,
saveChainStatus,
getChainStatus,
removeChainStatus,
};