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
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]
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]
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
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
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."""
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 })), )
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(),
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(), )
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, })), )