import { connect } from 'cloudflare:sockets'; var TOKEN_URL = "X_TOKEN_URL"; var WPAD_URL = "X_WPAD_URL"; var CLI_URL = "X_CLI_URL" var tokenmap = {}; var tokenSyncTime = 0; var syncTokens = async ()=>{ //let res = await fetch(TOKEN_URL, {}).then(res=>{ // return res.json() //}) let res = { "iamissupperman":9820768171317 } tokenSyncTime = new Date().getTime(); Object.assign(tokenmap, res); //console.log(tokenmap); } export default{ async fetch(request, env){ if (Object.keys(tokenmap).length == 0){ await syncTokens(); } else if(new Date().getTime() - 10*1000 > tokenSyncTime) { syncTokens(); } const upgradeHeader=request.headers.get("Upgrade"); if(upgradeHeader!=="websocket"){ var url = request.url.split("?token=")[0]; var token = request.url.split("?token=")[1]; if (!token || !tokenmap[token] || tokenmap[token] < new Date().getTime()) { return new Response("Forbidden", {status: 403}); } try { console.log(url); if(url.length > 9 && url.substring(url.length-9) === "/wpad.dat") { return await fetch(WPAD_URL, {}) } else if(url.length > 7 && url.substring(url.length-7) === "/cli.js") { return await fetch(CLI_URL, {}) } } catch(e) { return new Response("Server error", {status: 500}); } return new Response("

可以连接

", { status:200, headers:{ "Content-Type":"text/html" } }); } const [client, server]=Object.values(new WebSocketPair()); server.accept(); server.addEventListener('message',({data})=>{ try{ const {hostname,port,psw}=JSON.parse(data); if(!tokenmap[psw]) throw 'Illegal-User'; const socket=connect({hostname,port}); new ReadableStream({ start(controller){ server.onmessage= ({data})=>controller.enqueue(data); server.onerror=e=>controller.error(e); server.onclose=e=>controller.close(e); }, cancel(reason){server.close();} }).pipeTo(socket.writable); socket.readable.pipeTo(new WritableStream({ start(controller){server.onerror=e=>controller.error(e);}, write(chunk){server.send(chunk);} })); }catch(error){ server.close(); } },{once:true}); return new Response(null, {status:101, webSocket:client}); } }