From 6047c4489b2ef852b92e886a7727108e260fcded Mon Sep 17 00:00:00 2001 From: Scott Wilson Date: Thu, 6 Feb 2025 17:14:22 -0800 Subject: [PATCH] improvement: increase max error message size for secret syncs and handle messages that exceed limit --- ...43_secret-syncs-increase-message-length.ts | 31 +++++++++++++++++++ .../services/secret-sync/secret-sync-fns.ts | 20 ++++++++---- .../SecretSyncTable/SecretSyncRow.tsx | 4 ++- 3 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 backend/src/db/migrations/20250207002643_secret-syncs-increase-message-length.ts diff --git a/backend/src/db/migrations/20250207002643_secret-syncs-increase-message-length.ts b/backend/src/db/migrations/20250207002643_secret-syncs-increase-message-length.ts new file mode 100644 index 000000000..d550810aa --- /dev/null +++ b/backend/src/db/migrations/20250207002643_secret-syncs-increase-message-length.ts @@ -0,0 +1,31 @@ +import { Knex } from "knex"; + +import { TableName } from "@app/db/schemas"; + +export async function up(knex: Knex): Promise { + if (await knex.schema.hasTable(TableName.SecretSync)) { + const hasLastSyncMessage = await knex.schema.hasColumn(TableName.SecretSync, "lastSyncMessage"); + const hasLastImportMessage = await knex.schema.hasColumn(TableName.SecretSync, "lastImportMessage"); + const hasLastRemoveMessage = await knex.schema.hasColumn(TableName.SecretSync, "lastRemoveMessage"); + + await knex.schema.alterTable(TableName.SecretSync, (t) => { + if (hasLastSyncMessage) t.string("lastSyncMessage", 1024).alter(); + if (hasLastImportMessage) t.string("lastImportMessage", 1024).alter(); + if (hasLastRemoveMessage) t.string("lastRemoveMessage", 1024).alter(); + }); + } +} + +export async function down(knex: Knex): Promise { + if (await knex.schema.hasTable(TableName.SecretSync)) { + const hasLastSyncMessage = await knex.schema.hasColumn(TableName.SecretSync, "lastSyncMessage"); + const hasLastImportMessage = await knex.schema.hasColumn(TableName.SecretSync, "lastImportMessage"); + const hasLastRemoveMessage = await knex.schema.hasColumn(TableName.SecretSync, "lastRemoveMessage"); + + await knex.schema.alterTable(TableName.SecretSync, (t) => { + if (hasLastSyncMessage) t.string("lastSyncMessage").alter(); + if (hasLastImportMessage) t.string("lastImportMessage").alter(); + if (hasLastRemoveMessage) t.string("lastRemoveMessage").alter(); + }); + } +} diff --git a/backend/src/services/secret-sync/secret-sync-fns.ts b/backend/src/services/secret-sync/secret-sync-fns.ts index dbf916995..184be9507 100644 --- a/backend/src/services/secret-sync/secret-sync-fns.ts +++ b/backend/src/services/secret-sync/secret-sync-fns.ts @@ -134,17 +134,25 @@ export const SecretSyncFns = { } }; +const MAX_MESSAGE_LENGTH = 1024; + export const parseSyncErrorMessage = (err: unknown): string => { + let errorMessage: string; + if (err instanceof SecretSyncError) { - return JSON.stringify({ + errorMessage = JSON.stringify({ secretKey: err.secretKey, error: err.message || parseSyncErrorMessage(err.error) }); + } else if (err instanceof AxiosError) { + errorMessage = err?.response?.data + ? JSON.stringify(err?.response?.data) + : err?.message ?? "An unknown error occurred."; + } else { + errorMessage = (err as Error)?.message || "An unknown error occurred."; } - if (err instanceof AxiosError) { - return err?.response?.data ? JSON.stringify(err?.response?.data) : err?.message ?? "An unknown error occurred."; - } - - return (err as Error)?.message || "An unknown error occurred."; + return errorMessage.length <= MAX_MESSAGE_LENGTH + ? errorMessage + : `${errorMessage.substring(0, MAX_MESSAGE_LENGTH - 3)}...`; }; diff --git a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncRow.tsx b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncRow.tsx index 3ef92d09a..02fc12027 100644 --- a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncRow.tsx +++ b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncRow.tsx @@ -208,7 +208,9 @@ export const SecretSyncRow = ({
Failure Reason
-
{failureMessage}
+
+ {failureMessage} +
)}