def test_process_rewrite_rules(): input = yaml.safe_load(''' hosts: - host: www.mango.com rewrite_rules: replace: v1: v2 servers: - localhost:8081 - localhost:8082 - host: www.apple.com servers: - localhost:9081 - localhost:9082 paths: - path: /mango servers: - localhost:8081 - localhost:8082 - path: /apple servers: - localhost:9081 - localhost:9082 ''') path = 'localhost:8081/v1' results = process_rewrite_rules(input, 'www.mango.com', path) assert results == 'localhost:8081/v2'
def router(path="/"): updated_register = healthcheck(register) host_header = request.headers["Host"] for entry in config["hosts"]: if host_header == entry["host"]: healthy_server = get_healthy_server(entry["host"], updated_register) if not healthy_server: return "No Backends servers available", 503 headers = process_rules(config, host_header, {k: v for k, v in request.headers.items()}, "header") params = process_rules(config, host_header, {k: v for k, v in request.args.items()}, "param") rewrite_path = "" if path == "v1": rewrite_path = process_rewrite_rules(config, host_header, path) response = requests.get("http://{}{}".format( healthy_server.endpoint, "/" + rewrite_path), headers=headers, params=params) return response.content, response.status_code for entry in config["paths"]: if ("/" + path) == entry["path"]: healthy_server = get_healthy_server(entry["path"], register) if not healthy_server: return "No Backends servers available", 503 response = requests.get("http://{}".format( healthy_server.endpoint)) return response.content, response.status_code return "Not Found", 404
def test_process_rewrite_rules(): input = yaml.safe_load( """ hosts: - host: www.anthrax.com rewrite_rules: replace: v1: v2 servers: - localhost:8081 - localhost:8082 - host: www.metallica.com servers: - localhost:9081 - localhost:9082 paths: - path: /anthrax servers: - localhost:8081 - localhost:8082 - path: /metallica servers: - localhost:9081 - localhost:9082 """ ) path = "localhost:8081/v1" results = process_rewrite_rules(input, "www.anthrax.com", path) assert results == "localhost:8081/v2"
def router(path='/'): updated_register = healthcheck(register) host_header = request.headers['Host'] if not process_firewall_rules_flag( config, host_header, request.environ['REMOTE_ADDR'], f'/{path}'): return 'Forbidden', 403 for entry in config['hosts']: if host_header == entry['host']: healthy_server = get_healthy_server(entry['host'], updated_register) if not healthy_server: return 'No backend servers available.', 503 headers = process_rules(config, host_header, {k: v for k, v in request.headers.items()}, 'header') params = process_rules(config, host_header, {k: v for k, v in request.args.items()}, 'param') rewrite_path = '' if path == 'v1': rewrite_path = process_rewrite_rules(config, host_header, path) response = requests.get( f'http://{healthy_server.endpoint}/{rewrite_path}', headers=headers, params=params) return response.content, response.status_code for entry in config['paths']: if ('/' + path) == entry['path']: healthy_server = get_healthy_server(entry['path'], register) if not healthy_server: return 'No backend servers available.', 503 healthy_server.open_connections += 1 response = requests.get(f'http://{healthy_server.endpoint}') healthy_server.open_connections -= 1 return response.content, response.status_code return 'Not Found', 404
def router(path="/"): updated_register = healthcheck(register) host_header = request.headers["Host"] header_dictionary = {k: v for k, v in request.headers.items()} if not process_firewall_rules_flag( config, host_header, request.environ["REMOTE_ADDR"], f"/{path}", header_dictionary, ): return "Forbidden", 403 for entry in config["hosts"]: try: algo = entry["algo"] except KeyError: pass if algo == "weight": try: weights = [weights for weights in entry["weights"]] except KeyError: weights = None else: weights = None if host_header == entry["host"]: healthy_server = get_healthy_server(entry["host"], updated_register, algo, weights) if not healthy_server: return "No backend servers available.", 503 headers = process_rules( config, host_header, {k: v for k, v in request.headers.items()}, "header", ) params = process_rules(config, host_header, {k: v for k, v in request.args.items()}, "param") post_data = process_rules(config, host_header, {k: v for k, v in request.data}, "post_data") cookies = process_rules(config, host_header, {k: v for k, v in request.cookies}, "cookie") rewrite_path = "" if path == "v1": rewrite_path = process_rewrite_rules(config, host_header, path) response = requests.get( f"http://{healthy_server.endpoint}/{rewrite_path}", headers=headers, params=params, data=post_data, cookies=cookies, ) return response.content, response.status_code for entry in config["paths"]: if ("/" + path) == entry["path"]: healthy_server = get_healthy_server(entry["path"], register) if not healthy_server: return "No backend servers available", 503 healthy_server.open_connections += 1 response = requests.get(f"http://{healthy_server.endpoint}") healthy_server.open_connections -= 1 return response.content, response.status_code return "Not Found", 404