diff --git a/.env.example b/.env.example index e0a5206..577e2b8 100644 --- a/.env.example +++ b/.env.example @@ -15,4 +15,7 @@ PUBLIC_HTTPS_ONLY= # Example: PORT=80 PORT=5173 # Set this to true if you want to disable public signups (default: false) -PUBLIC_SIGNUP_DISABLED=false \ No newline at end of file +PUBLIC_SIGNUP_DISABLED=false +# Provide a stringified JSON object with custom headers to be sent through internal proxy requests (can be overridden by the client) +# Example: CUSTOM_PROXY_HEADERS="{\"X-My-Header\": \"MyValue\"}" +CUSTOM_PROXY_HEADERS= \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 1a7c968..4d27975 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,6 +23,7 @@ ARG PORT=5173 ARG PUBLIC_HTTPS_ONLY="false" ARG PUBLIC_SIGNUP_DISABLED="false" ARG BODY_SIZE_LIMIT="5000000" +ARG CUSTOM_PROXY_HEADERS ENV PUBLIC_POCKETBASE_URL=$PUBLIC_POCKETBASE_URL ENV ROOT_ADMIN_EMAIL=$ROOT_ADMIN_EMAIL @@ -33,6 +34,7 @@ ENV PORT=$PORT ENV PUBLIC_HTTPS_ONLY=$PUBLIC_HTTPS_ONLY ENV PUBLIC_SIGNUP_DISABLED=$PUBLIC_SIGNUP_DISABLED ENV BODY_SIZE_LIMIT=$BODY_SIZE_LIMIT +ENV CUSTOM_PROXY_HEADERS=$CUSTOM_PROXY_HEADERS COPY --from=prod-deps /app/node_modules /app/node_modules COPY --from=build /app/build /app/build diff --git a/src/server.js b/src/server.js index b81b7bf..42c8bc5 100644 --- a/src/server.js +++ b/src/server.js @@ -16,6 +16,18 @@ app.use( proxy(config.POCKETBASE_URL, { proxyReqPathResolver: function (req) { return req.url.replace(config.INTERNAL_PATH, ''); + }, + proxyReqOptDecorator: function (proxyReqOpts, _srcReq) { + const customHeaders = process.env.CUSTOM_PROXY_HEADERS; + + if (customHeaders) { + proxyReqOpts.headers = { + ...JSON.parse(customHeaders), + ...(proxyReqOpts.headers || {}) + }; + } + + return proxyReqOpts; } }) );