From 8f4f7b84654c723a3d340358d732cf32a0b7072a Mon Sep 17 00:00:00 2001 From: multipleof4 Date: Fri, 26 Sep 2025 20:27:41 -0700 Subject: [PATCH] Fix: Accept naked domains; normalize URLs --- functions/[[path]].js | 32 ++++++++------------------------ 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/functions/[[path]].js b/functions/[[path]].js index 322bdb6..10d9c42 100644 --- a/functions/[[path]].js +++ b/functions/[[path]].js @@ -1,33 +1,17 @@ -const C='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',L=4,H={'Access-Control-Allow-Origin':'*'} -const r=()=>[...Array(L)].map(()=>C[Math.random()*C.length|0]).join('') +const C='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',L=4,H={'Access-Control-Allow-Origin':'*'},r=_=>[...Array(L)].map(_=>C[Math.random()*C.length|0]).join(''),n=u=>{try{return new URL(u).href}catch(_){try{return new URL('https://'+u).href}catch(_){}}} -export async function onRequest({request, env, next}){ +export async function onRequest({request,env,next}){ if(request.method==='OPTIONS')return new Response(null,{headers:{...H,'Access-Control-Allow-Methods':'POST','Access-Control-Allow-Headers':'Content-Type'}}) - const u=new URL(request.url) - - // Handle POST request to create a link (API call) if(u.pathname==='/api/create'&&request.method==='POST'){ try{ - const{url:t}=await request.json(); - new URL(t); - let s; - do s=r();while(await env.EV.get(s)); - await env.EV.put(s,t); - const d={slug:s,target:t,shortUrl:`${u.origin}/${s}`}; - return new Response(JSON.stringify(d),{headers:{'Content-Type':'application/json',...H}}) - }catch(e){ - return new Response('Invalid URL',{status:400,headers:H}) - } + let{url:t}=await request.json();t=n(t);if(!t)throw 0 + let s;do s=r();while(await env.EV.get(s)) + await env.EV.put(s,t) + return new Response(JSON.stringify({slug:s,target:t,shortUrl:`${u.origin}/${s}`}),{headers:{'Content-Type':'application/json',...H}}) + }catch(_){return new Response('Invalid URL',{status:400,headers:H})} } - - // Handle GET request for a slug (Redirect) const p=u.pathname.slice(1) - if(p){ - const t=await env.EV.get(p) - if(t)return Response.redirect(t,302) - } - - // For all other requests (like GET /), pass them to the static asset handler. + if(p){const t=await env.EV.get(p);if(t)return Response.redirect(t,302)} return next() }