From 7fa6709c8b81fc553de9f0fafef6df60c2b35107 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Tue, 5 Oct 2021 11:41:15 +0100 Subject: [PATCH] feat: pass auth headers to local requests --- package.json | 1 + src/http.ts | 13 +++++++++++-- src/index.ts | 11 +++++++++-- yarn.lock | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 67 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 1923510..c209d30 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "@nuxtjs/eslint-config-typescript": "^6.0.1", "@types/etag": "^1.8.1", "@types/fs-extra": "^9.0.12", + "@types/node-fetch": "^2.0.0", "eslint": "^7.29.0", "jiti": "^1.10.1", "standard-version": "^9.3.0", diff --git a/src/http.ts b/src/http.ts index 68ca37d..c309223 100644 --- a/src/http.ts +++ b/src/http.ts @@ -21,7 +21,16 @@ export interface SourceImageResult { responseEtag?: string; } -export async function loadSourceImage ({ cacheDir, url, requestEtag, modifiers, isLocal }): Promise { +export interface SourceImageOptions { + cacheDir: string + url: string + requestHeaders?: Record + modifiers: string + isLocal?: boolean + requestEtag?: string +} + +export async function loadSourceImage ({ cacheDir, url, requestEtag, modifiers, isLocal, requestHeaders = {} }: SourceImageOptions): Promise { const fileCache = join(cacheDir, 'cache') const metadataCache = join(cacheDir, 'metadata') @@ -34,7 +43,7 @@ export async function loadSourceImage ({ cacheDir, url, requestEtag, modifiers, const cacheKey = String(murmurhash(url)) const inputCacheFile = join(fileCache, cacheKey) - const headers = new Headers() + const headers = new Headers(requestHeaders) let sourceMetadata: SourceMetadata | undefined if (existsSync(inputCacheFile)) { sourceMetadata = (await metadataStore.getItem(`source:${cacheKey}`)) as diff --git a/src/index.ts b/src/index.ts index 6f014c9..e32d4d1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -22,11 +22,17 @@ export function createIPXHandler ({ const [modifiers = '_', ...segments] = url.substr(1).split('/') let id = decodeURIComponent(segments.join('/')) - + const requestHeaders: Record = {} const isLocal = !id.startsWith('http') if (isLocal) { id = `${protocol}://${host}${id}` } else { + if (event.headers.cookie) { + requestHeaders.cookie = event.headers.cookie + } + if (event.headers.authorization) { + requestHeaders.authorization = event.headers.authorization + } if (typeof domains === 'string') { domains = (domains as string).split(',').map(s => s.trim()) } @@ -56,7 +62,8 @@ export function createIPXHandler ({ url: id, requestEtag, modifiers, - isLocal + isLocal, + requestHeaders }) if (response) { diff --git a/yarn.lock b/yarn.lock index a7e7282..e83f619 100644 --- a/yarn.lock +++ b/yarn.lock @@ -316,6 +316,14 @@ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== +"@types/node-fetch@^2.0.0": + version "2.5.12" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.12.tgz#8a6f779b1d4e60b7a57fb6fd48d84fb545b9cc66" + integrity sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + "@types/node@*": version "15.14.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.0.tgz#74dbf254fb375551a9d2a71faf6b9dbc2178dc53" @@ -550,6 +558,11 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -780,6 +793,13 @@ colorette@^1.2.2: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + commander@^2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -1115,6 +1135,11 @@ defu@^5.0.0: resolved "https://registry.yarnpkg.com/defu/-/defu-5.0.0.tgz#5768f0d402a555bfc4c267246b20f82ce8b5a10b" integrity sha512-VHg73EDeRXlu7oYWRmmrNp/nl7QkdXUxkQQKig0Zk8daNmm84AbGoC8Be6/VVLJEKxn12hR0UBmz8O+xQiAPKQ== +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -1634,6 +1659,15 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.0.tgz#da07fb8808050aba6fdeac2294542e5043583f05" integrity sha512-XprP7lDrVT+kE2c2YlfiV+IfS9zxukiIOvNamPNsImNhXadSsQEbosItdL9bUQlCZXR13SvPk20BjWSWLA7m4A== +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + fs-access@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" @@ -2477,6 +2511,18 @@ micromatch@^4.0.4: braces "^3.0.1" picomatch "^2.2.3" +mime-db@1.50.0: + version "1.50.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.50.0.tgz#abd4ac94e98d3c0e185016c67ab45d5fde40c11f" + integrity sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A== + +mime-types@^2.1.12: + version "2.1.33" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.33.tgz#1fa12a904472fafd068e48d9e8401f74d3f70edb" + integrity sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g== + dependencies: + mime-db "1.50.0" + mimic-response@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43"