Skip to content

Commit

Permalink
fix(assets): Forward headers from the original request to the interna…
Browse files Browse the repository at this point in the history
…l request to the image (#10775)
  • Loading branch information
Princesseuh committed Apr 15, 2024
1 parent 01cb417 commit 0684312
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 5 deletions.
5 changes: 5 additions & 0 deletions .changeset/rich-spoons-fold.md
@@ -0,0 +1,5 @@
---
"astro": patch
---

Fixes assets endpoint in serverless returning 404 in certain situations where the website might be under a protected route
14 changes: 9 additions & 5 deletions packages/astro/src/assets/endpoint/generic.ts
Expand Up @@ -7,9 +7,12 @@ import { isRemoteAllowed } from '../utils/remotePattern.js';
// @ts-expect-error
import { imageConfig } from 'astro:assets';

async function loadRemoteImage(src: URL) {
async function loadRemoteImage(src: URL, headers: Headers) {
try {
const res = await fetch(src);
const res = await fetch(src, {
// Forward all headers from the original request
headers,
});

if (!res.ok) {
return undefined;
Expand Down Expand Up @@ -41,15 +44,16 @@ export const GET: APIRoute = async ({ request }) => {

let inputBuffer: ArrayBuffer | undefined = undefined;

const sourceUrl = isRemotePath(transform.src)
const isRemoteImage = isRemotePath(transform.src);
const sourceUrl = isRemoteImage
? new URL(transform.src)
: new URL(transform.src, url.origin);

if (isRemotePath(transform.src) && isRemoteAllowed(transform.src, imageConfig) === false) {
if (isRemoteImage && isRemoteAllowed(transform.src, imageConfig) === false) {
return new Response('Forbidden', { status: 403 });
}

inputBuffer = await loadRemoteImage(sourceUrl);
inputBuffer = await loadRemoteImage(sourceUrl, isRemoteImage ? new Headers() : request.headers);

if (!inputBuffer) {
return new Response('Not Found', { status: 404 });
Expand Down

0 comments on commit 0684312

Please sign in to comment.