mirror of
https://github.com/multipleof4/4ev.link.git
synced 2026-01-13 23:57:55 +00:00
Fix: Allow Pages to handle static root by calling next()
This commit is contained in:
@@ -1,13 +1,33 @@
|
|||||||
const C='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',L=4,H={'Access-Control-Allow-Origin':'*'}
|
const C='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',L=4,H={'Access-Control-Allow-Origin':'*'}
|
||||||
const r=()=>[...Array(L)].map(()=>C[Math.random()*C.length|0]).join('')
|
const r=()=>[...Array(L)].map(()=>C[Math.random()*C.length|0]).join('')
|
||||||
|
|
||||||
export async function onRequest({request, env}){
|
export async function onRequest({request, env, next}){
|
||||||
if(request.method==='OPTIONS')return new Response(null,{headers:{...H,'Access--Allow-Methods':'POST','Access-Control-Allow-Headers':'Content-Type'}})
|
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),p=u.pathname.slice(1)
|
|
||||||
|
|
||||||
if(request.method==='POST' && !p){try{let{url:t}=await request.json();new URL(t);let s;do s=r();while(await env.EV.get(s)!=null);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})}}
|
const u=new URL(request.url)
|
||||||
|
|
||||||
if(p){const t=await env.EV.get(p);if(t)return Response.redirect(t,302)}
|
// Handle POST request to create a link (API call)
|
||||||
|
if(u.pathname==='/'&&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})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return new Response('Not Found',{status:404,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.
|
||||||
|
return next()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user