mirror of https://gitlab.com/bashrc2/epicyon
53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
import http.server
|
|
import socketserver
|
|
from urllib.parse import urlparse, parse_qs
|
|
|
|
from .base import BaseStore, GetStore, PutStore, StoreError
|
|
from .memorystore import MemoryStore
|
|
|
|
memstore = MemoryStore()
|
|
|
|
class MagencStore(http.server.BaseHTTPRequestHandler):
|
|
def do_GET(self):
|
|
print(f"Request recieved: {self.path}")
|
|
try:
|
|
parsed = urlparse(self.path)
|
|
query = parsed.query
|
|
params = parse_qs(query)
|
|
xt = params['xt'][0]
|
|
result = memstore.get(xt)
|
|
except KeyError:
|
|
self.send_response(404)
|
|
self.end_headers()
|
|
self.wfile.write(f'Shard Not Found'.encode())
|
|
return
|
|
except ValueError as err:
|
|
self.send_response(400)
|
|
self.wfile.write(f"Malformed request: {err}".encode())
|
|
return
|
|
except Exception as err:
|
|
self.send_response(500)
|
|
self.wfile.write(f"Server Error: {err}".encode())
|
|
return
|
|
self.send_response(200)
|
|
self.send_header('Content-type', 'application/octet-stream')
|
|
self.end_headers()
|
|
self.wfile.write(result)
|
|
|
|
def do_POST(self):
|
|
#length = int(self.headers['Content-Length'])
|
|
#content = self.rfile.read(length)
|
|
content = self.rfile.read(32768)
|
|
try:
|
|
xt = memstore.put(content)
|
|
except ValueError as err:
|
|
self.send_response(400)
|
|
self.wfile.write(f"Malformed request: {err}".encode())
|
|
except Exception as err:
|
|
self.send_response(500)
|
|
self.wfile.write(f"Server Error: {err}".encode())
|
|
self.send_response(200)
|
|
self.send_header('Content-type', 'text/plain')
|
|
self.end_headers()
|
|
self.wfile.write(xt.encode())
|