streamby-core
Version:
StreamBy middleware framework for media storage management
71 lines (70 loc) • 3.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.addCredential = addCredential;
exports.updateCredential = updateCredential;
exports.deleteCredential = deleteCredential;
const manager_1 = require("../models/manager");
const encryption_1 = require("../utils/encryption");
const mongodb_1 = require("mongodb");
async function addCredential(config, projectId, newCredential) {
if (!(0, encryption_1.isEncryptionKeySet)()) {
throw new Error('Encryption key is not set. Cannot add credentials.');
}
const ProjectModel = (0, manager_1.getModel)('projects', 'nosql');
const project = await ProjectModel.findOne({ _id: projectId });
if (!project) {
throw new Error('Project not found.');
}
const encryptedValue = (0, encryption_1.encrypt)(newCredential.value);
const credentialToSave = {
id: newCredential.id || new mongodb_1.ObjectId().toHexString(), // Generate ID if not provided
key: newCredential.key,
encryptedValue: encryptedValue,
};
const updatedProject = await ProjectModel.update({ _id: projectId }, { $push: { credentials: credentialToSave } });
if (!updatedProject) {
throw new Error('Failed to add credential to project.');
}
return updatedProject;
}
async function updateCredential(config, projectId, credentialId, updates) {
if (!(0, encryption_1.isEncryptionKeySet)()) {
throw new Error('Encryption key is not set. Cannot update credentials.');
}
const ProjectModel = (0, manager_1.getModel)('projects', 'nosql');
const project = await ProjectModel.findOne({ _id: projectId });
if (!project) {
throw new Error('Project not found.');
}
const credentialIndex = project.credentials?.findIndex(cred => cred.id === credentialId);
if (credentialIndex === undefined || credentialIndex === -1) {
throw new Error(`Credential with ID ${credentialId} not found.`);
}
const currentCredential = project.credentials[credentialIndex];
let encryptedValue = currentCredential.encryptedValue;
if (updates.value !== undefined) {
encryptedValue = (0, encryption_1.encrypt)(updates.value);
}
const updatedCredential = {
...currentCredential,
key: updates.key || currentCredential.key,
encryptedValue: encryptedValue,
};
const updatedProject = await ProjectModel.update({ _id: projectId, 'credentials.id': credentialId }, { $set: { 'credentials.$': updatedCredential } });
if (!updatedProject) {
throw new Error('Failed to update credential in project.');
}
return updatedProject;
}
async function deleteCredential(config, projectId, credentialId) {
const ProjectModel = (0, manager_1.getModel)('projects', 'nosql');
const project = await ProjectModel.findOne({ _id: projectId });
if (!project) {
throw new Error('Project not found.');
}
const updatedProject = await ProjectModel.update({ _id: projectId }, { $pull: { credentials: { id: credentialId } } });
if (!updatedProject) {
throw new Error('Failed to delete credential from project.');
}
return updatedProject;
}