Initial server source import
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
import argparse
|
||||
import http.server
|
||||
import json
|
||||
import os
|
||||
import ssl
|
||||
|
||||
|
||||
class Handler(http.server.BaseHTTPRequestHandler):
|
||||
protocol_version = 'HTTP/1.1'
|
||||
|
||||
def do_POST(self):
|
||||
length = int(self.headers.get('Content-Length', '0'))
|
||||
if length < 0 or length > 1024 * 1024:
|
||||
self.send_error(413)
|
||||
return
|
||||
self.rfile.read(length)
|
||||
self.send_response(204)
|
||||
self.send_header('Content-Length', '0')
|
||||
self.send_header('Retry-After', '1')
|
||||
self.end_headers()
|
||||
|
||||
def log_message(self, _format, *_args):
|
||||
pass
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--cert', required=True)
|
||||
parser.add_argument('--key', required=True)
|
||||
parser.add_argument('--port', required=True, type=int)
|
||||
parser.add_argument('--ready-file', required=True)
|
||||
args = parser.parse_args()
|
||||
|
||||
server = http.server.ThreadingHTTPServer(('127.0.0.1', args.port), Handler)
|
||||
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
|
||||
context.load_cert_chain(args.cert, args.key)
|
||||
server.socket = context.wrap_socket(server.socket, server_side=True)
|
||||
with open(args.ready_file, 'x', encoding='ascii') as handle:
|
||||
json.dump({'port': server.server_port}, handle, separators=(',', ':'))
|
||||
handle.write('\n')
|
||||
os.chmod(args.ready_file, 0o600)
|
||||
server.serve_forever()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user