Initial LinkedSign platform
This commit is contained in:
@@ -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,
|
||||
};
|
||||
Reference in New Issue
Block a user