init
This commit is contained in:
commit
e74e88e88f
84
httpserver.py
Normal file
84
httpserver.py
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
from http.server import HTTPServer, BaseHTTPRequestHandler
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from os import listdir
|
||||||
|
from os.path import isfile, join, getsize
|
||||||
|
|
||||||
|
import hashlib
|
||||||
|
|
||||||
|
import json
|
||||||
|
|
||||||
|
net_port = 28960
|
||||||
|
|
||||||
|
fs_game_dir = 'mods/arzxsimon'
|
||||||
|
fs_base_path = ''
|
||||||
|
|
||||||
|
class HttpServer(BaseHTTPRequestHandler):
|
||||||
|
|
||||||
|
def do_GET(self):
|
||||||
|
|
||||||
|
if self.path == '/list':
|
||||||
|
json_response = []
|
||||||
|
path = join(fs_base_path, fs_game_dir)
|
||||||
|
files = [f for f in listdir(path) if isfile(join(path, f)) and '_svr_' not in f]
|
||||||
|
files = [f for f in files if f == 'mod.ff' or '.iwd' in f]
|
||||||
|
|
||||||
|
for file in files:
|
||||||
|
file_path = join(path, file)
|
||||||
|
size = getsize(file_path)
|
||||||
|
sha256 = hashlib.sha256()
|
||||||
|
|
||||||
|
with open(file_path, 'rb') as f:
|
||||||
|
while True:
|
||||||
|
data = f.read(4096)
|
||||||
|
if not data:
|
||||||
|
break
|
||||||
|
sha256.update(data)
|
||||||
|
|
||||||
|
json_response.append({
|
||||||
|
'name': file,
|
||||||
|
'size': size,
|
||||||
|
'sha256': sha256.hexdigest().upper()
|
||||||
|
})
|
||||||
|
|
||||||
|
self.send_response(200)
|
||||||
|
self.send_header('Content-Type', 'application/json')
|
||||||
|
self.end_headers()
|
||||||
|
self.wfile.write(bytes(json.dumps(json_response), 'utf-8'))
|
||||||
|
|
||||||
|
elif self.path.startswith('/file'):
|
||||||
|
uri = self.path.replace('\\', '/')
|
||||||
|
uri = uri[6:]
|
||||||
|
|
||||||
|
if '_svr_' in uri:
|
||||||
|
m = 'Forbidden'
|
||||||
|
self.send_error(403, m)
|
||||||
|
|
||||||
|
if '.iwd' not in uri and uri != 'mod.ff':
|
||||||
|
m = 'Forbidden'
|
||||||
|
self.send_error(403, m)
|
||||||
|
|
||||||
|
path = join(fs_base_path, fs_game_dir)
|
||||||
|
file = join(path, uri)
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(file, 'rb') as f:
|
||||||
|
content = f.read()
|
||||||
|
|
||||||
|
self.send_response(200)
|
||||||
|
self.send_header('Content-Type', 'application/octet-stream')
|
||||||
|
self.send_header('Content-length', str(len(content)))
|
||||||
|
self.send_header("Connection", "close")
|
||||||
|
self.end_headers()
|
||||||
|
self.wfile.write(content)
|
||||||
|
|
||||||
|
except FileNotFoundError:
|
||||||
|
m = 'Not Found ' + self.path
|
||||||
|
self.send_error(400, m)
|
||||||
|
else:
|
||||||
|
m = 'Unsupported URI: ' + self.path
|
||||||
|
self.send_error(400, m)
|
||||||
|
|
||||||
|
|
||||||
|
httpd = HTTPServer(('localhost', net_port), HttpServer)
|
||||||
|
httpd.serve_forever()
|
Loading…
x
Reference in New Issue
Block a user