diff --git a/.changeset/rich-deers-run.md b/.changeset/rich-deers-run.md new file mode 100644 index 0000000000..23d81ef30d --- /dev/null +++ b/.changeset/rich-deers-run.md @@ -0,0 +1,16 @@ +--- +'@backstage/backend-common': patch +--- + +Add glob patterns support to config CORS options. It's possible to send patterns like: + +```yaml +backend: + cors: + origin: + [ + https://*.my-domain.com, + http://localhost:700?, + 'https://sub-domain-+([0-9]).my-domain.com', + ] +``` diff --git a/packages/backend-common/src/service/lib/config.test.ts b/packages/backend-common/src/service/lib/config.test.ts index 59a11d3ab5..29693a8fcd 100644 --- a/packages/backend-common/src/service/lib/config.test.ts +++ b/packages/backend-common/src/service/lib/config.test.ts @@ -69,7 +69,9 @@ describe('config', () => { it('reads string array', () => { const mockCallback = jest.fn(); const config = new ConfigReader({ - cors: { origin: ['https://*.value*', 'http://*.value'] }, + cors: { + origin: ['http?(s)://*.value?(-+([0-9])).com', 'http://*.value'], + }, }); const cors = readCorsOptions(config); expect(cors).toEqual( @@ -78,8 +80,8 @@ describe('config', () => { }), ); const origin = cors?.origin as Function; - origin('https://a.value', mockCallback); - origin('https://a.valuex', mockCallback); + origin('https://a.b.c.value-9.com', mockCallback); + origin('http://a.value-999.com', mockCallback); origin('http://a.value', mockCallback); origin('http://a.valuex', mockCallback);