UNPKG

streamby-core

Version:

StreamBy middleware framework for media storage management

71 lines (70 loc) 3.18 kB
"use strict"; 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; }