streamby-core
Version:
StreamBy middleware framework for media storage management
80 lines (79 loc) • 3.97 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.credentialRouter = credentialRouter;
const express_1 = require("express");
const manager_1 = require("../../models/manager");
const auth_1 = require("../../utils/auth");
const credential_1 = require("../../services/credential");
function credentialRouter(config) {
const router = (0, express_1.Router)();
const Project = (0, manager_1.getModel)('projects');
// Add a new credential to a project
router.post('/projects/:id/credentials', async (req, res) => {
try {
const auth = req.auth;
if (auth.role !== 'admin' && auth.role !== 'editor') {
return res.status(403).json({ message: 'Permission denied' });
}
const projectId = req.params.id;
const { id, key, value } = req.body;
if (!key || !value) {
return res.status(400).json({ message: 'Missing credential key or value' });
}
const project = await Project.findOne({ _id: projectId });
if (!project || !(0, auth_1.isProjectMember)(project, auth.userId)) {
return res.status(403).json({ message: 'Unauthorized project access' });
}
const updatedProject = await (0, credential_1.addCredential)(config, projectId, { id, key, value });
res.status(201).json({ message: 'Credential added successfully', project: updatedProject });
}
catch (err) {
res.status(500).json({ message: 'Failed to add credential', details: err.message });
}
});
// Update an existing credential in a project
router.patch('/projects/:id/credentials/:credentialId', async (req, res) => {
try {
const auth = req.auth;
if (auth.role !== 'admin' && auth.role !== 'editor') {
return res.status(403).json({ message: 'Permission denied' });
}
const projectId = req.params.id;
const credentialId = req.params.credentialId;
const { key, value } = req.body;
if (!key && !value) {
return res.status(400).json({ message: 'No update fields provided' });
}
const project = await Project.findOne({ _id: projectId });
if (!project || !(0, auth_1.isProjectMember)(project, auth.userId)) {
return res.status(403).json({ message: 'Unauthorized project access' });
}
const updatedProject = await (0, credential_1.updateCredential)(config, projectId, credentialId, { key, value });
res.status(200).json({ message: 'Credential updated successfully', project: updatedProject });
}
catch (err) {
res.status(500).json({ message: 'Failed to update credential', details: err.message });
}
});
// Delete a credential from a project
router.delete('/projects/:id/credentials/:credentialId', async (req, res) => {
try {
const auth = req.auth;
if (auth.role !== 'admin' && auth.role !== 'editor') {
return res.status(403).json({ message: 'Permission denied' });
}
const projectId = req.params.id;
const credentialId = req.params.credentialId;
const project = await Project.findOne({ _id: projectId });
if (!project || !(0, auth_1.isProjectMember)(project, auth.userId)) {
return res.status(403).json({ message: 'Unauthorized project access' });
}
const updatedProject = await (0, credential_1.deleteCredential)(config, projectId, credentialId);
res.status(200).json({ message: 'Credential deleted successfully', project: updatedProject });
}
catch (err) {
res.status(500).json({ message: 'Failed to delete credential', details: err.message });
}
});
return router;
}