var PASSWORD = "admin123"; export default { async fetch(request, env) { var url = new URL(request.url); var cors = { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, PUT, DELETE, OPTIONS", "Access-Control-Allow-Headers": "Authorization, Content-Type" }; if (request.method === "OPTIONS") { return new Response(null, { headers: cors }); } var auth = request.headers.get("Authorization") || ""; var isAuth = auth === PASSWORD; if (url.pathname === "/api/verify" && request.method === "POST") { try { var b = await request.json(); return new Response(JSON.stringify({ success: b.password === PASSWORD }), { headers: { "Content-Type": "application/json" } }); } catch (e) { return new Response(JSON.stringify({ success: false }), { headers: { "Content-Type": "application/json" } }); } } if (url.pathname === "/api/file-content") { if (!isAuth) return new Response(JSON.stringify({ error: "Unauthorized" }), { status: 401 }); if (request.method === "GET") { var getKey = url.searchParams.get("key") || ""; var obj = await env.R2.get(getKey); if (!obj) return new Response("Not Found", { status: 404 }); var text = await obj.text(); return new Response(text, { headers: { "Content-Type": "text/plain", ...cors } }); } if (request.method === "PUT") { var putKey = url.searchParams.get("key") || ""; var body = await request.text(); await env.R2.put(putKey, body); return new Response(JSON.stringify({ success: true }), { headers: { "Content-Type": "application/json", ...cors } }); } } if (url.pathname === "/list") { try { var prefix = url.searchParams.get("prefix") || ""; var res = await env.R2.list({ prefix: prefix, delimiter: "/" }); var items = []; var folders = res.delimitedPrefixes || []; var files = res.objects || []; for (var i = 0; i < folders.length; i++) { items.push({ name: folders[i], isFolder: true }); } for (var j = 0; j < files.length; j++) { items.push({ name: files[j].key, isFolder: false, size: files[j].size, uploaded: files[j].uploaded }); } return new Response(JSON.stringify(items), { headers: { "Content-Type": "application/json", ...cors } }); } catch (e) { return new Response(JSON.stringify({ error: "R2 Error: " + e.message }), { status: 500, headers: { "Content-Type": "application/json", ...cors } }); } } if (url.pathname.startsWith("/file/")) { var key = decodeURIComponent(url.pathname.slice(6)); if (request.method === "GET") { var obj = await env.R2.get(key); if (!obj) return new Response("Not Found", { status: 404, headers: cors }); var hdrs = new Headers(); obj.writeHttpMetadata(hdrs); hdrs.set("Access-Control-Allow-Origin", "*"); hdrs.set("Cache-Control", "public, max-age=3600"); return new Response(obj.body, { headers: hdrs }); } if (!isAuth) { return new Response(JSON.stringify({ error: "Unauthorized" }), { status: 401, headers: { "Content-Type": "application/json", ...cors } }); } if (request.method === "PUT") { await env.R2.put(key, request.body); return new Response(JSON.stringify({ success: true }), { headers: { "Content-Type": "application/json", ...cors } }); } if (request.method === "DELETE") { await env.R2.delete(key); return new Response(JSON.stringify({ success: true }), { headers: { "Content-Type": "application/json", ...cors } }); } } var html = `
KLIK UNTUK UPLOAD
Ke: /