diff --git a/docker-compose.yml b/docker-compose.yml index c6cd1aa3f206f4e16a67ab86040bedee6de1fef7..87a27d7807ce3f66d55949544fa419f8e02f856b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,6 +19,7 @@ services: restart: unless-stopped container_name: proxy volumes: + - ./etc/nginx/vhost.d/default:/etc/nginx/vhost.d/default - /mnt/data/html:/usr/share/nginx/html - /mnt/data/vhosts:/etc/nginx/vhost.d - /mnt/data/certs:/etc/nginx/certs:ro diff --git a/etc/nginx/vhost.d/default b/etc/nginx/vhost.d/default new file mode 100644 index 0000000000000000000000000000000000000000..07c6b072ba838626ff1a22c8d577fce5df416f7b --- /dev/null +++ b/etc/nginx/vhost.d/default @@ -0,0 +1,5 @@ +add_header Content-Security-Policy "frame-ancestors 'self'"; +add_header Referrer-Policy "no-referrer, strict-origin-when-cross-origin"; +add_header X-Frame-Options "SAMEORIGIN"; +add_header X-XSS-Protection "1; mode=block"; +add_header X-Content-Type-Options "nosniff"; diff --git a/searx/templates/eelo/base.html b/searx/templates/eelo/base.html index 31fb8160f4358a6e05ebfc32e8986f3f94bd752d..94dae554ad56ab34361792c92761be4b6128f9ff 100644 --- a/searx/templates/eelo/base.html +++ b/searx/templates/eelo/base.html @@ -89,7 +89,7 @@ e Foundation 2018-2019, {{ _('Powered by') }} Spot - {{ searx_version }}.
An open-source metasearch engine forked from Searx. + {{ metadata_version }}.
An open-source metasearch engine forked from Searx {{ searx_version }}. {{ _('About') }} {{ _('Privacy') }} diff --git a/searx/version.py b/searx/version.py index 473eb722d04489ddf53a0f4685ec13fc3c231959..11bbcbffe0df864ff2f9066fb03d874f7d9b05dd 100644 --- a/searx/version.py +++ b/searx/version.py @@ -22,3 +22,9 @@ try: VERSION_STRING = get_distribution("searx").version except DistributionNotFound: VERSION_STRING = "0.0.0" + +try: + SEARX_VERSION, METADATA_VERSION = VERSION_STRING.split("+") +except ValueError: + SEARX_VERSION = VERSION_STRING + METADATA_VERSION = "" diff --git a/searx/webapp.py b/searx/webapp.py index fea6046e2a1859409af6ca76b39ed73d402b1473..36f361232f27079328c827d555a5c6725f19f17e 100644 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -52,7 +52,7 @@ from searx.utils import ( get_static_files, get_result_templates, get_themes, gen_useragent, dict_subset, prettify_url, match_language ) -from searx.version import VERSION_STRING +from searx.version import VERSION_STRING, SEARX_VERSION, METADATA_VERSION from searx.languages import language_codes as languages from searx.search import Search from searx.search_database import RedisCache @@ -333,7 +333,8 @@ def render(template_name, override_theme=None, **kwargs): if locale in rtl_locales and 'rtl' not in kwargs: kwargs['rtl'] = True - kwargs['searx_version'] = VERSION_STRING + kwargs['searx_version'] = SEARX_VERSION + kwargs['metadata_version'] = METADATA_VERSION kwargs['method'] = request.preferences.get_value('method') @@ -784,34 +785,41 @@ def clear_cookies(): @app.route('/config') def config(): - return jsonify({'categories': categories.keys(), - 'engines': [{'name': engine_name, - 'categories': engine.categories, - 'shortcut': engine.shortcut, - 'enabled': not engine.disabled, - 'paging': engine.paging, - 'language_support': engine.language_support, - 'supported_languages': - engine.supported_languages.keys() - if isinstance(engine.supported_languages, dict) - else engine.supported_languages, - 'safesearch': engine.safesearch, - 'time_range_support': engine.time_range_support, - 'timeout': engine.timeout} - for engine_name, engine in engines.items()], - 'plugins': [{'name': plugin.name, - 'enabled': plugin.default_on} - for plugin in plugins], - 'instance_name': settings['general']['instance_name'], - 'locales': settings['locales'], - 'default_locale': settings['ui']['default_locale'], - 'autocomplete': settings['search']['autocomplete'], - 'safe_search': settings['search']['safe_search'], - 'default_theme': settings['ui']['default_theme'], - 'version': VERSION_STRING, - 'doi_resolvers': [r for r in settings['doi_resolvers']], - 'default_doi_resolver': settings['default_doi_resolver'], - }) + return jsonify( + { + "categories": list(categories.keys()), + "engines": [ + { + "name": engine_name, + "categories": engine.categories, + "shortcut": engine.shortcut, + "enabled": not engine.disabled, + "paging": engine.paging, + "language_support": engine.language_support, + "supported_languages": list(engine.supported_languages.keys()) + if isinstance(engine.supported_languages, dict) + else engine.supported_languages, + "safesearch": engine.safesearch, + "time_range_support": engine.time_range_support, + "timeout": engine.timeout, + } + for engine_name, engine in engines.items() + ], + "plugins": [ + {"name": plugin.name, "enabled": plugin.default_on} + for plugin in plugins + ], + "instance_name": settings["general"]["instance_name"], + "locales": settings["locales"], + "default_locale": settings["ui"]["default_locale"], + "autocomplete": settings["search"]["autocomplete"], + "safe_search": settings["search"]["safe_search"], + "default_theme": settings["ui"]["default_theme"], + "version": VERSION_STRING, + "doi_resolvers": [r for r in settings["doi_resolvers"]], + "default_doi_resolver": settings["default_doi_resolver"], + } + ) @app.errorhandler(404) diff --git a/tests/functional/test_api.py b/tests/functional/test_api.py index b5c31eba48a864ddd7bcbec2e90fe74c23230489..330bc9ab7cb85c45922174d67a6a0c8afbfb478a 100644 --- a/tests/functional/test_api.py +++ b/tests/functional/test_api.py @@ -27,3 +27,9 @@ def test_index(ctx, redisdb): assert len(response["results"]) > 5 assert len(response["image_results"]) == 5 assert len(response['videos_results']) == 2 + + +def test_config(ctx): + res = requests.get(ctx.url + "/config") + assert res.status_code == 200 + assert res.json()["instance_name"] == "/e/ spot"