From 892ea99a5408db88ee3ba9d73b6332b118718be9 Mon Sep 17 00:00:00 2001 From: tejashwikalptaru Date: Mon, 20 Nov 2023 15:36:16 +0530 Subject: [PATCH 1/2] updated AWSS3UrlReader to support CN domain Signed-off-by: tejashwikalptaru --- .../src/reading/AwsS3UrlReader.test.ts | 33 +++++++++++++++++++ .../src/reading/AwsS3UrlReader.ts | 4 +-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/packages/backend-common/src/reading/AwsS3UrlReader.test.ts b/packages/backend-common/src/reading/AwsS3UrlReader.test.ts index b37a052c1d..e3247f190b 100644 --- a/packages/backend-common/src/reading/AwsS3UrlReader.test.ts +++ b/packages/backend-common/src/reading/AwsS3UrlReader.test.ts @@ -53,6 +53,39 @@ describe('parseUrl', () => { bucket: 'my.bucket-3', region: 'us-east-1', }); + expect( + parseUrl('https://s3.amazonaws.com.cn/my.bucket-3/a/puppy.jpg', { + host: 'amazonaws.com', + }), + ).toEqual({ + path: 'a/puppy.jpg', + bucket: 'my.bucket-3', + region: 'us-east-1', + }); + expect( + parseUrl( + 'https://ec-backstage-staging.s3.cn-north-1.amazonaws.com.cn/payments-prod-oas30.json', + { + host: 'amazonaws.com', + }, + ), + ).toEqual({ + path: 'payments-prod-oas30.json', + bucket: 'ec-backstage-staging', + region: 'cn-north-1', + }); + expect( + parseUrl( + 'https://ec-backstage-staging.s3.cn-north-1.amazonaws.com.cn/payments-prod-oas30.json', + { + host: 'amazonaws.com.cn', + }, + ), + ).toEqual({ + path: 'payments-prod-oas30.json', + bucket: 'ec-backstage-staging', + region: 'cn-north-1', + }); expect( parseUrl('https://s3.us-west-2.amazonaws.com/my.bucket-3/a/puppy.jpg', { host: 'amazonaws.com', diff --git a/packages/backend-common/src/reading/AwsS3UrlReader.ts b/packages/backend-common/src/reading/AwsS3UrlReader.ts index 4d4c28071f..23ef0f7b27 100644 --- a/packages/backend-common/src/reading/AwsS3UrlReader.ts +++ b/packages/backend-common/src/reading/AwsS3UrlReader.ts @@ -69,9 +69,9 @@ export function parseUrl( const host = parsedUrl.host; // Treat Amazon hosted separately because it has special region logic - if (config.host === 'amazonaws.com') { + if (config.host === 'amazonaws.com' || config.host === 'amazonaws.com.cn') { const match = host.match( - /^(?:([a-z0-9.-]+)\.)?s3(?:[.-]([a-z0-9-]+))?\.amazonaws\.com$/, + /^(?:([a-z0-9.-]+)\.)?s3(?:[.-]([a-z0-9-]+))?\.amazonaws\.com(\.cn)?$/, ); if (!match) { throw new Error(`Invalid AWS S3 URL ${url}`); From d86a0075b7e27802e6b7b6c07a64364c61ae48c7 Mon Sep 17 00:00:00 2001 From: tejashwikalptaru Date: Tue, 5 Dec 2023 16:43:48 +0530 Subject: [PATCH 2/2] added changeset Signed-off-by: tejashwikalptaru --- .changeset/ninety-suns-accept.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/ninety-suns-accept.md diff --git a/.changeset/ninety-suns-accept.md b/.changeset/ninety-suns-accept.md new file mode 100644 index 0000000000..1ee7b98987 --- /dev/null +++ b/.changeset/ninety-suns-accept.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Fixed the AwsS3UrlReader host regex and host to allow the S3 reading for CN AWS domain