From 8b381b2b80487b59eb8f11b107b598b1061ad35c Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Wed, 23 Aug 2023 16:30:42 +0700 Subject: [PATCH 1/3] Checkpoint add metadata to secret and secret version data structure --- backend/src/controllers/v2/secretsController.ts | 10 +++++++++- backend/src/ee/models/secretVersion.ts | 6 ++++++ backend/src/helpers/secrets.ts | 10 ++++++---- backend/src/models/secret.ts | 6 ++++++ 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/backend/src/controllers/v2/secretsController.ts b/backend/src/controllers/v2/secretsController.ts index c87b3756a..c513415a6 100644 --- a/backend/src/controllers/v2/secretsController.ts +++ b/backend/src/controllers/v2/secretsController.ts @@ -739,6 +739,7 @@ export const createSecrets = async (req: Request, res: Response) => { * @returns */ export const getSecrets = async (req: Request, res: Response) => { + console.log("getSecrets"); /* #swagger.summary = 'Read secrets' #swagger.description = 'Read secrets from a project and environment' @@ -966,8 +967,13 @@ export const getSecrets = async (req: Request, res: Response) => { ); const postHogClient = await TelemetryService.getPostHogClient(); + + console.log("the fetched secrets: ", secrets); + console.log("postHogClient: ", postHogClient); + if (postHogClient) { - postHogClient.capture({ + console.log("should capture!"); + const test = postHogClient.capture({ event: "secrets pulled", distinctId: await TelemetryService.getDistinctId({ authData: req.authData @@ -981,6 +987,8 @@ export const getSecrets = async (req: Request, res: Response) => { userAgent: req.headers?.["user-agent"] } }); + + console.log("test: ", test); } return res.status(200).send({ diff --git a/backend/src/ee/models/secretVersion.ts b/backend/src/ee/models/secretVersion.ts index d63f05cf7..8fec54515 100644 --- a/backend/src/ee/models/secretVersion.ts +++ b/backend/src/ee/models/secretVersion.ts @@ -28,6 +28,9 @@ export interface ISecretVersion { createdAt: string; folder?: string; tags?: string[]; + metadata?: { + [key: string]: string; + } } const secretVersionSchema = new Schema( @@ -118,6 +121,9 @@ const secretVersionSchema = new Schema( type: [Schema.Types.ObjectId], default: [], }, + metadata: { + type: Schema.Types.Mixed + } }, { timestamps: true, diff --git a/backend/src/helpers/secrets.ts b/backend/src/helpers/secrets.ts index d4544d32b..dc91560fb 100644 --- a/backend/src/helpers/secrets.ts +++ b/backend/src/helpers/secrets.ts @@ -393,9 +393,10 @@ export const createSecretHelper = async ({ secretCommentTag, folder: folderId, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8 + keyEncoding: ENCODING_SCHEME_UTF8, + metadata }).save(); - + const secretVersion = new SecretVersion({ secret: secret._id, version: secret.version, @@ -413,9 +414,10 @@ export const createSecretHelper = async ({ secretValueIV, secretValueTag, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8 + keyEncoding: ENCODING_SCHEME_UTF8, + metadata }); - + // (EE) add version for new secret await EESecretService.addSecretVersions({ secretVersions: [secretVersion] diff --git a/backend/src/models/secret.ts b/backend/src/models/secret.ts index 34a4d7501..4ef3de456 100644 --- a/backend/src/models/secret.ts +++ b/backend/src/models/secret.ts @@ -31,6 +31,9 @@ export interface ISecret { keyEncoding: "utf8" | "base64"; tags?: string[]; folder?: string; + metadata?: { + [key: string]: string; + } } const secretSchema = new Schema( @@ -131,6 +134,9 @@ const secretSchema = new Schema( type: String, default: "root", }, + metadata: { + type: Schema.Types.Mixed + } }, { timestamps: true, From c342b22d4915d01b624b0c01566bcb7f8480c3aa Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Wed, 23 Aug 2023 17:37:01 +0700 Subject: [PATCH 2/3] Fix telemetry issue for signup secrets --- backend/src/controllers/v2/secretsController.ts | 12 ++++-------- backend/src/helpers/secrets.ts | 6 ++++-- frontend/src/hooks/api/secrets/queries.tsx | 3 ++- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/backend/src/controllers/v2/secretsController.ts b/backend/src/controllers/v2/secretsController.ts index c513415a6..473512390 100644 --- a/backend/src/controllers/v2/secretsController.ts +++ b/backend/src/controllers/v2/secretsController.ts @@ -234,6 +234,9 @@ export const batchSecrets = async (req: Request, res: Response) => { $inc: { version: 1 }, + $unset: { + 'metadata.source': true as true + }, ...u, _id: new Types.ObjectId(u._id) } @@ -739,7 +742,6 @@ export const createSecrets = async (req: Request, res: Response) => { * @returns */ export const getSecrets = async (req: Request, res: Response) => { - console.log("getSecrets"); /* #swagger.summary = 'Read secrets' #swagger.description = 'Read secrets from a project and environment' @@ -968,12 +970,8 @@ export const getSecrets = async (req: Request, res: Response) => { const postHogClient = await TelemetryService.getPostHogClient(); - console.log("the fetched secrets: ", secrets); - console.log("postHogClient: ", postHogClient); - if (postHogClient) { - console.log("should capture!"); - const test = postHogClient.capture({ + postHogClient.capture({ event: "secrets pulled", distinctId: await TelemetryService.getDistinctId({ authData: req.authData @@ -987,8 +985,6 @@ export const getSecrets = async (req: Request, res: Response) => { userAgent: req.headers?.["user-agent"] } }); - - console.log("test: ", test); } return res.status(200).send({ diff --git a/backend/src/helpers/secrets.ts b/backend/src/helpers/secrets.ts index dc91560fb..08a748baf 100644 --- a/backend/src/helpers/secrets.ts +++ b/backend/src/helpers/secrets.ts @@ -568,15 +568,17 @@ export const getSecretsHelper = async ({ ); const postHogClient = await TelemetryService.getPostHogClient(); + + const numberOfSignupSecrets = (secrets.filter((secret) => secret?.metadata?.source === "signup")).length; - if (postHogClient) { + if (postHogClient && (secrets.length - numberOfSignupSecrets > 0)) { postHogClient.capture({ event: "secrets pulled", distinctId: await TelemetryService.getDistinctId({ authData }), properties: { - numberOfSecrets: secrets.length, + numberOfSecrets: secrets.length - numberOfSignupSecrets, environment, workspaceId, folderId, diff --git a/frontend/src/hooks/api/secrets/queries.tsx b/frontend/src/hooks/api/secrets/queries.tsx index e1c3e10bf..bd9fee048 100644 --- a/frontend/src/hooks/api/secrets/queries.tsx +++ b/frontend/src/hooks/api/secrets/queries.tsx @@ -38,7 +38,7 @@ const fetchProjectEncryptedSecrets = async ( folderId?: string, secretPath?: string ) => { - const { data } = await apiRequest.get<{ secrets: EncryptedSecret[] }>("/api/v2/secrets", { + const { data } = await apiRequest.get<{ secrets: EncryptedSecret[] }>("/api/v3/secrets", { params: { environment: env, workspaceId, @@ -46,6 +46,7 @@ const fetchProjectEncryptedSecrets = async ( secretPath } }); + return data.secrets; }; From 2d7c7f075ed3b9579fb8c9ad870146c0cd7089c2 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Wed, 23 Aug 2023 17:47:25 +0700 Subject: [PATCH 3/3] Remove metadata from SecretVersion schema --- backend/src/ee/models/secretVersion.ts | 6 ------ backend/src/helpers/secrets.ts | 3 +-- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/backend/src/ee/models/secretVersion.ts b/backend/src/ee/models/secretVersion.ts index 8fec54515..84174ac87 100644 --- a/backend/src/ee/models/secretVersion.ts +++ b/backend/src/ee/models/secretVersion.ts @@ -28,9 +28,6 @@ export interface ISecretVersion { createdAt: string; folder?: string; tags?: string[]; - metadata?: { - [key: string]: string; - } } const secretVersionSchema = new Schema( @@ -120,9 +117,6 @@ const secretVersionSchema = new Schema( ref: "Tag", type: [Schema.Types.ObjectId], default: [], - }, - metadata: { - type: Schema.Types.Mixed } }, { diff --git a/backend/src/helpers/secrets.ts b/backend/src/helpers/secrets.ts index 08a748baf..2947d2a8e 100644 --- a/backend/src/helpers/secrets.ts +++ b/backend/src/helpers/secrets.ts @@ -414,8 +414,7 @@ export const createSecretHelper = async ({ secretValueIV, secretValueTag, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, - metadata + keyEncoding: ENCODING_SCHEME_UTF8 }); // (EE) add version for new secret