47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
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()
|