From 1c9dacdf79903b2b1e57c6d55aa149b2439e7379 Mon Sep 17 00:00:00 2001 From: Guillaume Date: Fri, 17 Jan 2025 14:06:03 +0100 Subject: [PATCH] Add cors headers by default during OpenAPI import (#1649) This is a follow up from #1392 Closes #1593 --- .../cli/test/data/envs/petstore-imported.json | 15 +++++++++++++- .../src/libs/openapi-converter.ts | 6 ++++-- packages/commons/src/libs/schema-builder.ts | 20 ++++++++++++++----- .../app/services/environments.service.ts | 9 ++++++--- .../references/aws-cloudfront-v3.json | 15 +++++++++++++- .../references/aws-server-v3.json | 15 +++++++++++++- .../custom-schema-no-prefix-v2.json | 15 +++++++++++++- .../custom-schema-no-prefix-v3.json | 15 +++++++++++++- .../references/custom-schema-v2.json | 15 +++++++++++++- .../references/custom-schema-v3.json | 15 +++++++++++++- .../import-openapi/references/datagov-v2.json | 15 +++++++++++++- .../import-openapi/references/giphy-v2.json | 15 +++++++++++++- .../import-openapi/references/github-v2.json | 15 +++++++++++++- .../references/petstore-v2.json | 15 +++++++++++++- .../references/petstore-v3.json | 15 +++++++++++++- .../references/shutterstock-v3.json | 15 +++++++++++++- .../import-openapi/references/slack-v2.json | 15 +++++++++++++- .../import-openapi/references/youtube-v3.json | 15 +++++++++++++- 18 files changed, 235 insertions(+), 25 deletions(-) diff --git a/packages/cli/test/data/envs/petstore-imported.json b/packages/cli/test/data/envs/petstore-imported.json index 9e60b93bc..bb81484d3 100644 --- a/packages/cli/test/data/envs/petstore-imported.json +++ b/packages/cli/test/data/envs/petstore-imported.json @@ -180,7 +180,20 @@ "passphrase": "" }, "cors": true, - "headers": [], + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With" + } + ], "proxyReqHeaders": [{ "key": "", "value": "" }], "proxyResHeaders": [{ "key": "", "value": "" }], "data": [], diff --git a/packages/commons-server/src/libs/openapi-converter.ts b/packages/commons-server/src/libs/openapi-converter.ts index c84b2148f..c441e4ac3 100644 --- a/packages/commons-server/src/libs/openapi-converter.ts +++ b/packages/commons-server/src/libs/openapi-converter.ts @@ -188,7 +188,8 @@ export class OpenAPIConverter { port?: number ): Environment { const newEnvironment = BuildEnvironment({ - hasDefaultHeader: false, + hasContentTypeHeader: false, + hasCorsHeaders: true, hasDefaultRoute: false, port }); @@ -224,7 +225,8 @@ export class OpenAPIConverter { port?: number ): Environment { const newEnvironment = BuildEnvironment({ - hasDefaultHeader: false, + hasContentTypeHeader: false, + hasCorsHeaders: true, hasDefaultRoute: false, port }); diff --git a/packages/commons/src/libs/schema-builder.ts b/packages/commons/src/libs/schema-builder.ts index d4d57ab96..339f49cd9 100644 --- a/packages/commons/src/libs/schema-builder.ts +++ b/packages/commons/src/libs/schema-builder.ts @@ -212,22 +212,32 @@ export const BuildCallback = (): Callback => ({ ...CallbackDefault }); export const BuildEnvironment = ( params: { hasDefaultRoute: boolean; - hasDefaultHeader: boolean; + hasContentTypeHeader: boolean; + hasCorsHeaders: boolean; port?: number; } = { hasDefaultRoute: true, - hasDefaultHeader: true + hasContentTypeHeader: true, + hasCorsHeaders: true } ): Environment => { const newRoute = BuildHTTPRoute(); + const headers: Header[] = []; + + if (params.hasContentTypeHeader) { + headers.push(BuildHeader('Content-Type', 'application/json')); + } + + if (params.hasCorsHeaders) { + headers.push(...CORSHeaders); + } + return { ...EnvironmentDefault, port: params.port ?? EnvironmentDefault.port, routes: params.hasDefaultRoute ? [newRoute] : [], - headers: params.hasDefaultHeader - ? [BuildHeader('Content-Type', 'application/json'), ...CORSHeaders] - : [], + headers, proxyReqHeaders: [BuildHeader()], proxyResHeaders: [BuildHeader()], rootChildren: params.hasDefaultRoute diff --git a/packages/desktop/src/renderer/app/services/environments.service.ts b/packages/desktop/src/renderer/app/services/environments.service.ts index 075309c03..62862e6ef 100644 --- a/packages/desktop/src/renderer/app/services/environments.service.ts +++ b/packages/desktop/src/renderer/app/services/environments.service.ts @@ -544,7 +544,8 @@ export class EnvironmentsService extends Logger { const newEnvironment = options.environment ? options.environment : BuildEnvironment({ - hasDefaultHeader: true, + hasContentTypeHeader: true, + hasCorsHeaders: true, hasDefaultRoute: true, port: this.dataService.getNewEnvironmentPort() }); @@ -719,7 +720,8 @@ export class EnvironmentsService extends Logger { if (!environment) { environment = { ...BuildEnvironment({ - hasDefaultHeader: true, + hasContentTypeHeader: true, + hasCorsHeaders: true, hasDefaultRoute: true }), // provide a name or the filename (UUID) will be used @@ -1267,7 +1269,8 @@ export class EnvironmentsService extends Logger { setActive: true, environment: { ...BuildEnvironment({ - hasDefaultHeader: true, + hasContentTypeHeader: true, + hasCorsHeaders: true, hasDefaultRoute: true, port: this.dataService.getNewEnvironmentPort() }), diff --git a/packages/desktop/test/data/res/import-openapi/references/aws-cloudfront-v3.json b/packages/desktop/test/data/res/import-openapi/references/aws-cloudfront-v3.json index 341234559..1636d31cd 100644 --- a/packages/desktop/test/data/res/import-openapi/references/aws-cloudfront-v3.json +++ b/packages/desktop/test/data/res/import-openapi/references/aws-cloudfront-v3.json @@ -6736,7 +6736,20 @@ "passphrase": "" }, "cors": true, - "headers": [], + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With" + } + ], "proxyReqHeaders": [{ "key": "", "value": "" }], "proxyResHeaders": [{ "key": "", "value": "" }], "data": [], diff --git a/packages/desktop/test/data/res/import-openapi/references/aws-server-v3.json b/packages/desktop/test/data/res/import-openapi/references/aws-server-v3.json index ec6fd97c1..bc93c2ece 100644 --- a/packages/desktop/test/data/res/import-openapi/references/aws-server-v3.json +++ b/packages/desktop/test/data/res/import-openapi/references/aws-server-v3.json @@ -4336,7 +4336,20 @@ "passphrase": "" }, "cors": true, - "headers": [], + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With" + } + ], "proxyReqHeaders": [{ "key": "", "value": "" }], "proxyResHeaders": [{ "key": "", "value": "" }], "data": [], diff --git a/packages/desktop/test/data/res/import-openapi/references/custom-schema-no-prefix-v2.json b/packages/desktop/test/data/res/import-openapi/references/custom-schema-no-prefix-v2.json index 44a6557bc..1089ce848 100644 --- a/packages/desktop/test/data/res/import-openapi/references/custom-schema-no-prefix-v2.json +++ b/packages/desktop/test/data/res/import-openapi/references/custom-schema-no-prefix-v2.json @@ -64,7 +64,20 @@ "passphrase": "" }, "cors": true, - "headers": [], + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With" + } + ], "proxyReqHeaders": [{ "key": "", "value": "" }], "proxyResHeaders": [{ "key": "", "value": "" }], "data": [], diff --git a/packages/desktop/test/data/res/import-openapi/references/custom-schema-no-prefix-v3.json b/packages/desktop/test/data/res/import-openapi/references/custom-schema-no-prefix-v3.json index 6d6a7eecd..461bc5c7f 100644 --- a/packages/desktop/test/data/res/import-openapi/references/custom-schema-no-prefix-v3.json +++ b/packages/desktop/test/data/res/import-openapi/references/custom-schema-no-prefix-v3.json @@ -144,7 +144,20 @@ "passphrase": "" }, "cors": true, - "headers": [], + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With" + } + ], "proxyReqHeaders": [{ "key": "", "value": "" }], "proxyResHeaders": [{ "key": "", "value": "" }], "data": [], diff --git a/packages/desktop/test/data/res/import-openapi/references/custom-schema-v2.json b/packages/desktop/test/data/res/import-openapi/references/custom-schema-v2.json index 402d06762..9368b1a8a 100644 --- a/packages/desktop/test/data/res/import-openapi/references/custom-schema-v2.json +++ b/packages/desktop/test/data/res/import-openapi/references/custom-schema-v2.json @@ -64,7 +64,20 @@ "passphrase": "" }, "cors": true, - "headers": [], + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With" + } + ], "proxyReqHeaders": [{ "key": "", "value": "" }], "proxyResHeaders": [{ "key": "", "value": "" }], "data": [], diff --git a/packages/desktop/test/data/res/import-openapi/references/custom-schema-v3.json b/packages/desktop/test/data/res/import-openapi/references/custom-schema-v3.json index bf7aaff9c..d2d38a910 100644 --- a/packages/desktop/test/data/res/import-openapi/references/custom-schema-v3.json +++ b/packages/desktop/test/data/res/import-openapi/references/custom-schema-v3.json @@ -200,7 +200,20 @@ "passphrase": "" }, "cors": true, - "headers": [], + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With" + } + ], "proxyReqHeaders": [{ "key": "", "value": "" }], "proxyResHeaders": [{ "key": "", "value": "" }], "data": [], diff --git a/packages/desktop/test/data/res/import-openapi/references/datagov-v2.json b/packages/desktop/test/data/res/import-openapi/references/datagov-v2.json index f961dbcc1..822e9b82a 100644 --- a/packages/desktop/test/data/res/import-openapi/references/datagov-v2.json +++ b/packages/desktop/test/data/res/import-openapi/references/datagov-v2.json @@ -288,7 +288,20 @@ "passphrase": "" }, "cors": true, - "headers": [], + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With" + } + ], "proxyReqHeaders": [{ "key": "", "value": "" }], "proxyResHeaders": [{ "key": "", "value": "" }], "data": [], diff --git a/packages/desktop/test/data/res/import-openapi/references/giphy-v2.json b/packages/desktop/test/data/res/import-openapi/references/giphy-v2.json index e46365b91..6422b0394 100644 --- a/packages/desktop/test/data/res/import-openapi/references/giphy-v2.json +++ b/packages/desktop/test/data/res/import-openapi/references/giphy-v2.json @@ -1384,7 +1384,20 @@ "passphrase": "" }, "cors": true, - "headers": [], + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With" + } + ], "proxyReqHeaders": [{ "key": "", "value": "" }], "proxyResHeaders": [{ "key": "", "value": "" }], "data": [], diff --git a/packages/desktop/test/data/res/import-openapi/references/github-v2.json b/packages/desktop/test/data/res/import-openapi/references/github-v2.json index d680cac05..dfd6470bf 100644 --- a/packages/desktop/test/data/res/import-openapi/references/github-v2.json +++ b/packages/desktop/test/data/res/import-openapi/references/github-v2.json @@ -25928,7 +25928,20 @@ "passphrase": "" }, "cors": true, - "headers": [], + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With" + } + ], "proxyReqHeaders": [{ "key": "", "value": "" }], "proxyResHeaders": [{ "key": "", "value": "" }], "data": [], diff --git a/packages/desktop/test/data/res/import-openapi/references/petstore-v2.json b/packages/desktop/test/data/res/import-openapi/references/petstore-v2.json index 076c30806..9aca5f54d 100644 --- a/packages/desktop/test/data/res/import-openapi/references/petstore-v2.json +++ b/packages/desktop/test/data/res/import-openapi/references/petstore-v2.json @@ -1216,7 +1216,20 @@ "passphrase": "" }, "cors": true, - "headers": [], + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With" + } + ], "proxyReqHeaders": [{ "key": "", "value": "" }], "proxyResHeaders": [{ "key": "", "value": "" }], "data": [], diff --git a/packages/desktop/test/data/res/import-openapi/references/petstore-v3.json b/packages/desktop/test/data/res/import-openapi/references/petstore-v3.json index ac3f3a793..f4722e562 100644 --- a/packages/desktop/test/data/res/import-openapi/references/petstore-v3.json +++ b/packages/desktop/test/data/res/import-openapi/references/petstore-v3.json @@ -288,7 +288,20 @@ "passphrase": "" }, "cors": true, - "headers": [], + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With" + } + ], "proxyReqHeaders": [{ "key": "", "value": "" }], "proxyResHeaders": [{ "key": "", "value": "" }], "data": [], diff --git a/packages/desktop/test/data/res/import-openapi/references/shutterstock-v3.json b/packages/desktop/test/data/res/import-openapi/references/shutterstock-v3.json index 745d9b38b..1ec240562 100644 --- a/packages/desktop/test/data/res/import-openapi/references/shutterstock-v3.json +++ b/packages/desktop/test/data/res/import-openapi/references/shutterstock-v3.json @@ -10568,7 +10568,20 @@ "passphrase": "" }, "cors": true, - "headers": [], + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With" + } + ], "proxyReqHeaders": [{ "key": "", "value": "" }], "proxyResHeaders": [{ "key": "", "value": "" }], "data": [], diff --git a/packages/desktop/test/data/res/import-openapi/references/slack-v2.json b/packages/desktop/test/data/res/import-openapi/references/slack-v2.json index 5d320a686..be79d7d33 100644 --- a/packages/desktop/test/data/res/import-openapi/references/slack-v2.json +++ b/packages/desktop/test/data/res/import-openapi/references/slack-v2.json @@ -12632,7 +12632,20 @@ "passphrase": "" }, "cors": true, - "headers": [], + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With" + } + ], "proxyReqHeaders": [{ "key": "", "value": "" }], "proxyResHeaders": [{ "key": "", "value": "" }], "data": [], diff --git a/packages/desktop/test/data/res/import-openapi/references/youtube-v3.json b/packages/desktop/test/data/res/import-openapi/references/youtube-v3.json index 7a74b413e..675cc6212 100644 --- a/packages/desktop/test/data/res/import-openapi/references/youtube-v3.json +++ b/packages/desktop/test/data/res/import-openapi/references/youtube-v3.json @@ -344,7 +344,20 @@ "passphrase": "" }, "cors": true, - "headers": [], + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "*" + }, + { + "key": "Access-Control-Allow-Methods", + "value": "GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS" + }, + { + "key": "Access-Control-Allow-Headers", + "value": "Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With" + } + ], "proxyReqHeaders": [{ "key": "", "value": "" }], "proxyResHeaders": [{ "key": "", "value": "" }], "data": [],