From 346ac66440c25393a7ba9c9973f6015d9534ca87 Mon Sep 17 00:00:00 2001 From: Hoan Luu Huu <110280845+xquanluu@users.noreply.github.com> Date: Tue, 22 Aug 2023 18:50:38 +0700 Subject: [PATCH] support azure storage (#312) --- src/api/constants.ts | 5 ++ src/api/types.ts | 1 + .../internal/views/accounts/form.tsx | 52 +++++++++++++++++-- 3 files changed, 55 insertions(+), 3 deletions(-) diff --git a/src/api/constants.ts b/src/api/constants.ts index 8eac066..8a92ddf 100644 --- a/src/api/constants.ts +++ b/src/api/constants.ts @@ -162,6 +162,7 @@ export const SIP_GATEWAY_PROTOCOL_OPTIONS = [ */ export const BUCKET_VENDOR_AWS = "aws_s3"; export const BUCKET_VENDOR_GOOGLE = "google"; +export const BUCKET_VENDOR_AZURE = "azure"; export const BUCKET_VENDOR_OPTIONS = [ { name: "NONE", @@ -175,6 +176,10 @@ export const BUCKET_VENDOR_OPTIONS = [ name: "Google Cloud Storage", value: BUCKET_VENDOR_GOOGLE, }, + { + name: "Azure Cloud Storage", + value: BUCKET_VENDOR_AZURE, + }, ]; export const AUDIO_FORMAT_OPTIONS = [ diff --git a/src/api/types.ts b/src/api/types.ts index 915570d..7c9db9c 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -305,6 +305,7 @@ export interface BucketCredential { secret_access_key?: null | string; tags?: null | AwsTag[]; service_key?: null | string; + connection_string?: null | string; } export interface Application { diff --git a/src/containers/internal/views/accounts/form.tsx b/src/containers/internal/views/accounts/form.tsx index 3138849..c574a09 100644 --- a/src/containers/internal/views/accounts/form.tsx +++ b/src/containers/internal/views/accounts/form.tsx @@ -28,6 +28,7 @@ import { ROUTE_INTERNAL_ACCOUNTS } from "src/router/routes"; import { AUDIO_FORMAT_OPTIONS, BUCKET_VENDOR_AWS, + BUCKET_VENDOR_AZURE, BUCKET_VENDOR_GOOGLE, BUCKET_VENDOR_OPTIONS, CRED_OK, @@ -129,6 +130,7 @@ export const AccountForm = ({ useState(false); const deleteMessageRef = useRef(null); const [isShowModalLoader, setIsShowModalLoader] = useState(false); + const [azureConnectionString, setAzureConnectionString] = useState(""); /** This lets us map and render the same UI for each... */ const webhooks = [ @@ -260,6 +262,9 @@ export const AccountForm = ({ ...(bucketVendor === BUCKET_VENDOR_GOOGLE && { service_key: JSON.stringify(bucketGoogleServiceKey), }), + ...(bucketVendor === BUCKET_VENDOR_AZURE && { + connection_string: azureConnectionString, + }), }; postAccountBucketCredentialTest(account?.data?.account_sid, cred).then( @@ -391,6 +396,13 @@ export const AccountForm = ({ ...(hasLength(bucketTags) && { tags: bucketTags }), }, }), + ...(bucketVendor === BUCKET_VENDOR_AZURE && { + bucket_credential: { + vendor: bucketVendor || null, + name: bucketName || null, + connection_string: azureConnectionString || null, + }, + }), ...(!bucketCredentialChecked && { record_all_calls: 0, bucket_credential: { @@ -495,6 +507,11 @@ export const AccountForm = ({ if (account.data.bucket_credential?.region) { setBucketRegion(account.data.bucket_credential?.region); } + if (account.data.bucket_credential?.connection_string) { + setAzureConnectionString( + account.data.bucket_credential.connection_string + ); + } if (account.data.record_all_calls) { setRecordAllCalls(account.data.record_all_calls ? true : false); } @@ -1013,14 +1030,21 @@ export const AccountForm = ({ /> { setBucketName(e.target.value); @@ -1108,11 +1132,31 @@ export const AccountForm = ({ )} )} + {bucketVendor === BUCKET_VENDOR_AZURE && ( + <> + + { + setAzureConnectionString(e.target.value); + }} + /> + + )} @@ -1184,7 +1228,9 @@ export const AccountForm = ({ (bucketVendor === BUCKET_VENDOR_AWS && (!bucketAccessKeyId || !bucketSecretAccessKey)) || (bucketVendor === BUCKET_VENDOR_GOOGLE && - !bucketGoogleServiceKey) + !bucketGoogleServiceKey) || + (bucketVendor === BUCKET_VENDOR_AZURE && + !azureConnectionString) } > Test