Add validation to batch secret endpoint

This commit is contained in:
Tuan Dang
2023-02-17 01:12:13 +07:00
parent 65bec23292
commit 625c0785b5
2 changed files with 29 additions and 16 deletions
@@ -44,23 +44,15 @@ export const batchSecrets = async (req: Request, res: Response) => {
}= req.body; }= req.body;
// construct object containing all secrets // construct object containing all secrets
// listed across requests
const listedSecretsObj: { const listedSecretsObj: {
[key: string]: { [key: string]: {
version: number; version: number;
type: string; type: string;
} }
} = (await Secret.find({ } = req.secrets.reduce((obj: any, secret: ISecret) => ({
_id: {
$in: requests
.map((request) => request.secret._id)
.filter((secretId) => secretId !== undefined)
}
}).select('version type')).reduce((obj: any, secret: ISecret) => ({
...obj, ...obj,
[secret._id.toString()]: secret [secret._id.toString()]: secret
}), {}); }), {});
const createSecrets: BatchSecret[] = []; const createSecrets: BatchSecret[] = [];
const updateSecrets: BatchSecret[] = []; const updateSecrets: BatchSecret[] = [];
+28 -7
View File
@@ -6,8 +6,9 @@ import {
requireSecretsAuth, requireSecretsAuth,
validateRequest validateRequest
} from '../../middleware'; } from '../../middleware';
import { query, check, body } from 'express-validator'; import { query, body } from 'express-validator';
import { secretsController } from '../../controllers/v2'; import { secretsController } from '../../controllers/v2';
import { validateSecrets } from '../../helpers/secret';
import { import {
ADMIN, ADMIN,
MEMBER, MEMBER,
@@ -15,14 +16,12 @@ import {
SECRET_SHARED SECRET_SHARED
} from '../../variables'; } from '../../variables';
// TODO: create batch update endpoint import {
BatchSecretRequest
} from '../../types/secret';
router.post( router.post(
'/batch', '/batch',
body('workspaceId').exists().isString().trim(),
body('environment').exists().isString().trim(),
body('requests').exists(), // perform validation for batch requests
validateRequest,
requireAuth({ requireAuth({
acceptedAuthModes: ['jwt', 'apiKey'] acceptedAuthModes: ['jwt', 'apiKey']
}), }),
@@ -30,8 +29,30 @@ router.post(
acceptedRoles: [ADMIN, MEMBER], acceptedRoles: [ADMIN, MEMBER],
location: 'body' location: 'body'
}), }),
body('workspaceId').exists().isString().trim(),
body('environment').exists().isString().trim(),
body('requests')
.exists()
.custom(async (requests: BatchSecretRequest[], { req }) => {
if (Array.isArray(requests)) {
const secretIds = requests
.map((request) => request.secret._id)
.filter((secretId) => secretId !== undefined)
if (secretIds.length > 0) {
const relevantSecrets = await validateSecrets({
userId: req.user._id.toString(),
secretIds
});
req.secrets = relevantSecrets;
}
}
return true;
}),
validateRequest,
secretsController.batchSecrets secretsController.batchSecrets
) );
router.post( router.post(
'/', '/',