From 4a06e3e712181c8925e7914ac917c8ddadc136c4 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 23 Jul 2024 15:53:06 +0530 Subject: [PATCH] feat: testing v2 architecture changes and corrections as needed --- .../db/migrations/20240716105646_secret-v2.ts | 4 +- backend/src/db/schemas/integration-auths.ts | 2 +- .../secret-approval-request-service.ts | 24 ++++-- backend/src/lib/knex/select.ts | 9 ++ backend/src/server/routes/index.ts | 1 - .../integration-auth-service.ts | 13 +-- .../services/integration/integration-dal.ts | 16 +++- .../secret-import/secret-import-service.ts | 5 +- .../secret-v2-bridge/secret-v2-bridge-fns.ts | 17 +--- .../secret-v2-bridge-service.ts | 33 ++++---- backend/src/services/secret/secret-queue.ts | 4 +- .../IntegrationsPage/IntegrationsPage.tsx | 83 ++----------------- .../IntegrationsSection.tsx | 23 +---- 13 files changed, 83 insertions(+), 151 deletions(-) diff --git a/backend/src/db/migrations/20240716105646_secret-v2.ts b/backend/src/db/migrations/20240716105646_secret-v2.ts index e2c0e976f..97ecb5676 100644 --- a/backend/src/db/migrations/20240716105646_secret-v2.ts +++ b/backend/src/db/migrations/20240716105646_secret-v2.ts @@ -128,7 +128,7 @@ export async function up(knex: Knex): Promise { if (!hasEncryptedAccess) t.binary("encryptedAccess"); if (!hasEncryptedAccessId) t.binary("encryptedAccessId"); if (!hasEncryptedRefresh) t.binary("encryptedRefresh"); - if (!hasEncryptedAwsIamAssumRole) t.binary("hasEncryptedAwsIamAssumRole"); + if (!hasEncryptedAwsIamAssumRole) t.binary("encryptedAwsIamAssumRole"); }); } } @@ -160,7 +160,7 @@ export async function down(knex: Knex): Promise { if (hasEncryptedAccess) t.dropColumn("encryptedAccess"); if (hasEncryptedAccessId) t.dropColumn("encryptedAccessId"); if (hasEncryptedRefresh) t.dropColumn("encryptedRefresh"); - if (hasEncryptedAwsIamAssumRole) t.dropColumn("hasEncryptedAwsIamAssumRole"); + if (hasEncryptedAwsIamAssumRole) t.dropColumn("encryptedAwsIamAssumRole"); }); } } diff --git a/backend/src/db/schemas/integration-auths.ts b/backend/src/db/schemas/integration-auths.ts index 709d3b1ef..1c0600e81 100644 --- a/backend/src/db/schemas/integration-auths.ts +++ b/backend/src/db/schemas/integration-auths.ts @@ -38,7 +38,7 @@ export const IntegrationAuthsSchema = z.object({ encryptedAccess: zodBuffer.nullable().optional(), encryptedAccessId: zodBuffer.nullable().optional(), encryptedRefresh: zodBuffer.nullable().optional(), - hasEncryptedAwsIamAssumRole: zodBuffer.nullable().optional() + encryptedAwsIamAssumRole: zodBuffer.nullable().optional() }); export type TIntegrationAuths = z.infer; diff --git a/backend/src/ee/services/secret-approval-request/secret-approval-request-service.ts b/backend/src/ee/services/secret-approval-request/secret-approval-request-service.ts index 6bd9bbd40..d351cfc8e 100644 --- a/backend/src/ee/services/secret-approval-request/secret-approval-request-service.ts +++ b/backend/src/ee/services/secret-approval-request/secret-approval-request-service.ts @@ -12,6 +12,7 @@ import { getConfig } from "@app/lib/config/env"; import { decryptSymmetric128BitHexKeyUTF8 } from "@app/lib/crypto"; import { BadRequestError, UnauthorizedError } from "@app/lib/errors"; import { groupBy, pick, unique } from "@app/lib/fn"; +import { setKnexStringValue } from "@app/lib/knex"; import { alphaNumericNanoId } from "@app/lib/nanoid"; import { EnforcementLevel } from "@app/lib/types"; import { ActorType } from "@app/services/auth/auth-type"; @@ -43,8 +44,7 @@ import { fnSecretBulkDelete as fnSecretV2BridgeBulkDelete, fnSecretBulkInsert as fnSecretV2BridgeBulkInsert, fnSecretBulkUpdate as fnSecretV2BridgeBulkUpdate, - getAllNestedSecretReferences as getAllNestedSecretReferencesV2Bridge, - secretEncryptionHelper + getAllNestedSecretReferences as getAllNestedSecretReferencesV2Bridge } from "@app/services/secret-v2-bridge/secret-v2-bridge-fns"; import { TSecretVersionV2DALFactory } from "@app/services/secret-v2-bridge/secret-version-dal"; import { TSecretVersionV2TagDALFactory } from "@app/services/secret-v2-bridge/secret-version-tag-dal"; @@ -1086,8 +1086,14 @@ export const secretApprovalRequestServiceFactory = ({ ...createdSecrets.map((createdSecret) => ({ op: SecretOperations.Create, version: 1, - encryptedComment: secretEncryptionHelper.encryptValue(secretManagerEncryptor, createdSecret.secretComment), - encryptedValue: secretEncryptionHelper.encryptValue(secretManagerEncryptor, createdSecret.secretValue), + encryptedComment: setKnexStringValue( + createdSecret.secretComment, + (value) => secretManagerEncryptor({ plainText: Buffer.from(value) }).cipherTextBlob + ), + encryptedValue: setKnexStringValue( + createdSecret.secretValue, + (value) => secretManagerEncryptor({ plainText: Buffer.from(value) }).cipherTextBlob + ), skipMultilineEncoding: createdSecret.skipMultilineEncoding, key: createdSecret.secretKey, type: SecretType.Shared @@ -1152,8 +1158,14 @@ export const secretApprovalRequestServiceFactory = ({ return { ...latestSecretVersions[secretId], key: newSecretName || secretKey, - encryptedValue: secretEncryptionHelper.encryptValue(secretManagerEncryptor, secretValue) as Buffer, - encryptedComment: secretEncryptionHelper.encryptValue(secretManagerEncryptor, secretComment) as Buffer, + encryptedComment: setKnexStringValue( + secretComment, + (value) => secretManagerEncryptor({ plainText: Buffer.from(value) }).cipherTextBlob + ), + encryptedValue: setKnexStringValue( + secretValue, + (value) => secretManagerEncryptor({ plainText: Buffer.from(value) }).cipherTextBlob + ), reminderRepeatDays, reminderNote, metadata, diff --git a/backend/src/lib/knex/select.ts b/backend/src/lib/knex/select.ts index d7dfa77f0..feccad4e3 100644 --- a/backend/src/lib/knex/select.ts +++ b/backend/src/lib/knex/select.ts @@ -12,3 +12,12 @@ export const stripUndefinedInWhere = (val: T): Exclude; }; + +// if its undefined its skipped in knex +// if its empty string its set as null +// else pass to the required one +export const setKnexStringValue = (value: string | null | undefined, cb: (arg: string) => T) => { + if (typeof value === "undefined") return; + if (value === "" || value === null) return null; + return cb(value); +}; diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index d8c3926c1..daa679dc4 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -694,7 +694,6 @@ export const registerRoutes = async ( integrationAuthDAL, integrationDAL, permissionService, - projectBotDAL, projectBotService, kmsService }); diff --git a/backend/src/services/integration-auth/integration-auth-service.ts b/backend/src/services/integration-auth/integration-auth-service.ts index bccdbd23f..41bb929c5 100644 --- a/backend/src/services/integration-auth/integration-auth-service.ts +++ b/backend/src/services/integration-auth/integration-auth-service.ts @@ -13,7 +13,6 @@ import { TProjectPermission } from "@app/lib/types"; import { TIntegrationDALFactory } from "../integration/integration-dal"; import { TKmsServiceFactory } from "../kms/kms-service"; import { KmsDataKey } from "../kms/kms-types"; -import { TProjectBotDALFactory } from "../project-bot/project-bot-dal"; import { TProjectBotServiceFactory } from "../project-bot/project-bot-service"; import { getApps } from "./integration-app-list"; import { TIntegrationAuthDALFactory } from "./integration-auth-dal"; @@ -55,7 +54,6 @@ type TIntegrationAuthServiceFactoryDep = { integrationAuthDAL: TIntegrationAuthDALFactory; integrationDAL: Pick; projectBotService: Pick; - projectBotDAL: Pick; permissionService: Pick; kmsService: Pick; }; @@ -66,7 +64,6 @@ export const integrationAuthServiceFactory = ({ permissionService, integrationAuthDAL, integrationDAL, - projectBotDAL, projectBotService, kmsService }: TIntegrationAuthServiceFactoryDep) => { @@ -126,9 +123,6 @@ export const integrationAuthServiceFactory = ({ ); ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Create, ProjectPermissionSub.Integrations); - const bot = await projectBotDAL.findOne({ isActive: true, projectId }); - if (!bot) throw new BadRequestError({ message: "Bot must be enabled for oauth2 code token exchange" }); - const tokenExchange = await exchangeCode({ integration, code, url }); const updateDoc: TIntegrationAuthsInsert = { projectId, @@ -217,9 +211,6 @@ export const integrationAuthServiceFactory = ({ ); ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Create, ProjectPermissionSub.Integrations); - const bot = await projectBotDAL.findOne({ isActive: true, projectId }); - if (!bot) throw new BadRequestError({ message: "Bot must be enabled for oauth2 code token exchange" }); - const updateDoc: TIntegrationAuthsInsert = { projectId, namespace, @@ -278,7 +269,7 @@ export const integrationAuthServiceFactory = ({ const awsAssumeIamRoleArnEncrypted = secretManagerEncryptor({ plainText: Buffer.from(awsAssumeIamRoleArn) }).cipherTextBlob; - updateDoc.hasEncryptedAwsIamAssumRole = awsAssumeIamRoleArnEncrypted; + updateDoc.encryptedAwsIamAssumRole = awsAssumeIamRoleArnEncrypted; } } } else { @@ -338,7 +329,7 @@ export const integrationAuthServiceFactory = ({ if ( integrationAuth.integration === Integrations.AWS_SECRET_MANAGER && (shouldUseSecretV2Bridge - ? integrationAuth.hasEncryptedAwsIamAssumRole + ? integrationAuth.encryptedAwsIamAssumRole : integrationAuth.awsAssumeIamRoleArnCipherText) ) { return { accessToken: "", accessId: "" }; diff --git a/backend/src/services/integration/integration-dal.ts b/backend/src/services/integration/integration-dal.ts index c98c7153a..66a124a29 100644 --- a/backend/src/services/integration/integration-dal.ts +++ b/backend/src/services/integration/integration-dal.ts @@ -123,7 +123,11 @@ export const integrationDALFactory = (db: TDbClient) => { db.ref("keyEncoding").withSchema(TableName.IntegrationAuth).as("keyEncodingAu"), db.ref("awsAssumeIamRoleArnCipherText").withSchema(TableName.IntegrationAuth), db.ref("awsAssumeIamRoleArnIV").withSchema(TableName.IntegrationAuth), - db.ref("awsAssumeIamRoleArnTag").withSchema(TableName.IntegrationAuth) + db.ref("awsAssumeIamRoleArnTag").withSchema(TableName.IntegrationAuth), + db.ref("encryptedRefresh").withSchema(TableName.IntegrationAuth), + db.ref("encryptedAccess").withSchema(TableName.IntegrationAuth), + db.ref("encryptedAccessId").withSchema(TableName.IntegrationAuth), + db.ref("encryptedAwsIamAssumRole").withSchema(TableName.IntegrationAuth) ); return docs.map( ({ @@ -152,6 +156,10 @@ export const integrationDALFactory = (db: TDbClient) => { awsAssumeIamRoleArnIV, awsAssumeIamRoleArnCipherText, awsAssumeIamRoleArnTag, + encryptedAccess, + encryptedRefresh, + encryptedAccessId, + encryptedAwsIamAssumRole, ...el }) => ({ ...el, @@ -183,7 +191,11 @@ export const integrationDALFactory = (db: TDbClient) => { accessExpiresAt, awsAssumeIamRoleArnIV, awsAssumeIamRoleArnCipherText, - awsAssumeIamRoleArnTag + awsAssumeIamRoleArnTag, + encryptedAccess, + encryptedRefresh, + encryptedAccessId, + encryptedAwsIamAssumRole } }) ); diff --git a/backend/src/services/secret-import/secret-import-service.ts b/backend/src/services/secret-import/secret-import-service.ts index d2d189c2a..c69fec6b6 100644 --- a/backend/src/services/secret-import/secret-import-service.ts +++ b/backend/src/services/secret-import/secret-import-service.ts @@ -498,7 +498,7 @@ export const secretImportServiceFactory = ({ const { botKey, shouldUseSecretV2Bridge } = await projectBotService.getBotKey(projectId); if (shouldUseSecretV2Bridge) { - const { encryptor: secretManagerEncryptor } = await kmsService.createCipherPairWithDataKey({ + const { decryptor: secretManagerDecryptor } = await kmsService.createCipherPairWithDataKey({ type: KmsDataKey.SecretManager, projectId }); @@ -507,8 +507,7 @@ export const secretImportServiceFactory = ({ folderDAL, secretDAL: secretV2BridgeDAL, secretImportDAL, - decryptor: (value) => - value ? secretManagerEncryptor({ plainText: value }).cipherTextBlob.toString() : undefined + decryptor: (value) => (value ? secretManagerDecryptor({ cipherTextBlob: value }).toString() : undefined) }); return importedSecrets; } diff --git a/backend/src/services/secret-v2-bridge/secret-v2-bridge-fns.ts b/backend/src/services/secret-v2-bridge/secret-v2-bridge-fns.ts index a7717eed3..cdd1c8f6f 100644 --- a/backend/src/services/secret-v2-bridge/secret-v2-bridge-fns.ts +++ b/backend/src/services/secret-v2-bridge/secret-v2-bridge-fns.ts @@ -4,7 +4,6 @@ import { TableName, TSecretFolders, TSecretsV2 } from "@app/db/schemas"; import { groupBy } from "@app/lib/fn"; import { logger } from "@app/lib/logger"; -import { TKmsServiceFactory } from "../kms/kms-service"; import { TProjectEnvDALFactory } from "../project-env/project-env-dal"; import { TSecretFolderDALFactory } from "../secret-folder/secret-folder-dal"; import { TSecretV2BridgeDALFactory } from "./secret-v2-bridge-dal"; @@ -204,7 +203,10 @@ export const fnSecretBulkUpdate = async ({ tags !== undefined ? { tags, secretId: newSecrets[i].id } : [] ); if (secsUpdatedTag.length) { - await secretTagDAL.deleteTagsToSecretV2({ $in: { id: secsUpdatedTag.map(({ secretId }) => secretId) } }, tx); + await secretTagDAL.deleteTagsToSecretV2( + { $in: { secrets_v2Id: secsUpdatedTag.map(({ secretId }) => secretId) } }, + tx + ); const newSecretTags = secsUpdatedTag.flatMap(({ tags: secretTags = [], secretId }) => secretTags.map((tag) => ({ [`${TableName.SecretTag}Id` as const]: tag, @@ -552,14 +554,3 @@ export const reshapeBridgeSecret = ( createdAt: secret.createdAt, updatedAt: secret.updatedAt }); - -export const secretEncryptionHelper = { - encryptValue: (encryptor: Awaited>, value?: string) => { - if (typeof value === "undefined") return; - return encryptor({ plainText: Buffer.from(value) }).cipherTextBlob; - }, - decryptValue: (decryptor: Awaited>, value?: Buffer | null) => { - if (!value) return; - return decryptor({ cipherTextBlob: value }).toString(); - } -}; diff --git a/backend/src/services/secret-v2-bridge/secret-v2-bridge-service.ts b/backend/src/services/secret-v2-bridge/secret-v2-bridge-service.ts index 726314a45..dbf5be00a 100644 --- a/backend/src/services/secret-v2-bridge/secret-v2-bridge-service.ts +++ b/backend/src/services/secret-v2-bridge/secret-v2-bridge-service.ts @@ -9,6 +9,7 @@ import { TSecretApprovalRequestSecretDALFactory } from "@app/ee/services/secret- import { TSecretSnapshotServiceFactory } from "@app/ee/services/secret-snapshot/secret-snapshot-service"; import { BadRequestError, NotFoundError } from "@app/lib/errors"; import { groupBy } from "@app/lib/fn"; +import { setKnexStringValue } from "@app/lib/knex"; import { logger } from "@app/lib/logger"; import { alphaNumericNanoId } from "@app/lib/nanoid"; @@ -160,9 +161,10 @@ export const secretV2BridgeServiceFactory = ({ version: 1, type, reminderRepeatDays: el.secretReminderRepeatDays, - encryptedComment: el.secretComment - ? secretManagerEncryptor({ plainText: Buffer.from(el.secretComment) }).cipherTextBlob - : undefined, + encryptedComment: setKnexStringValue( + el.secretComment, + (value) => secretManagerEncryptor({ plainText: Buffer.from(value) }).cipherTextBlob + ), encryptedValue: el.secretValue ? secretManagerEncryptor({ plainText: Buffer.from(el.secretValue) }).cipherTextBlob : undefined, @@ -265,7 +267,7 @@ export const secretV2BridgeServiceFactory = ({ if (inputSecret.newSecretName) { const doesNewNameSecretExist = await secretDAL.findOne({ - key: inputSecret.secretName, + key: inputSecret.newSecretName, type: SecretType.Shared, folderId }); @@ -299,9 +301,10 @@ export const secretV2BridgeServiceFactory = ({ filter: { id: secretId }, data: { reminderRepeatDays: inputSecret.secretReminderRepeatDays, - encryptedComment: inputSecret.secretComment - ? secretManagerEncryptor({ plainText: Buffer.from(inputSecret.secretComment) }).cipherTextBlob - : undefined, + encryptedComment: setKnexStringValue( + inputSecret.secretComment, + (value) => secretManagerEncryptor({ plainText: Buffer.from(value) }).cipherTextBlob + ), reminderNote: inputSecret.secretReminderNote, skipMultilineEncoding: inputSecret.skipMultilineEncoding, key: inputSecret.newSecretName || secretName, @@ -732,9 +735,10 @@ export const secretV2BridgeServiceFactory = ({ fnSecretBulkInsert({ inputSecrets: inputSecrets.map((el) => ({ version: 1, - encryptedComment: el.secretComment - ? secretManagerEncryptor({ plainText: Buffer.from(el.secretComment) }).cipherTextBlob - : undefined, + encryptedComment: setKnexStringValue( + el.secretComment, + (value) => secretManagerEncryptor({ plainText: Buffer.from(value) }).cipherTextBlob + ), encryptedValue: el.secretValue ? secretManagerEncryptor({ plainText: Buffer.from(el.secretValue) }).cipherTextBlob : undefined, @@ -821,7 +825,7 @@ export const secretV2BridgeServiceFactory = ({ const secrets = await secretDAL.findBySecretKeys( folderId, secretsWithNewName.map((el) => ({ - key: el.secretKey, + key: el.newSecretName as string, type: SecretType.Shared })) ); @@ -856,9 +860,10 @@ export const secretV2BridgeServiceFactory = ({ filter: { id: originalSecret.id, type: SecretType.Shared }, data: { reminderRepeatDays: el.secretReminderRepeatDays, - encryptedComment: el.secretComment - ? secretManagerEncryptor({ plainText: Buffer.from(el.secretComment) }).cipherTextBlob - : undefined, + encryptedComment: setKnexStringValue( + el.secretComment, + (value) => secretManagerEncryptor({ plainText: Buffer.from(value) }).cipherTextBlob + ), reminderNote: el.secretReminderNote, skipMultilineEncoding: el.skipMultilineEncoding, key: el.newSecretName || el.secretKey, diff --git a/backend/src/services/secret/secret-queue.ts b/backend/src/services/secret/secret-queue.ts index d5af6d137..01bbc8c36 100644 --- a/backend/src/services/secret/secret-queue.ts +++ b/backend/src/services/secret/secret-queue.ts @@ -635,9 +635,9 @@ export const secretQueueFactory = ({ ); let awsAssumeRoleArn = null; if (shouldUseSecretV2Bridge) { - if (integrationAuth.awsAssumeIamRoleArnCipherText) { + if (integrationAuth.encryptedAwsIamAssumRole) { awsAssumeRoleArn = secretManagerDecryptor({ - cipherTextBlob: Buffer.from(integrationAuth.awsAssumeIamRoleArnCipherText) + cipherTextBlob: Buffer.from(integrationAuth.encryptedAwsIamAssumRole) }).toString(); } } else if ( diff --git a/frontend/src/views/IntegrationsPage/IntegrationsPage.tsx b/frontend/src/views/IntegrationsPage/IntegrationsPage.tsx index 73c443ca4..5601a7f68 100644 --- a/frontend/src/views/IntegrationsPage/IntegrationsPage.tsx +++ b/frontend/src/views/IntegrationsPage/IntegrationsPage.tsx @@ -1,50 +1,39 @@ import { useCallback, useEffect } from "react"; -import { useTranslation } from "react-i18next"; import { createNotification } from "@app/components/notifications"; -import { Button, Modal, ModalContent } from "@app/components/v2"; import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; import { withProjectPermission } from "@app/hoc"; -import { usePopUp } from "@app/hooks"; import { useDeleteIntegration, useDeleteIntegrationAuths, useGetCloudIntegrations, - useGetUserWsKey, useGetWorkspaceAuthorizations, - useGetWorkspaceBot, - useGetWorkspaceIntegrations, - useUpdateBotActiveStatus + useGetWorkspaceIntegrations } from "@app/hooks/api"; import { IntegrationAuth } from "@app/hooks/api/types"; -import { ProjectVersion } from "@app/hooks/api/workspace/types"; import { CloudIntegrationSection } from "./components/CloudIntegrationSection"; import { FrameworkIntegrationSection } from "./components/FrameworkIntegrationSection"; import { InfrastructureIntegrationSection } from "./components/InfrastructureIntegrationSection/InfrastructureIntegrationSection"; import { IntegrationsSection } from "./components/IntegrationsSection"; -import { generateBotKey, redirectForProviderAuth } from "./IntegrationPage.utils"; +import { redirectForProviderAuth } from "./IntegrationPage.utils"; type Props = { frameworkIntegrations: Array<{ name: string; slug: string; image: string; docsLink: string }>; - infrastructureIntegrations: Array<{ name: string; slug: string; image: string; docsLink: string }>; + infrastructureIntegrations: Array<{ + name: string; + slug: string; + image: string; + docsLink: string; + }>; }; export const IntegrationsPage = withProjectPermission( ({ frameworkIntegrations, infrastructureIntegrations }: Props) => { - const { t } = useTranslation(); - - const { currentWorkspace } = useWorkspace(); const workspaceId = currentWorkspace?.id || ""; const environments = currentWorkspace?.environments || []; - const { data: latestWsKey } = useGetUserWsKey(workspaceId); - - const { popUp, handlePopUpOpen, handlePopUpToggle, handlePopUpClose } = usePopUp([ - "activeBot" - ] as const); - const { data: cloudIntegrations, isLoading: isCloudIntegrationsLoading } = useGetCloudIntegrations(); @@ -70,11 +59,6 @@ export const IntegrationsPage = withProjectPermission( isFetching: isIntegrationFetching } = useGetWorkspaceIntegrations(workspaceId); - const { data: bot } = useGetWorkspaceBot(workspaceId); - - // mutation - const { mutateAsync: updateBotActiveStatus, mutate: updateBotActiveStatusSync } = - useUpdateBotActiveStatus(); const { mutateAsync: deleteIntegration } = useDeleteIntegration(); const { mutateAsync: deleteIntegrationAuths, @@ -95,12 +79,6 @@ export const IntegrationsPage = withProjectPermission( isIntegrationsAuthorizedEmpty && isIntegrationsEmpty ) { - if (bot?.id && currentWorkspace?.version === ProjectVersion.V1) - updateBotActiveStatusSync({ - isActive: false, - botId: bot.id, - workspaceId - }); resetDeleteIntegrationAuths(); } }, [ @@ -116,16 +94,6 @@ export const IntegrationsPage = withProjectPermission( if (!selectedCloudIntegration) return; try { - if (bot && !bot.isActive && currentWorkspace?.version === ProjectVersion.V1) { - const botKey = generateBotKey(bot.publicKey, latestWsKey!); - await updateBotActiveStatus({ - workspaceId, - botKey, - isActive: true, - botId: bot.id - }); - } - redirectForProviderAuth(selectedCloudIntegration); } catch (error) { console.error(error); @@ -135,19 +103,9 @@ export const IntegrationsPage = withProjectPermission( // function to strat integration for a provider // confirmation to user passing the bot key for provider to get secret access const handleProviderIntegrationStart = (provider: string) => { - if (!bot?.isActive) { - handlePopUpOpen("activeBot", { provider }); - return; - } handleProviderIntegration(provider); }; - const handleUserAcceptBotCondition = () => { - const { provider } = popUp.activeBot?.data as { provider: string }; - handleProviderIntegration(provider); - handlePopUpClose("activeBot"); - }; - const handleIntegrationDelete = async (integrationId: string, cb: () => void) => { try { await deleteIntegration({ id: integrationId, workspaceId }); @@ -195,7 +153,6 @@ export const IntegrationsPage = withProjectPermission( integrations={integrations} environments={environments} onIntegrationDelete={({ id }, cb) => handleIntegrationDelete(id, cb)} - isBotActive={bot?.isActive} workspaceId={workspaceId} /> - handlePopUpToggle("activeBot", isOpen)} - > - - - - - } - > - {t("integrations.why-infisical-needs-access")} - - diff --git a/frontend/src/views/IntegrationsPage/components/IntegrationsSection/IntegrationsSection.tsx b/frontend/src/views/IntegrationsPage/components/IntegrationsSection/IntegrationsSection.tsx index 1b6473bfe..c5fa0704b 100644 --- a/frontend/src/views/IntegrationsPage/components/IntegrationsSection/IntegrationsSection.tsx +++ b/frontend/src/views/IntegrationsPage/components/IntegrationsSection/IntegrationsSection.tsx @@ -1,4 +1,3 @@ -import Link from "next/link"; import { faCalendarCheck } from "@fortawesome/free-regular-svg-icons"; import { faArrowRight, faRefresh, faWarning, faXmark } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; @@ -7,8 +6,6 @@ import { integrationSlugNameMapping } from "public/data/frequentConstants"; import { ProjectPermissionCan } from "@app/components/permissions"; import { - Alert, - AlertDescription, Button, DeleteActionModal, EmptyState, @@ -29,7 +26,6 @@ type Props = { integrations?: TIntegration[]; isLoading?: boolean; onIntegrationDelete: (integration: TIntegration, cb: () => void) => void; - isBotActive: boolean | undefined; workspaceId: string; }; @@ -38,7 +34,6 @@ export const IntegrationsSection = ({ environments = [], isLoading, onIntegrationDelete, - isBotActive, workspaceId }: Props) => { const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([ @@ -59,21 +54,7 @@ export const IntegrationsSection = ({ )} - {!isBotActive && Boolean(integrations.length) && ( -
- - - All the active integrations will be disabled. Disable End-to-End Encryption in{" "} - - project settings - - to re-enable it. - - -
- )} - - {!isLoading && !integrations.length && isBotActive && ( + {!isLoading && !integrations.length && (
)} - {!isLoading && isBotActive && ( + {!isLoading && (
{integrations?.map((integration) => (