diff --git a/functions/v2/[[image]].js b/functions/v2/[[image]].js index 7f673df..c39ee31 100644 --- a/functions/v2/[[image]].js +++ b/functions/v2/[[image]].js @@ -15,34 +15,45 @@ export function onRequest(context) { // Parse the path out of the url const url = new URL(context.request.url); - // The first segment of the path is probably the user - var path_split = url.pathname.split("/"); + // // The first segment of the path is probably the user + // var path_split = url.pathname.split("/"); - // The image name is the part between `/vx/` and the first action token - var image_name = ""; - for (var token of path_split) { - if (token == "v2" || token == "") { - continue; - } - if (POSSIBLE_ACTION_TOKENS.includes(token)) { + // // The image name is the part between `/vx/` and the first action token + // var image_name = ""; + // for (var token of path_split) { + // if (token == "v2" || token == "") { + // continue; + // } + // if (POSSIBLE_ACTION_TOKENS.includes(token)) { + // break; + // } + // image_name += token + "/"; + // } + + // // The action_url is everything after the image name + // var action_url = url.pathname.replace(`/v2/${image_name}`, ""); + + // // If there is a slash and the first part is not an allowed user, fail + // var image_name_parts = image_name.split("/"); + // if (image_name_parts.length > 1 && !ALLOWED_USERS.includes(image_name_parts[0])) { + // return new Response(`User does not exist ${image_name_parts[0]}`, { status: 404 }); + // } + + // // If there is no slash, add the default user to the image name + // if (image_name_parts.length == 1) { + // image_name = `${DEFAULT_USER}/${image_name}`; + // } + + var has_allowed_user = false; + for (var user of ALLOWED_USERS) { + if (url.pathname.startsWith(`/v2/${user}/`)) { + has_allowed_user = true; break; } - image_name += token + "/"; + } + if (!has_allowed_user) { + return new Response(`User does not exist`, { status: 404 }); } - // The action_url is everything after the image name - var action_url = url.pathname.replace(`/v2/${image_name}`, ""); - - // If there is a slash and the first part is not an allowed user, fail - var image_name_parts = image_name.split("/"); - if (image_name_parts.length > 1 && !ALLOWED_USERS.includes(image_name_parts[0])) { - return new Response(`User does not exist ${image_name_parts[0]}`, { status: 404 }); - } - - // If there is no slash, add the default user to the image name - if (image_name_parts.length == 1) { - image_name = `${DEFAULT_USER}/${image_name}`; - } - - return Response.redirect(`https://ghcr.io/v2/${image_name}/${action_url}`, 302); + return Response.redirect(`https://ghcr.io/${url.pathname}`, 302); }