From f37fc9c59d13b26af7c519652bc4bbd12166f802 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Sun, 25 Dec 2022 14:30:02 -0500 Subject: [PATCH] Small modifications to secret versioning/snapshot --- backend/src/controllers/secretController.ts | 2 +- .../src/controllers/workspaceController.ts | 35 ++++++++++++++++++- backend/src/routes/workspace.ts | 16 ++++++++- 3 files changed, 50 insertions(+), 3 deletions(-) diff --git a/backend/src/controllers/secretController.ts b/backend/src/controllers/secretController.ts index 2ee34e9598..73f7d06061 100644 --- a/backend/src/controllers/secretController.ts +++ b/backend/src/controllers/secretController.ts @@ -244,7 +244,7 @@ export const getSecretVersions = async (req: Request, res: Response) => { .limit(limit); } catch (err) { - Sentry.setUser({ email: req.serviceToken.user.email }); + Sentry.setUser({ email: req.user.email }); Sentry.captureException(err); return res.status(400).send({ message: 'Failed to get secret versions' diff --git a/backend/src/controllers/workspaceController.ts b/backend/src/controllers/workspaceController.ts index a402834d78..7f901d0b2c 100644 --- a/backend/src/controllers/workspaceController.ts +++ b/backend/src/controllers/workspaceController.ts @@ -7,7 +7,8 @@ import { Integration, IntegrationAuth, IUser, - ServiceToken + ServiceToken, + SecretSnapshot } from '../models'; import { createWorkspace as create, @@ -334,4 +335,36 @@ export const getWorkspaceServiceTokens = async ( return res.status(200).send({ serviceTokens }); +} + +/** + * Return secret snapshots for workspace with id [workspaceId] + * @param req + * @param res + */ + export const getWorkspaceSecretSnapshots = async (req: Request, res: Response) => { + let secretSnapshots; + try { + const { workspaceId } = req.params; + + const offset: number = parseInt(req.query.offset as string); + const limit: number = parseInt(req.query.limit as string); + + secretSnapshots = await SecretSnapshot.find({ + workspace: workspaceId + }) + .skip(offset) + .limit(limit); + + } catch (err) { + Sentry.setUser({ email: req.user.email }); + Sentry.captureException(err); + return res.status(400).send({ + message: 'Failed to get secret snapshots' + }); + } + + return res.status(200).send({ + secretSnapshots + }); } \ No newline at end of file diff --git a/backend/src/routes/workspace.ts b/backend/src/routes/workspace.ts index 1d20c102ac..c5ffd739ed 100644 --- a/backend/src/routes/workspace.ts +++ b/backend/src/routes/workspace.ts @@ -1,6 +1,6 @@ import express from 'express'; const router = express.Router(); -import { body, param } from 'express-validator'; +import { body, param, query } from 'express-validator'; import { requireAuth, requireWorkspaceAuth, @@ -130,4 +130,18 @@ router.get( workspaceController.getWorkspaceServiceTokens ); +router.get( + '/:workspaceId/secret-snapshots', + requireAuth, + requireWorkspaceAuth({ + acceptedRoles: [ADMIN, MEMBER], + acceptedStatuses: [GRANTED] + }), + param('workspaceId').exists().trim(), + query('offset').exists().isInt(), + query('limit').exists().isInt(), + validateRequest, + workspaceController.getWorkspaceSecretSnapshots +); + export default router;