x-undefined-2 commited on
Commit
f58bc9f
·
verified ·
1 Parent(s): c27c5c6

Update index.ts

Browse files
Files changed (1) hide show
  1. index.ts +65 -30
index.ts CHANGED
@@ -1,31 +1,66 @@
1
- import { connect } from 'cloudflare:sockets';
2
- const passwd='X_PASSWORD';
3
-
4
- export default{
5
- async fetch(request){
6
- const upgradeHeader=request.headers.get("Upgrade");
7
- if(upgradeHeader!=="websocket") return new Response("hello world!", {status:200});
8
- const [client, server]=Object.values(new WebSocketPair());
9
- server.accept();
10
- server.addEventListener('message',({data})=>{
11
- try{
12
- const {hostname,port,psw}=JSON.parse(data);
13
- if(passwd!=psw) throw 'Illegal-User';
14
- const socket=connect({hostname,port});
15
- new ReadableStream({
16
- start(controller){
17
- server.onmessage= ({data})=>controller.enqueue(data);
18
- server.onerror=e=>controller.error(e);
19
- server.onclose=e=>controller.close(e);
20
- },
21
- cancel(reason){server.close();}
22
- }).pipeTo(socket.writable);
23
- socket.readable.pipeTo(new WritableStream({
24
- start(controller){server.onerror=e=>controller.error(e);},
25
- write(chunk){server.send(chunk);}
26
- }));
27
- }catch(error){ server.close(); }
28
- },{once:true});
29
- return new Response(null, {status:101, webSocket:client});
30
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  }
 
1
+ import { connect } from 'cloudflare:sockets';
2
+ var TOKEN_URL = "X_TOKEN_URL";
3
+ var WPAD_PATH = "X_WPAD_URL";
4
+ var CLI_PATH = "X_CLI_PATH"
5
+
6
+ var tokenmap = {};
7
+ var tokenSyncTime = 0;
8
+
9
+ var syncTokens = async ()=>{
10
+ let res = await fetch(TOKEN_URL, {}).then(res=>{
11
+ return res.json()
12
+ })
13
+ tokenSyncTime = new Date().getTime();
14
+ Object.assign(tokenmap, res);
15
+ console.log(tokenmap);
16
+ }
17
+
18
+ export default{
19
+ async fetch(request, env){
20
+ if (Object.keys(tokenmap).length == 0){
21
+ await syncTokens();
22
+ } else if(new Date().getTime() - 10*1000 > tokenSyncTime) {
23
+ syncTokens();
24
+ }
25
+
26
+ const upgradeHeader=request.headers.get("Upgrade");
27
+ var url = request.url.split("token=")[0];
28
+ var token = request.url.split("token=")[1];
29
+ if (!token || !tokenmap[token] || tokenmap[token] < new Date().getTime()) {
30
+ return new Response("Forbidden", {status: 403});
31
+ }
32
+ try {
33
+ console.log(url);
34
+ if(url.length > 9 && url.substring(url.length-9) === "/wpad.dat") {
35
+ return await fetch(WPAD_PATH, {})
36
+ } else if(url.length > 7 && url.substring(url.length-7) === "/cli.js") {
37
+ return await fetch(CLI_PATH, {})
38
+ }
39
+ } catch(e) {
40
+ return new Response("Server error", {status: 500});
41
+ }
42
+ if(upgradeHeader!=="websocket") return new Response("可以<a href='./cli.js'>连接</a>了", {status:200});
43
+ const [client, server]=Object.values(new WebSocketPair());
44
+ server.accept();
45
+ server.addEventListener('message',({data})=>{
46
+ try{
47
+ const {hostname,port,psw}=JSON.parse(data);
48
+ if(passwd!=psw) throw 'Illegal-User';
49
+ const socket=connect({hostname,port});
50
+ new ReadableStream({
51
+ start(controller){
52
+ server.onmessage= ({data})=>controller.enqueue(data);
53
+ server.onerror=e=>controller.error(e);
54
+ server.onclose=e=>controller.close(e);
55
+ },
56
+ cancel(reason){server.close();}
57
+ }).pipeTo(socket.writable);
58
+ socket.readable.pipeTo(new WritableStream({
59
+ start(controller){server.onerror=e=>controller.error(e);},
60
+ write(chunk){server.send(chunk);}
61
+ }));
62
+ }catch(error){ server.close(); }
63
+ },{once:true});
64
+ return new Response(null, {status:101, webSocket:client});
65
+ }
66
  }