@@ -36,16 +36,48 @@ def stop(self):
3636 self .httpServer .server_close ()
3737
3838 def sendDataPacket (self , identifier , datapack ):
39- if self . players [ identifier ] is None :
39+ if identifier not in self . players :
4040 self .players [identifier ] = []
4141 self .players [identifier ].append (datapack )
4242
43+ def addFilterOrigin (self , origin ):
44+ if self .filters is None :
45+ self .filters = []
46+ self .filters .append (origin )
47+
48+ def removeFilterOrigin (self , origin ):
49+ if self .filters is None :
50+ return
51+ self .filters .remove (origin )
52+
53+ def banIp (self , ip ):
54+ if self .bannedIps is None :
55+ self .bannedIps = []
56+ self .bannedIps .append (ip )
57+
58+ def unbanIp (self , ip ):
59+ if self .bannedIps is None :
60+ return
61+ self .bannedIps .remove (ip )
62+
4363 class ProcessDatapackServer (BaseHTTPRequestHandler ):
4464
4565 def do_POST (self ):
66+ if (self .server .serverFat .bannedIps is not None and self .client_address [0 ] in self .server .serverFat .bannedIps ):
67+ self .send_response (403 )
68+ self .end_headers ()
69+ return
4670 url = str (self .path )
4771 if url != "/ServerWebGamePost" :
4872 return
73+ if (self .server .serverFat .filters is not None and self .headers ['Origin' ] not in self .server .serverFat .filters ):
74+ self .send_response (403 )
75+ self .end_headers ()
76+ return
77+ allow = ',' .join (self .filters ) if self .filters and len (self .filters ) > 0 else '*'
78+ self .send_header ('Access-Control-Allow-Origin' , allow )
79+ self .send_header ('Access-Control-Allow-Methods' , "POST" )
80+ self .send_header ('Access-Control-Allow-Headers' , "Content-Type" )
4981 try :
5082 datapack = json .loads (self .rfile .read (int (self .headers ['Content-Length' ])))
5183 self .processDatapack (datapack )
@@ -63,6 +95,10 @@ def do_POST(self):
6395 self .wfile .write (str (e ).encode ('utf-8' ))
6496
6597 def do_GET (self ):
98+ if (self .server .serverFat .bannedIps is not None and self .client_address [0 ] in self .server .serverFat .bannedIps ):
99+ self .send_response (403 )
100+ self .end_headers ()
101+ return
66102 url = str (self .path )
67103 if url != "/favicon.ico" :
68104 self .send_response (404 )
@@ -77,5 +113,17 @@ def do_GET(self):
77113 with open (self .server .serverFat .imgSrc , "rb" ) as logo :
78114 self .wfile .write (logo .read ())
79115
116+ def do_OPTIONS (self ):
117+ if (self .server .serverFat .bannedIps is not None and self .client_address [0 ] in self .server .serverFat .bannedIps ):
118+ self .send_response (403 )
119+ self .end_headers ()
120+ return
121+ self .send_response (200 )
122+ allow = ',' .join (self .filters ) if self .filters and len (self .filters ) > 0 else '*'
123+ self .send_header ('Access-Control-Allow-Origin' , allow )
124+ self .send_header ('Access-Control-Allow-Methods' , "POST" )
125+ self .send_header ('Access-Control-Allow-Headers' , "Content-Type" )
126+ self .end_headers ()
127+
80128 def processDatapack (self , datapack ):
81129 pass
0 commit comments