Ejemplo n.º 1
0
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'
Ejemplo n.º 2
0
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