def run(self): if (self['Key'] == 'data/key.pem') and (self['Cert'] == 'data/cert.pem'): if not os.path.exists(self['Key']) or not os.path.exists( self['Cert']) or self['RegenCert']: create_self_signed_cert() config = Config() config.ciphers = 'ALL' config.accesslog = './data/logs/access.log' config.bind = f"{self['BindIP']}:{self['Port']}" config.certfile = self['Cert'] config.keyfile = self['Key'] config.include_server_header = False # This doesn't seem to do anything? config.use_reloader = False config.debug = False """ While we could use the standard decorators to register these routes, using add_url_rule() allows us to create diffrent endpoint names programmatically and pass the classes self object to the routes """ http_blueprint = Blueprint(__name__, 'https') http_blueprint.before_request(self.check_if_naughty) #http_blueprint.after_request(self.make_normal) http_blueprint.add_url_rule('/<uuid:GUID>', 'key_exchange', self.key_exchange, methods=['POST']) http_blueprint.add_url_rule('/<uuid:GUID>', 'stage', self.stage, methods=['GET']) http_blueprint.add_url_rule('/<uuid:GUID>/jobs', 'jobs', self.jobs, methods=['GET']) http_blueprint.add_url_rule('/<uuid:GUID>/jobs/<job_id>', 'job_result', self.job_result, methods=['POST']) # Add a catch all route http_blueprint.add_url_rule('/', 'unknown_path', self.unknown_path, defaults={'path': ''}) http_blueprint.add_url_rule('/<path:path>', 'unknown_path', self.unknown_path, methods=['GET', 'POST']) #logging.getLogger('quart.app').setLevel(logging.DEBUG if state.args['--debug'] else logging.ERROR) #logging.getLogger('quart.serving').setLevel(logging.DEBUG if state.args['--debug'] else logging.ERROR) self.app = Quart(__name__) self.app.register_blueprint(http_blueprint) asyncio.run(serve(self.app, config))
def run(self): if (self['Key'] == f'{self.certs_path}/artic2_private.key') and ( self['Cert'] == f'{self.certs_path}/artic2_cert.pem'): if not os.path.exists(get_path_in_data_folder( "artic2_private.key")) or not os.path.exists( get_path_in_data_folder( "artic2_cert.pem")) or self['RegenCert']: create_self_signed_cert() config = Config() config.ciphers = 'ALL' config.accesslog = os.path.join(get_path_in_artic2("logs"), "access.log") config.bind = f"{self['BindIP']}:{self['Port']}" config.certfile = os.path.expanduser(self['Cert']) config.keyfile = os.path.expanduser(self['Key']) config.include_server_header = False config.use_reloader = False config.debug = False """ While we could use the standard decorators to register these routes, using add_url_rule() allows us to create diffrent endpoint names programmatically and pass the classes self object to the routes """ http_blueprint = Blueprint(__name__, 'https') http_blueprint.before_request(self.check_if_naughty) http_blueprint.add_url_rule('/<uuid:GUID>', 'key_exchange', self.key_exchange, methods=['POST']) http_blueprint.add_url_rule('/<uuid:GUID>', 'stage', self.stage, methods=['GET']) http_blueprint.add_url_rule('/<uuid:GUID>/jobs', 'jobs', self.jobs, methods=['GET']) http_blueprint.add_url_rule('/<uuid:GUID>/jobs/<job_id>', 'job_result', self.job_result, methods=['POST']) http_blueprint.add_url_rule('/', 'unknown_path', self.unknown_path, defaults={'path': ''}) http_blueprint.add_url_rule('/<path:path>', 'unknown_path', self.unknown_path, methods=['GET', 'POST']) self.app = Quart(__name__) self.app.register_blueprint(http_blueprint) asyncio.run(serve(self.app, config))
def serve_gateway(bind_address, port, use_ssl, asynchronous=False): """ Implementation of the edge.do_start_edge_proxy interface to start a Hypercorn server instance serving the LocalstackAwsGateway. """ from hypercorn import Config from localstack.aws.app import LocalstackAwsGateway from localstack.aws.serving.asgi import AsgiGateway from localstack.http.hypercorn import HypercornServer from localstack.services.generic_proxy import GenericProxy, install_predefined_cert_if_available # build server config config = Config() if isinstance(bind_address, str): bind_address = [bind_address] config.bind = [f"{addr}:{port}" for addr in bind_address] if use_ssl: install_predefined_cert_if_available() _, cert_file_name, key_file_name = GenericProxy.create_ssl_cert(serial_number=port) config.certfile = cert_file_name config.keyfile = key_file_name # build gateway loop = asyncio.new_event_loop() app = AsgiGateway(LocalstackAwsGateway(SERVICE_PLUGINS), event_loop=loop) # start serving gateway server = HypercornServer(app, config, loop) server.start() if not asynchronous: server.join() return server._thread