From b619491b81998470901057b2063a3a0b0a2a1c8a Mon Sep 17 00:00:00 2001 From: Bartosz Herba Date: Wed, 14 Dec 2022 11:22:46 +0100 Subject: [PATCH 1/3] fix: improve safety of unknown errors --- .../__tests__/unit/helpers/getAgnosticStatusCode.spec.ts | 4 ++-- packages/middleware/src/createServer.ts | 3 ++- packages/middleware/src/helpers/getAgnosticStatusCode.ts | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/middleware/__tests__/unit/helpers/getAgnosticStatusCode.spec.ts b/packages/middleware/__tests__/unit/helpers/getAgnosticStatusCode.spec.ts index 3ba0b19023..28d97f3df3 100644 --- a/packages/middleware/__tests__/unit/helpers/getAgnosticStatusCode.spec.ts +++ b/packages/middleware/__tests__/unit/helpers/getAgnosticStatusCode.spec.ts @@ -2,7 +2,7 @@ import getAgnosticStatusCode, { ApolloError, AxiosError, UnknownError } from '.. import bigObject from '../test-data/getAgnosticStatusCode'; const expectedStatusCode = 400; -const defaultCode = 200; +const defaultCode = 500; const networkErrorCode = 500; describe('[middleware-helpers] getAgnosticStatusCode', () => { @@ -30,7 +30,7 @@ describe('[middleware-helpers] getAgnosticStatusCode', () => { }); it('retrieves the status code from big object', () => { - const testData = {...bigObject, ...{statusCode: expectedStatusCode}} as unknown as UnknownError; + const testData = { ...bigObject, ...{ statusCode: expectedStatusCode } } as unknown as UnknownError; const statusCode = getAgnosticStatusCode(testData); expect(statusCode).toBe(expectedStatusCode); diff --git a/packages/middleware/src/createServer.ts b/packages/middleware/src/createServer.ts index 98fbdb2fab..24ff414d31 100644 --- a/packages/middleware/src/createServer.ts +++ b/packages/middleware/src/createServer.ts @@ -75,8 +75,9 @@ async function createServer(config: MiddlewareConfig): Promise { const platformResponse = await apiFunction(...req.body); res.send(platformResponse); } catch (error) { + consola.error(error); res.status(getAgnosticStatusCode(error)); - res.send(error); + res.send('ServerError: Response not successful. Please, check server logs for more details.'); } }); diff --git a/packages/middleware/src/helpers/getAgnosticStatusCode.ts b/packages/middleware/src/helpers/getAgnosticStatusCode.ts index a122d91ed2..18e3eace6a 100644 --- a/packages/middleware/src/helpers/getAgnosticStatusCode.ts +++ b/packages/middleware/src/helpers/getAgnosticStatusCode.ts @@ -62,7 +62,7 @@ function getAgnosticStatusCode(error: AxiosError | ApolloError | UnknownError): return getAxiosStatusCode(error as AxiosError) || getApolloStatusCode(error as ApolloError) || obtainStatusCode(error as UnknownError) || - 200; + 500; } export default getAgnosticStatusCode; From f8b95691b0841afb1b516681267ffacb3d34df70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20J=C4=99drasik?= Date: Fri, 23 Dec 2022 14:26:05 +0100 Subject: [PATCH 2/3] fix: passing x-forwarded-host in axios request (#6869) * refactor: forwarding X-Forwarded-Host header in axios clients * chore: updated changelog Co-authored-by: Fifciu --- .../__tests__/utils/nuxt/proxyUtils.spec.ts | 57 ++++++++++++++++++- packages/core/src/utils/nuxt/_proxyUtils.ts | 11 ++-- packages/docs/changelog/6869.js | 7 +++ 3 files changed, 68 insertions(+), 7 deletions(-) create mode 100644 packages/docs/changelog/6869.js diff --git a/packages/core/__tests__/utils/nuxt/proxyUtils.spec.ts b/packages/core/__tests__/utils/nuxt/proxyUtils.spec.ts index bc9d098b53..b19b1a40ea 100644 --- a/packages/core/__tests__/utils/nuxt/proxyUtils.spec.ts +++ b/packages/core/__tests__/utils/nuxt/proxyUtils.spec.ts @@ -30,7 +30,7 @@ describe('[CORE - utils] _proxyUtils', () => { expect(utils.getCookies({ req: { headers: { cookie: { someCookie: 1 } } } } as any)).toEqual({ someCookie: 1 }); }); - it('it combines config with the current one', () => { + it('combines config with the current one', () => { jest.spyOn(utils, 'getCookies').mockReturnValue(''); const integrationConfig = utils.getIntegrationConfig( @@ -51,7 +51,7 @@ describe('[CORE - utils] _proxyUtils', () => { }); }); - it('it combines config with the current one and adds a cookie', () => { + it('combines config with the current one and adds a cookie', () => { jest.spyOn(utils, 'getCookies').mockReturnValue('xxx'); const integrationConfig = utils.getIntegrationConfig( @@ -73,6 +73,56 @@ describe('[CORE - utils] _proxyUtils', () => { }); }); + it('adds a X-Forwarded-Host header', () => { + const integrationConfig = utils.getIntegrationConfig( + { + $config: { + middlewareUrl: 'http://localhost.com' + }, + req: { + headers: { + 'x-forwarded-host': 'myforward.vsf' + } + } + } as any, + {} + ); + + expect(integrationConfig).toEqual({ + axios: { + baseURL: expect.any(String), + headers: expect.objectContaining({ + 'X-Forwarded-Host': 'myforward.vsf' + }) + } + }); + }); + + it('adds a Host header', () => { + const integrationConfig = utils.getIntegrationConfig( + { + $config: { + middlewareUrl: 'http://localhost.com' + }, + req: { + headers: { + host: 'mywebsite.local' + } + } + } as any, + {} + ); + + expect(integrationConfig).toEqual({ + axios: { + baseURL: expect.any(String), + headers: expect.objectContaining({ + Host: 'mywebsite.local' + }) + } + }); + }); + /** * baseURL configuration cases matrix */ @@ -85,7 +135,7 @@ describe('[CORE - utils] _proxyUtils', () => { ]; const testMsg = '[baseUrl must be configured properly for] server: $server, middlewareUrl: $middlewareUrl, ssrMiddlewareUrl: $ssrMiddlewareUrl, expected: $expected'; - test.each(urlSetupCases)(testMsg, ({ server, middlewareUrl, ssrMiddlewareUrl, expected }) => { + it.each(urlSetupCases)(testMsg, ({ server, middlewareUrl, ssrMiddlewareUrl, expected }) => { process.server = server; const integrationConfig = utils.getIntegrationConfig( @@ -113,4 +163,5 @@ describe('[CORE - utils] _proxyUtils', () => { utils.getIntegrationConfig({ $config: { middlewareUrl: undefined } } as any, {}); }).toThrow('`middlewareUrl` is required. Provide the `middlewareUrl` in your integration\'s configuration.'); }); + }); diff --git a/packages/core/src/utils/nuxt/_proxyUtils.ts b/packages/core/src/utils/nuxt/_proxyUtils.ts index bbb4ebd697..fd0e7b845b 100644 --- a/packages/core/src/utils/nuxt/_proxyUtils.ts +++ b/packages/core/src/utils/nuxt/_proxyUtils.ts @@ -43,13 +43,16 @@ export const getIntegrationConfig = (context: NuxtContext, configuration: any) = baseURL = `/${baseURL}`; } + const headers = {}; + cookie && Object.assign(headers, { cookie }); + const reqHeaders = context.req?.headers; + reqHeaders?.['x-forwarded-host'] && Object.assign(headers, { 'X-Forwarded-Host': reqHeaders['x-forwarded-host'] }); + reqHeaders?.host && Object.assign(headers, { Host: reqHeaders.host }); + return merge({ axios: { baseURL, - headers: { - ...(cookie ? { cookie } : {}), - ...(context.req ? { Host: context.req.headers.host } : {}) - } + headers } }, configuration); }; diff --git a/packages/docs/changelog/6869.js b/packages/docs/changelog/6869.js new file mode 100644 index 0000000000..edb223902a --- /dev/null +++ b/packages/docs/changelog/6869.js @@ -0,0 +1,7 @@ +module.exports = { + description: 'feat!: plugins pass X-Forwarded-Host header with fallback to the Host header in server to server communication #6869.', + link: 'https://github.com/vuestorefront/vue-storefront/pull/6869', + isBreaking: false, + author: 'Filip Jędrasik', + linkToGitHubAccount: 'https://github.com/Fifciu' +}; From 55fd24b7d03ff5901ca2f229b8006ab4ea2ee21c Mon Sep 17 00:00:00 2001 From: Wojciech Sikora <35867383+WojtekTheWebDev@users.noreply.github.com> Date: Tue, 11 Jul 2023 08:58:47 +0200 Subject: [PATCH 3/3] test: fix core tests (#6936) --- packages/core/__tests__/utils/nuxt/proxyUtils.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/__tests__/utils/nuxt/proxyUtils.spec.ts b/packages/core/__tests__/utils/nuxt/proxyUtils.spec.ts index 9cb5adb35e..b595f32b4a 100644 --- a/packages/core/__tests__/utils/nuxt/proxyUtils.spec.ts +++ b/packages/core/__tests__/utils/nuxt/proxyUtils.spec.ts @@ -92,7 +92,7 @@ describe('[CORE - utils] _proxyUtils', () => { axios: { baseURL: expect.any(String), headers: expect.objectContaining({ - 'X-Forwarded-Host': 'myforward.vsf' + Host: 'myforward.vsf' }) } });