示例#1
0
def wsgi_apps():
    """Wsgi app fixture."""
    from invenio_base.wsgi import create_wsgi_factory, wsgi_proxyfix
    from invenio_base.app import create_app_factory

    def _config(app, **kwargs):
        app.config.update(SECRET_KEY='SECRET_KEY',
                          TESTING=True,
                          APP_DEFAULT_SECURE_HEADERS=dict(force_https=False, ))

    # API
    create_api = create_app_factory(
        'invenio',
        config_loader=_config,
        wsgi_factory=wsgi_proxyfix(),
    )
    # UI
    create_ui = create_app_factory(
        'invenio',
        config_loader=_config,
        wsgi_factory=wsgi_proxyfix(),
    )
    # Combined
    create_app = create_app_factory(
        'invenio',
        config_loader=_config,
        wsgi_factory=wsgi_proxyfix(create_wsgi_factory({'/api': create_api})),
    )
    return create_app, create_ui, create_api
示例#2
0
def test_proxyfix_wsgi_config(num_proxies, proxy_config):
    """Test wsgi factory creation with APP_WSGI_CONFIG set."""
    if version.parse(werkzeug_version) < version.parse('0.15.0'):
        pytest.skip("Unsupported configuration for Werkzeug<0.15.0")

    app = Flask('app')
    app.config['PROXYFIX_CONFIG'] = proxy_config

    data = [
        # application instance
        {
            'x_for': '1.2.3.4',
            'x_proto': 'http',
            'x_host': 'localhost',
            'x_port': '80',
            'x_prefix': '',
        },
        # proxy number 1
        {
            'x_for': '5.6.7.8',
            'x_proto': 'https',
            'x_host': 'host.external',
            'x_port': '443',
            'x_prefix': 'prefix.external',
        }
    ]

    @app.route('/')
    def appview():
        data = {
            'x_for': request.environ.get('REMOTE_ADDR'),
            'x_proto': request.environ.get('wsgi.url_scheme'),
            'x_host': request.environ.get('SERVER_NAME'),
            'x_port': request.environ.get('SERVER_PORT'),
            'x_prefix': request.environ.get('SCRIPT_NAME')
        }
        return jsonify(data)

    # Test factory creation
    app.wsgi_app = wsgi_proxyfix()(app)
    e = {
        'REMOTE_ADDR': data[0].get('x_for'),
        'wsgi.url_scheme': data[0].get('x_proto'),
        'HTTP_HOST': data[0].get('x_host'),
        'SERVER_PORT': data[0].get('x_port'),
        'SCRIPT_NAME': data[0].get('x_prefix'),
    }

    with app.test_client() as client:
        h = {
            'X-Forwarded-For': data[1].get('x_for'),
            'X-Forwarded-Proto': data[1].get('x_proto'),
            'X-Forwarded-Host': data[1].get('x_host'),
            'X-Forwarded-Port': data[1].get('x_port'),
            'X-Forwarded-Prefix': data[1].get('x_prefix'),
        }
        res = client.get('/', headers=h, environ_base=e)
        assert json.loads(res.get_data(as_text=True)) == data[num_proxies]
示例#3
0
def test_proxyfix_wsgi_config(num_proxies, proxy_config):
    """Test wsgi factory creation with APP_WSGI_CONFIG set."""
    if version.parse(werkzeug_version) < version.parse("0.15.0"):
        pytest.skip("Unsupported configuration for Werkzeug<0.15.0")

    app = Flask("app")
    app.config["PROXYFIX_CONFIG"] = proxy_config

    data = [
        # application instance
        {
            "x_for": "1.2.3.4",
            "x_proto": "http",
            "x_host": "localhost",
            "x_port": "80",
            "x_prefix": "",
        },
        # proxy number 1
        {
            "x_for": "5.6.7.8",
            "x_proto": "https",
            "x_host": "host.external",
            "x_port": "443",
            "x_prefix": "prefix.external",
        },
    ]

    @app.route("/")
    def appview():
        data = {
            "x_for": request.environ.get("REMOTE_ADDR"),
            "x_proto": request.environ.get("wsgi.url_scheme"),
            "x_host": request.environ.get("SERVER_NAME"),
            "x_port": request.environ.get("SERVER_PORT"),
            "x_prefix": request.environ.get("SCRIPT_NAME"),
        }
        return jsonify(data)

    # Test factory creation
    app.wsgi_app = wsgi_proxyfix()(app)
    e = {
        "REMOTE_ADDR": data[0].get("x_for"),
        "wsgi.url_scheme": data[0].get("x_proto"),
        "HTTP_HOST": data[0].get("x_host"),
        "SERVER_PORT": data[0].get("x_port"),
        "SCRIPT_NAME": data[0].get("x_prefix"),
    }

    with app.test_client() as client:
        h = {
            "X-Forwarded-For": data[1].get("x_for"),
            "X-Forwarded-Proto": data[1].get("x_proto"),
            "X-Forwarded-Host": data[1].get("x_host"),
            "X-Forwarded-Port": data[1].get("x_port"),
            "X-Forwarded-Prefix": data[1].get("x_prefix"),
        }
        res = client.get("/", headers=h, environ_base=e)
        assert json.loads(res.get_data(as_text=True)) == data[num_proxies]
示例#4
0
def test_proxyfix(proxies, data):
    """Test wsgi factory creation."""
    app = Flask('app')
    app.config['WSGI_PROXIES'] = proxies

    @app.route('/')
    def appview():
        return str(request.remote_addr)

    # Test factory creation
    app.wsgi_app = wsgi_proxyfix()(app)
    e = {'REMOTE_ADDR': '1.2.3.4'}

    with app.test_client() as client:
        h = {'X-Forwarded-For': '5.6.7.8, 4.3.2.1, 8.7.6.5'}
        assert client.get('/', headers=h, environ_base=e).data == data
示例#5
0
def test_proxyfix_wsgi_proxies(proxies, data):
    """Test wsgi factory creation."""
    app = Flask("app")
    app.config["WSGI_PROXIES"] = proxies

    @app.route("/")
    def appview():
        return str(request.remote_addr)

    # Test factory creation
    app.wsgi_app = wsgi_proxyfix()(app)
    e = {"REMOTE_ADDR": "1.2.3.4"}

    with app.test_client() as client:
        h = {"X-Forwarded-For": "5.6.7.8, 4.3.2.1, 8.7.6.5"}
        assert client.get("/", headers=h, environ_base=e).data == data
示例#6
0
    extension_entry_points=['invenio_base.apps'],
    blueprint_entry_points=['invenio_base.blueprints'],
    converter_entry_points=['invenio_base.converters'],
    instance_path=instance_path,
    static_folder=static_folder,
)
"""Create CLI/Celery application."""

create_api = create_app_factory(
    'zenodo',
    config_loader=conf_loader,
    extension_entry_points=['invenio_base.api_apps'],
    blueprint_entry_points=['invenio_base.api_blueprints'],
    converter_entry_points=['invenio_base.api_converters'],
    instance_path=instance_path,
)
"""Create Flask API application."""

create_app = create_app_factory(
    'zenodo',
    config_loader=conf_loader,
    extension_entry_points=['invenio_base.apps'],
    blueprint_entry_points=['invenio_base.blueprints'],
    converter_entry_points=['invenio_base.converters'],
    wsgi_factory=wsgi_proxyfix(
        create_wsgi_statsd_factory({'/api': create_api})),
    instance_path=instance_path,
    static_folder=static_folder,
)
"""Create Flask UI application."""
示例#7
0
    class Request(TrustedHostsMixin, FlaskBase.request_class):
        pass

    class Flask(FlaskBase):
        request_class = Request

    return Flask


create_api = create_app_factory(
    'invenio',
    config_loader=config_loader,
    blueprint_entry_points=['invenio_base.api_blueprints'],
    extension_entry_points=['invenio_base.api_apps'],
    converter_entry_points=['invenio_base.api_converters'],
    wsgi_factory=wsgi_proxyfix(),
    instance_path=instance_path,
    root_path=instance_path,
    app_class=app_class(),
)
"""Flask application factory for Invenio REST API."""

create_ui = create_app_factory(
    'invenio',
    config_loader=config_loader,
    blueprint_entry_points=['invenio_base.blueprints'],
    extension_entry_points=['invenio_base.apps'],
    converter_entry_points=['invenio_base.converters'],
    wsgi_factory=wsgi_proxyfix(),
    instance_path=instance_path,
    static_folder=static_folder,
    local_templates_path = os.path.join(app.instance_path, 'templates')
    if os.path.exists(local_templates_path):
        # Let's customize the template loader to look into packages
        # and application templates folders.
        app.jinja_loader = ChoiceLoader([
            FileSystemLoader(local_templates_path),
            app.jinja_loader,
        ])

    app.jinja_options = dict(
        app.jinja_options,
        cache_size=1000,
        bytecode_cache=BytecodeCache(app)
    )

    app.url_map.strict_slashes = False
    invenio_config_loader(app, **kwargs_config)


create_api = create_app_factory(
    'invenio',
    config_loader=config_loader,
    blueprint_entry_points=['invenio_base.api_blueprints'],
    extension_entry_points=['invenio_base.api_apps'],
    converter_entry_points=['invenio_base.api_converters'],
    wsgi_factory=wsgi_proxyfix(),
    instance_path=instance_path,
    app_class=app_class(),
)
"""Flask application factory for Invenio REST API."""
    config_loader=conf_loader,
    blueprint_entry_points=['invenio_base.api_blueprints'],
    extension_entry_points=['invenio_base.api_apps'],
    converter_entry_points=['invenio_base.api_converters'],
    instance_path=instance_path,
    static_folder=static_folder,
)

# create_app = create_app_factory(
#     'cap',
#     config_loader=conf_loader,
#     blueprint_entry_points=['invenio_base.blueprints'],
#     extension_entry_points=['invenio_base.apps'],
#     instance_path=instance_path,
#     static_folder=static_folder,
# )

create_front = create_app_factory(
    'cap',
    config_loader=conf_loader,
    blueprint_entry_points=['cap.blueprints'],
    extension_entry_points=['cap.apps'],
    instance_path=instance_path,
    static_folder=static_folder,
    wsgi_factory=wsgi_proxyfix(
        create_wsgi_factory({
            '/api': create_api,
            # '/app': create_app, #TODO Remove this when everything restful
        })),
)
示例#10
0

def config_loader(app, **kwargs_config):
    invenio_config_loader = create_config_loader(config=config, env_prefix=env_prefix)
    result = invenio_config_loader(app, **kwargs_config)
    app.url_map.strict_slashes = False
    return result


create_api = create_app_factory(
    "inspirehep_api",
    config_loader=config_loader,
    blueprint_entry_points=["invenio_base.api_blueprints"],
    extension_entry_points=["invenio_base.api_apps"],
    converter_entry_points=["invenio_base.api_converters"],
    wsgi_factory=wsgi_proxyfix(),
    instance_path=instance_path,
    app_class=app_class(),
)
"""Flask application factory for Invenio REST API."""


create_app = create_app_factory(
    "inspirehep",
    config_loader=config_loader,
    blueprint_entry_points=["invenio_base.api_blueprints"],
    extension_entry_points=["invenio_base.api_apps"],
    converter_entry_points=["invenio_base.api_converters"],
    wsgi_factory=create_wsgi_factory({"/api": create_api}),
    instance_path=instance_path,
    app_class=app_class(),
示例#11
0
            mount: factory(**kwargs)
            for mount, factory in mounts_factories.items()
        }
        return DispatcherMiddlewareWithMatchingHostNameAndServerName(
            app.wsgi_app, mounts, app.config["SERVER_NAME"])

    return create_wsgi


create_api = create_app_factory(
    "inspirehep_api",
    config_loader=config_loader,
    blueprint_entry_points=["invenio_base.api_blueprints"],
    extension_entry_points=["invenio_base.api_apps"],
    converter_entry_points=["invenio_base.api_converters"],
    wsgi_factory=wsgi_proxyfix(),
    instance_path=instance_path,
    app_class=app_class(),
)
"""Flask application factory for Invenio REST API."""

create_app = create_app_factory(
    "inspirehep",
    config_loader=config_loader,
    blueprint_entry_points=["invenio_base.api_blueprints"],
    extension_entry_points=["invenio_base.api_apps"],
    converter_entry_points=["invenio_base.api_converters"],
    wsgi_factory=wsgi_proxyfix(create_wsgi_factory({"/api": create_api})),
    instance_path=instance_path,
    app_class=app_class(),
)
示例#12
0
    converter_entry_points=['invenio_base.api_converters'],
    instance_path=instance_path,
    static_folder=static_folder,
)


create_app = create_app_factory(
    'cap',
    config_loader=conf_loader,
    blueprint_entry_points=['invenio_base.blueprints'],
    extension_entry_points=['invenio_base.apps'],
    instance_path=instance_path,
    static_folder=static_folder,
)


create_front = create_app_factory(
    'cap',
    config_loader=conf_loader,
    blueprint_entry_points=['cap.blueprints'],
    extension_entry_points=['cap.apps'],
    instance_path=instance_path,
    static_folder=static_folder,
    wsgi_factory=wsgi_proxyfix(
        create_wsgi_factory({
            '/api': create_api,
            '/app': create_app,
        })),
)