mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-05 02:26:26 +00:00
Add validation to batch secret endpoint
This commit is contained in:
@@ -44,24 +44,16 @@ 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[] = [];
|
||||||
const deleteSecrets: Types.ObjectId[] = [];
|
const deleteSecrets: Types.ObjectId[] = [];
|
||||||
|
|||||||
@@ -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(
|
||||||
'/',
|
'/',
|
||||||
|
|||||||
Reference in New Issue
Block a user