diff --git a/requirements.txt b/requirements.txt index e9fd942d1..95b85578e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,3 +14,4 @@ httpx-socks[asyncio]==0.7.2 langdetect==1.0.9 setproctitle==1.2.2 redis==4.1.1 +mistletoe==0.8.1 diff --git a/searx/help/about.md b/searx/help/about.md new file mode 100644 index 000000000..521022414 --- /dev/null +++ b/searx/help/about.md @@ -0,0 +1,71 @@ +# About [searxng][url_for:index] + +SearXNG is a fork from the well-known [searx] [metasearch engine], aggregating +the results of other [search engines][url_for:preferences] while not storing +information about its users. + +More about SearXNG ... + +* [SearXNG sources][brand.git_url] +* [weblate] + +--- + +## Why use it? + +* SearXNG may not offer you as personalised results as Google, + but it doesn't generate a profile about you. + +* SearXNG doesn't care about what you search for, never shares anything + with a third party, and it can't be used to compromise you. + +* SearXNG is free software, the code is 100% open and you can help + to make it better. See more on [SearXNG sources][brand.git_url]. + +If you do care about privacy, want to be a conscious user, or otherwise +believe in digital freedom, make SearXNG your default search engine or run +it on your own server + +## Technical details - How does it work? + +SearXNG is a [metasearch engine], inspired by the [seeks project]. It provides +basic privacy by mixing your queries with searches on other platforms without +storing search data. Queries are made using a POST request on every browser +(except Chromium-based browsers*). Therefore they show up in neither our logs, +nor your url history. In the case of Chromium-based browser users there is an +exception: searx uses the search bar to perform GET requests. SearXNG can be +added to your browser's search bar; moreover, it can be set as the default +search engine. + + +## How to set as the default search engine? + +SearXNG supports [OpenSearch]. For more information on changing your default +search engine, see your browser's documentation: + +* [Firefox](https://support.mozilla.org/en-US/kb/add-or-remove-search-engine-firefox) +* [Microsoft Edge](https://support.microsoft.com/en-us/help/4028574/microsoft-edge-change-the-default-search-engine) +* Chromium-based browsers [only add websites that the user navigates to without a path.](https://www.chromium.org/tab-to-search) + +## Where to find anonymous usage statistics of this instance ? + +[Stats page][url_for:stats] contains some useful data about the engines used. + +## How can I make it my own? + +SearXNG appreciates your concern regarding logs, so take the code from +the [SearXNG project][brand.git_url] and run it yourself! + +Add your instance to this [list of public instances][brand.public_instances] to +help other people reclaim their privacy and make the Internet freer! The more +decentralized the Internet is, the more freedom we have! + +## Where are the docs & code of this instance? + +See the [SearXNG docs][brand.docs_url] and [SearXNG sources][brand.git_url] + +[searx]: https://github.com/searx/searx +[metasearch engine]: https://en.wikipedia.org/wiki/Metasearch_engine +[weblate]: https://weblate.bubu1.eu/projects/searxng/ +[seeks project]: https://beniz.github.io/seeks/ +[OpenSearch]: https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md diff --git a/searx/templates/__common__/about.html b/searx/templates/__common__/about.html deleted file mode 100644 index 5a9065f03..000000000 --- a/searx/templates/__common__/about.html +++ /dev/null @@ -1,102 +0,0 @@ - -

About searxng

- -

- SearXNG is a fork from the well-known searx - metasearch engine, - aggregating the results of other search engines - while not storing information about its users. -

- -

More about SearXNG ...

- - - -
- -

Why use it?

- - - -

- If you do care about privacy, want to be a conscious user, or otherwise - believe in digital freedom, make SearXNG your default search engine or run - it on your own server -

- -

Technical details - How does it work?

- -

- SearXNG is a metasearch engine, - inspired by the seeks project. - - It provides basic privacy by mixing your queries with searches on other - platforms without storing search data. Queries are made using a POST request - on every browser (except Chromium-based browsers*). Therefore they show up - in neither our logs, nor your url history. In the case of Chromium-based - browser users there is an exception: searx uses the search bar to perform GET - requests. - - SearXNG can be added to your browser's search bar; moreover, it can be set as - the default search engine. -

- -

How to set as the default search engine?

- -

- SearXNG supports OpenSearch. - For more information on changing your default search engine, see your browser's documentation: -

- - - -

Where to find anonymous usage statistics of this instance ?

- -

- Stats page contains some useful data about the engines used. -

- -

How can I make it my own?

- -

- SearXNG appreciates your concern regarding logs, so take the code from - the SearXNG project and - run it yourself! -

-

- Add your instance to this list of - public instances to help other people reclaim their privacy and make the - Internet freer! The more decentralized the Internet is, the more freedom we - have! -

- -

Where are the docs & code of this instance?

- -

- See the SearXNG docs - and SearXNG sources -

- - -{% include "__common__/aboutextend.html" ignore missing %} diff --git a/searx/templates/oscar/about.html b/searx/templates/oscar/about.html index bc7fed8e1..a644761b6 100644 --- a/searx/templates/oscar/about.html +++ b/searx/templates/oscar/about.html @@ -1,5 +1,6 @@ {% extends "oscar/base.html" %} {% block title %}{{ _('about') }} - {% endblock %} {% block content %} -{% include '__common__/about.html' %} +{{ help.about | safe }} +{% include "__common__/aboutextend.html" ignore missing %} {% endblock %} diff --git a/searx/templates/simple/about.html b/searx/templates/simple/about.html index 1913879da..9f6a10ced 100644 --- a/searx/templates/simple/about.html +++ b/searx/templates/simple/about.html @@ -1,4 +1,5 @@ {% extends 'simple/base.html' %} {% block content %} -{% include '__common__/about.html' %} +{{ help.about | safe }} +{% include "__common__/aboutextend.html" ignore missing %} {% endblock %} diff --git a/searx/user_help.py b/searx/user_help.py new file mode 100644 index 000000000..bf7336777 --- /dev/null +++ b/searx/user_help.py @@ -0,0 +1,48 @@ +from typing import Dict +import os.path +import pkg_resources + +import flask +from flask.helpers import url_for +import mistletoe + +from . import get_setting +from .version import GIT_URL + +HELP: Dict[str, str] = {} +""" Maps a filename under help/ without the file extension to the rendered HTML. """ + + +def render(app: flask.Flask): + """ + Renders the user documentation. Must be called after all Flask routes have been + registered, because the documentation might try to link to them with Flask's `url_for`. + + We render the user documentation once on startup to improve performance. + """ + + link_targets = { + 'brand.git_url': GIT_URL, + 'brand.public_instances': get_setting('brand.public_instances'), + 'brand.docs_url': get_setting('brand.docs_url'), + } + + base_url = get_setting('server.base_url') or None + # we specify base_url so that url_for works for base_urls that have a non-root path + + with app.test_request_context(base_url=base_url): + link_targets['url_for:index'] = url_for('index') + link_targets['url_for:preferences'] = url_for('preferences') + link_targets['url_for:stats'] = url_for('stats') + + define_link_targets = ''.join(f'[{name}]: {url}\n' for name, url in link_targets.items()) + + for filename in pkg_resources.resource_listdir(__name__, 'help'): + rootname, ext = os.path.splitext(filename) + + if ext != '.md': + continue + + markdown = pkg_resources.resource_string(__name__, 'help/' + filename).decode() + markdown = define_link_targets + markdown + HELP[rootname] = mistletoe.markdown(markdown) diff --git a/searx/webapp.py b/searx/webapp.py index f509fea24..099a42996 100755 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -55,6 +55,7 @@ from searx import ( get_setting, settings, searx_debug, + user_help, ) from searx.data import ENGINE_DESCRIPTIONS from searx.results import Timing, UnresponsiveEngine @@ -867,7 +868,7 @@ def __get_translated_errors(unresponsive_engines: Iterable[UnresponsiveEngine]): @app.route('/about', methods=['GET']) def about(): """Render about page""" - return render('about.html') + return render('about.html', help=user_help.HELP) @app.route('/autocompleter', methods=['GET', 'POST']) @@ -1359,6 +1360,7 @@ werkzeug_reloader = flask_run_development or (searx_debug and __name__ == "__mai if not werkzeug_reloader or (werkzeug_reloader and os.environ.get("WERKZEUG_RUN_MAIN") == "true"): plugin_initialize(app) search_initialize(enable_checker=True, check_network=True, enable_metrics=settings['general']['enable_metrics']) + user_help.render(app) def run():