diff --git a/flow/connectors/utils/aws.go b/flow/connectors/utils/aws.go index d1886f2c1f..7138144bb9 100644 --- a/flow/connectors/utils/aws.go +++ b/flow/connectors/utils/aws.go @@ -170,13 +170,13 @@ func LoadPeerDBAWSEnvConfigProvider(connectorName string) AWSCredentialsProvider func GetAWSCredentialsProvider(ctx context.Context, connectorName string, peerCredentials PeerAWSCredentials) (AWSCredentialsProvider, error) { if !(peerCredentials.Credentials.AccessKeyID == "" && peerCredentials.Credentials.SecretAccessKey == "" && - peerCredentials.Region == "" && peerCredentials.RoleArn == nil && + peerCredentials.Region == "" && (peerCredentials.RoleArn == nil || *peerCredentials.RoleArn == "") && (peerCredentials.EndpointUrl == nil || *peerCredentials.EndpointUrl == "")) { staticProvider := NewStaticAWSCredentialsProvider(AWSCredentials{ AWS: peerCredentials.Credentials, EndpointUrl: peerCredentials.EndpointUrl, }, peerCredentials.Region) - if peerCredentials.RoleArn == nil { + if peerCredentials.RoleArn == nil || *peerCredentials.RoleArn == "" { logger.LoggerFromCtx(ctx).Info("Received AWS credentials from peer for connector: " + connectorName) return staticProvider, nil } diff --git a/ui/app/peers/create/[peerType]/helpers/s3.ts b/ui/app/peers/create/[peerType]/helpers/s3.ts index cd34c443a3..8e98b91649 100644 --- a/ui/app/peers/create/[peerType]/helpers/s3.ts +++ b/ui/app/peers/create/[peerType]/helpers/s3.ts @@ -33,6 +33,13 @@ export const s3Setting: PeerSetting[] = [ setter((curr) => ({ ...curr, region: value as string })), tips: 'The region where your bucket is located. For example, us-east-1. In case of GCS, this will be set to auto, which detects where your bucket it.', }, + { + label: 'Endpoint', + stateHandler: (value, setter) => + setter((curr) => ({ ...curr, endpoint: value as string })), + tips: 'The endpoint of your S3 bucket. This is optional.', + optional: true, + }, { label: 'Role ARN', stateHandler: (value, setter) => diff --git a/ui/app/utils/gcsEndpoint.ts b/ui/app/utils/gcsEndpoint.ts new file mode 100644 index 0000000000..eb379dc106 --- /dev/null +++ b/ui/app/utils/gcsEndpoint.ts @@ -0,0 +1 @@ +export const GCS_ENDPOINT = 'https://storage.googleapis.com'; diff --git a/ui/components/PeerForms/S3Form.tsx b/ui/components/PeerForms/S3Form.tsx index f4cfcc351f..db075c3366 100644 --- a/ui/components/PeerForms/S3Form.tsx +++ b/ui/components/PeerForms/S3Form.tsx @@ -1,6 +1,7 @@ 'use client'; import { PeerSetter } from '@/app/dto/PeersDTO'; import { s3Setting } from '@/app/peers/create/[peerType]/helpers/s3'; +import { GCS_ENDPOINT } from '@/app/utils/gcsEndpoint'; import { Label } from '@/lib/Label'; import { RowWithRadiobutton, RowWithTextField } from '@/lib/Layout'; import { RadioButton, RadioButtonGroup } from '@/lib/RadioButtonGroup'; @@ -16,26 +17,18 @@ const S3Form = ({ setter }: S3Props) => { const [storageType, setStorageType] = useState<'S3' | 'GCS'>('S3'); const displayCondition = (label: string) => { return !( - (label === 'Region' || label === 'Role ARN') && + (label === 'Region' || label === 'Role ARN' || label === 'Endpoint') && storageType === 'GCS' ); }; useEffect(() => { - const endpoint = - storageType === 'S3' ? '' : 'https://storage.googleapis.com'; - setter((prev) => { - return { - ...prev, - endpoint, - }; - }); - if (storageType === 'GCS') { setter((prev) => { return { ...prev, region: 'auto', + endpoint: GCS_ENDPOINT, }; }); }