79 lines
2.4 KiB
JavaScript
79 lines
2.4 KiB
JavaScript
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,
|
|
};
|