From 31af4a460283dcf5389c64319eaaa3cd29bb6f67 Mon Sep 17 00:00:00 2001 From: Sheen Capadngan Date: Wed, 17 Jul 2024 00:40:54 +0800 Subject: [PATCH] misc: minor UI updates --- .../external-kms/external-kms-service.ts | 4 +- .../OrgEncryptionTab/AwsKmsForm.tsx | 10 +-- .../OrgEncryptionTab/OrgEncryptionTab.tsx | 9 ++- .../ProjectSettingsPage.tsx | 12 +++- .../EncryptionTab/EncryptionTab.tsx | 65 +++++++++++++++++++ .../components/EncryptionTab/index.tsx | 1 + 6 files changed, 90 insertions(+), 11 deletions(-) create mode 100644 frontend/src/views/Settings/ProjectSettingsPage/components/EncryptionTab/EncryptionTab.tsx create mode 100644 frontend/src/views/Settings/ProjectSettingsPage/components/EncryptionTab/index.tsx diff --git a/backend/src/ee/services/external-kms/external-kms-service.ts b/backend/src/ee/services/external-kms/external-kms-service.ts index 36e995b9e..66712f715 100644 --- a/backend/src/ee/services/external-kms/external-kms-service.ts +++ b/backend/src/ee/services/external-kms/external-kms-service.ts @@ -62,7 +62,9 @@ export const externalKmsServiceFactory = ({ case KmsProviders.Aws: { const externalKms = await AwsKmsProviderFactory({ inputs: provider.inputs }); - await externalKms.validateConnection(); + if (provider.inputs.kmsKeyId) { + await externalKms.validateConnection(); + } // if missing kms key this generate a new kms key id and returns new provider input const newProviderInput = await externalKms.generateInputKmsKey(); sanitizedProviderInput = JSON.stringify(newProviderInput); diff --git a/frontend/src/views/Settings/OrgSettingsPage/components/OrgEncryptionTab/AwsKmsForm.tsx b/frontend/src/views/Settings/OrgSettingsPage/components/OrgEncryptionTab/AwsKmsForm.tsx index 45f2f58a5..fe7acb8e8 100644 --- a/frontend/src/views/Settings/OrgSettingsPage/components/OrgEncryptionTab/AwsKmsForm.tsx +++ b/frontend/src/views/Settings/OrgSettingsPage/components/OrgEncryptionTab/AwsKmsForm.tsx @@ -52,7 +52,7 @@ const formSchema = z.object({ .trim() .min(1) .refine((v) => slugify(v) === v, { - message: "Slug must be a valid slug" + message: "Alias must be a valid slug" }), description: z.string().trim().min(1).default(""), credential: z.discriminatedUnion("type", [ @@ -177,7 +177,7 @@ export const AwsKmsForm = ({ onCompleted, onCancel, kms }: Props) => { control={control} name="slug" render={({ field, fieldState: { error } }) => ( - + )} @@ -293,7 +293,7 @@ export const AwsKmsForm = ({ onCompleted, onCancel, kms }: Props) => { > {AWS_REGIONS.map((awsRegion) => ( - {awsRegion.name} + {awsRegion.name} ({awsRegion.slug}) ))} @@ -304,14 +304,14 @@ export const AwsKmsForm = ({ onCompleted, onCancel, kms }: Props) => { control={control} name="kmsKeyId" render={({ field, fieldState: { error } }) => ( - + )} />
@@ -38,6 +41,9 @@ export const ProjectSettingsPage = () => { + + + diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/EncryptionTab/EncryptionTab.tsx b/frontend/src/views/Settings/ProjectSettingsPage/components/EncryptionTab/EncryptionTab.tsx new file mode 100644 index 000000000..b531399c4 --- /dev/null +++ b/frontend/src/views/Settings/ProjectSettingsPage/components/EncryptionTab/EncryptionTab.tsx @@ -0,0 +1,65 @@ +import { Controller, useForm } from "react-hook-form"; + +import { ProjectPermissionCan } from "@app/components/permissions"; +import { Button, ContentLoader, FormControl, Select, SelectItem } from "@app/components/v2"; +import { ProjectPermissionActions, ProjectPermissionSub, useOrganization } from "@app/context"; +import { useGetExternalKmsList } from "@app/hooks/api"; + +export const EncryptionTab = () => { + const { handleSubmit, control } = useForm(); + const { currentOrg } = useOrganization(); + + const { data: externalKmsList, isLoading: isExternalKmsListLoading } = useGetExternalKmsList( + currentOrg?.id! + ); + + const onFormSubmit = () => {}; + + return ( +
+

Key Management

+

+ Select which Key Management System to use for encrypting project data +

+
+ {isExternalKmsListLoading ? ( + + ) : ( + ( + + + + )} + control={control} + name="name" + /> + )} +
+ + {(isAllowed) => ( + + )} + +
+ ); +}; diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/EncryptionTab/index.tsx b/frontend/src/views/Settings/ProjectSettingsPage/components/EncryptionTab/index.tsx new file mode 100644 index 000000000..ba6180a8a --- /dev/null +++ b/frontend/src/views/Settings/ProjectSettingsPage/components/EncryptionTab/index.tsx @@ -0,0 +1 @@ +export { EncryptionTab } from "./EncryptionTab";