Merge branch 'master' into docker/opencontainers
This commit is contained in:
		
						commit
						24472ce718
					
				
							
								
								
									
										4
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Makefile
									
									
									
									
									
								
							| @ -8,6 +8,9 @@ PYOBJECTS = searx | ||||
| DOC       = docs | ||||
| PY_SETUP_EXTRAS ?= \[test\] | ||||
| 
 | ||||
| PYDIST=./dist/py | ||||
| PYBUILD=./build/py | ||||
| 
 | ||||
| include utils/makefile.include | ||||
| include utils/makefile.python | ||||
| include utils/makefile.sphinx | ||||
| @ -23,6 +26,7 @@ help: | ||||
| 	@echo  '  install   - developer install (./local)' | ||||
| 	@echo  '  uninstall - uninstall (./local)' | ||||
| 	@echo  '  gh-pages  - build docs & deploy on gh-pages branch' | ||||
| 	@echo  '  clean     - drop builds and environments' | ||||
| 	@echo  '' | ||||
| 	@$(MAKE) -s -f utils/makefile.include make-help | ||||
| 	@echo  '' | ||||
|  | ||||
							
								
								
									
										102
									
								
								docs/_themes/searx/static/searx.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										102
									
								
								docs/_themes/searx/static/searx.css
									
									
									
									
										vendored
									
									
								
							| @ -24,7 +24,107 @@ p.sidebar-title, .sidebar p { | ||||
|   margin: 6pt; | ||||
| } | ||||
| 
 | ||||
| .sidebar li { | ||||
| .sidebar li, | ||||
| .hlist li { | ||||
|   list-style-type: disclosure-closed; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* admonitions | ||||
| */ | ||||
| 
 | ||||
| div.admonition, div.topic { | ||||
|   background-color: #fafafa; | ||||
|   margin: 8px 0px; | ||||
|   padding: 1em; | ||||
|   border-radius: 3pt 0 0 3pt; | ||||
|   border-top: none; | ||||
|   border-right: none; | ||||
|   border-bottom: none; | ||||
|   border-left: 5pt solid #ccc; | ||||
| } | ||||
| 
 | ||||
| p.admonition-title:after { | ||||
|   content: none; | ||||
| } | ||||
| 
 | ||||
| .admonition.hint      { border-color: #416dc0b0; } | ||||
| .admonition.note      { border-color: #6c856cb0; } | ||||
| .admonition.tip       { border-color: #85c5c2b0; } | ||||
| .admonition.attention { border-color: #ecec97b0; } | ||||
| .admonition.caution   { border-color: #a6c677b0; } | ||||
| .admonition.danger    { border-color: #d46262b0; } | ||||
| .admonition.important { border-color: #dfa3a3b0; } | ||||
| .admonition.error     { border-color: red; } | ||||
| .admonition.warning   { border-color: darkred; } | ||||
| 
 | ||||
| .admonition.admonition-generic-admonition-title { | ||||
|     border-color: #416dc0b0; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* admonitions with (rendered) reST markup examples (:class: rst-example) | ||||
|  * | ||||
|  * .. admonition:: title of the example | ||||
|  *     :class: rst-example | ||||
|  *     .... | ||||
| */ | ||||
| 
 | ||||
| div.rst-example { | ||||
|   background-color: inherit; | ||||
|   margin: 0; | ||||
|   border-top: none; | ||||
|   border-right: 1px solid #ccc; | ||||
|   border-bottom: none; | ||||
|   border-left: none; | ||||
|   border-radius: none; | ||||
|   padding: 0; | ||||
| } | ||||
| 
 | ||||
| div.rst-example > p.admonition-title { | ||||
|   font-family: Sans Serif; | ||||
|   font-style: italic; | ||||
|   font-size: 0.8em; | ||||
|   display: block; | ||||
|   border-bottom: 1px solid #ccc; | ||||
|   padding: 0.5em 1em; | ||||
|   text-align: right; | ||||
| } | ||||
| 
 | ||||
| /* code block in figures | ||||
|  */ | ||||
| 
 | ||||
| div.highlight pre { | ||||
|     text-align: left; | ||||
| } | ||||
| 
 | ||||
| /* Table theme | ||||
| */ | ||||
| 
 | ||||
| thead, tfoot { | ||||
|   background-color: #fff; | ||||
| } | ||||
| 
 | ||||
| th:hover, td:hover { | ||||
|   background-color: #ffc; | ||||
| } | ||||
| 
 | ||||
| thead th, tfoot th, tfoot td, tbody th { | ||||
|   background-color: #fffaef; | ||||
| } | ||||
| 
 | ||||
| tbody tr:nth-child(odd) { | ||||
|   background-color: #fff; | ||||
| } | ||||
| 
 | ||||
| tbody tr:nth-child(even) { | ||||
|   background-color: #fafafa; | ||||
| } | ||||
| 
 | ||||
| caption { | ||||
|   font-family: Sans Serif; | ||||
|   padding: 0.5em; | ||||
|   margin: 0.5em 0 0.5em 0; | ||||
|   caption-side: top; | ||||
|   text-align: left; | ||||
| } | ||||
|  | ||||
							
								
								
									
										33
									
								
								docs/admin/arch_public.dot
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								docs/admin/arch_public.dot
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | ||||
| digraph G { | ||||
| 
 | ||||
|   node [style=filled, shape=box, fillcolor="#ffffcc", fontname="Sans"]; | ||||
|   edge [fontname="Sans"]; | ||||
| 
 | ||||
|   browser [label="Browser", shape=Mdiamond]; | ||||
|   rp      [label="Reverse Proxy", href="url to configure reverse proxy"]; | ||||
|   filtron [label="Filtron",       href="https://github.com/asciimoo/filtron"]; | ||||
|   morty   [label="Morty",         href="https://github.com/asciimoo/morty"]; | ||||
|   static  [label="Static files",  href="url to configure static files"]; | ||||
|   uwsgi   [label="uwsgi",         href="url to configure uwsgi"] | ||||
|   searx1  [label="Searx #1"]; | ||||
|   searx2  [label="Searx #2"]; | ||||
|   searx3  [label="Searx #3"]; | ||||
|   searx4  [label="Searx #4"]; | ||||
| 
 | ||||
|   browser -> rp [label="HTTPS"] | ||||
| 
 | ||||
|   subgraph cluster_searx { | ||||
|       label = "Searx instance" fontname="Sans"; | ||||
|       bgcolor="#fafafa"; | ||||
|       { rank=same; static rp }; | ||||
|       rp -> morty      [label="optional: images and HTML pages proxy"]; | ||||
|       rp -> static     [label="optional: reverse proxy serves directly static files"]; | ||||
|       rp -> filtron    [label="HTTP"]; | ||||
|       filtron -> uwsgi [label="HTTP"]; | ||||
|       uwsgi -> searx1; | ||||
|       uwsgi -> searx2; | ||||
|       uwsgi -> searx3; | ||||
|       uwsgi -> searx4; | ||||
|   } | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										24
									
								
								docs/admin/architecture.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								docs/admin/architecture.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | ||||
| .. _architecture: | ||||
| 
 | ||||
| ============ | ||||
| Architecture | ||||
| ============ | ||||
| 
 | ||||
| .. sidebar:: Needs work! | ||||
| 
 | ||||
|    This article needs some work / Searx is a collaborative effort.  If you have | ||||
|    any contribution, feel welcome to send us your :pull:`PR <../pulls>`, see | ||||
|    :ref:`how to contribute`. | ||||
| 
 | ||||
| Herein you will find some hints and suggestions about typical architectures of | ||||
| searx infrastructures. | ||||
| 
 | ||||
| We start with a contribution from :pull:`@dalf <1776#issuecomment-567917320>`. | ||||
| It shows a *reference* setup for public searx instances. | ||||
| 
 | ||||
| .. _arch public: | ||||
| 
 | ||||
| .. kernel-figure:: arch_public.dot | ||||
|    :alt: arch_public.dot | ||||
| 
 | ||||
|    Reference architecture of a public searx setup. | ||||
							
								
								
									
										103
									
								
								docs/admin/buildhosts.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								docs/admin/buildhosts.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,103 @@ | ||||
| .. _buildhosts: | ||||
| 
 | ||||
| ========== | ||||
| Buildhosts | ||||
| ========== | ||||
| 
 | ||||
| .. sidebar:: This article needs some work | ||||
| 
 | ||||
|    If you have any contribution send us your :pull:`PR <../pulls>`, see | ||||
|    :ref:`how to contribute`. | ||||
| 
 | ||||
| To get best results from build, its recommend to install additional packages | ||||
| on build hosts. | ||||
| 
 | ||||
| .. _docs build: | ||||
| 
 | ||||
| Build docs | ||||
| ========== | ||||
| 
 | ||||
| .. _Graphviz: https://graphviz.gitlab.io | ||||
| .. _ImageMagick: https://www.imagemagick.org | ||||
| .. _XeTeX: https://tug.org/xetex/ | ||||
| .. _dvisvgm: https://dvisvgm.de/ | ||||
| 
 | ||||
| .. sidebar:: Sphinx build needs | ||||
| 
 | ||||
|    - ImageMagick_ | ||||
|    - Graphviz_ | ||||
|    - XeTeX_ | ||||
|    - dvisvgm_ | ||||
| 
 | ||||
| Most of the sphinx requirements are installed from :origin:`setup.py` and the | ||||
| docs can be build from scratch with ``make docs``.  For better math and image | ||||
| processing additional packages are needed.  The XeTeX_ needed not only for PDF | ||||
| creation, its also needed for :ref:`math` when HTML output is build. | ||||
| 
 | ||||
| To be able to do :ref:`sphinx:math-support` without CDNs, the math are rendered | ||||
| as images (``sphinx.ext.imgmath`` extension).  If your docs build (``make | ||||
| docs``) shows warnings like this:: | ||||
| 
 | ||||
|    WARNING: dot(1) not found, for better output quality install \ | ||||
|             graphviz from http://www.graphviz.org | ||||
|    .. | ||||
|    WARNING: LaTeX command 'latex' cannot be run (needed for math \ | ||||
|             display), check the imgmath_latex setting | ||||
| 
 | ||||
| you need to install additional packages on your build host, to get better HTML | ||||
| output. | ||||
| 
 | ||||
| .. _system requirements: | ||||
| 
 | ||||
| .. tabs:: | ||||
| 
 | ||||
|    .. group-tab:: Ubuntu / debian | ||||
| 
 | ||||
|       .. code-block:: sh | ||||
| 
 | ||||
|          $ sudo apt install graphviz imagemagick texlive-xetex librsvg2-bin | ||||
| 
 | ||||
|    .. group-tab:: Arch Linux | ||||
| 
 | ||||
|       .. code-block:: sh | ||||
| 
 | ||||
|          $ sudo pacman -S graphviz imagemagick texlive-bin extra/librsvg | ||||
| 
 | ||||
|    .. group-tab::  Fedora / RHEL | ||||
| 
 | ||||
|       .. code-block:: sh | ||||
| 
 | ||||
|          $ sudo dnf install graphviz graphviz-gd texlive-xetex-bin librsvg2-tools | ||||
| 
 | ||||
| 
 | ||||
| For PDF output you also need: | ||||
| 
 | ||||
| .. tabs:: | ||||
| 
 | ||||
|    .. group-tab:: Ubuntu / debian | ||||
| 
 | ||||
|       .. code:: sh | ||||
| 
 | ||||
|          $ sudo apt texlive-latex-recommended texlive-extra-utils ttf-dejavu | ||||
| 
 | ||||
|    .. group-tab:: Arch Linux | ||||
| 
 | ||||
|       .. code:: sh | ||||
| 
 | ||||
|       	 $ sudo pacman -S texlive-core texlive-latexextra ttf-dejavu | ||||
| 
 | ||||
|    .. group-tab::  Fedora / RHEL | ||||
| 
 | ||||
|       .. code:: sh | ||||
| 
 | ||||
|       	 $ sudo dnf install \ | ||||
| 	        texlive-collection-fontsrecommended texlive-collection-latex \ | ||||
| 		dejavu-sans-fonts dejavu-serif-fonts dejavu-sans-mono-fonts | ||||
| 
 | ||||
| .. _system requirements END: | ||||
| 
 | ||||
| .. literalinclude:: ../conf.py | ||||
|    :language: python | ||||
|    :start-after: # sphinx.ext.imgmath setup | ||||
|    :end-before: # sphinx.ext.imgmath setup END | ||||
| 
 | ||||
							
								
								
									
										71
									
								
								docs/admin/engines.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								docs/admin/engines.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,71 @@ | ||||
| .. _engines generic: | ||||
| 
 | ||||
| ======= | ||||
| Engines | ||||
| ======= | ||||
| 
 | ||||
| .. sidebar:: Further reading .. | ||||
| 
 | ||||
|    - :ref:`settings engine` | ||||
|    - :ref:`engine settings` | ||||
|    - :ref:`engine file` | ||||
| 
 | ||||
| ============= =========== ==================== ============ | ||||
| :ref:`engine settings`    :ref:`engine file` | ||||
| ------------------------- --------------------------------- | ||||
| Name (cfg)                Categories | ||||
| ------------------------- --------------------------------- | ||||
| Engine        ..          Paging support       **P** | ||||
| ------------------------- -------------------- ------------ | ||||
| Shortcut      **S**       Language support     **L** | ||||
| Timeout       **TO**      Time range support   **TR** | ||||
| Disabled      **D**       Offline              **O** | ||||
| ------------- ----------- -------------------- ------------ | ||||
| Safe search   **SS** | ||||
| ------------- ----------- --------------------------------- | ||||
| Weigth        **W** | ||||
| ------------- ----------- --------------------------------- | ||||
| Disabled      **D** | ||||
| ============= =========== ================================= | ||||
| 
 | ||||
| Configuration defaults (at built time): | ||||
| 
 | ||||
| .. _configured engines: | ||||
| 
 | ||||
| .. jinja:: webapp | ||||
| 
 | ||||
|    .. flat-table:: Engines configured at built time (defaults) | ||||
|       :header-rows: 1 | ||||
|       :stub-columns: 2 | ||||
| 
 | ||||
|       * - Name (cfg) | ||||
|         - S | ||||
|         - Engine | ||||
|         - TO | ||||
|         - Categories | ||||
|         - P | ||||
|         - L | ||||
|         - SS | ||||
|         - D | ||||
|         - TR | ||||
|         - O | ||||
| 	- W | ||||
| 	- D | ||||
| 
 | ||||
|       {% for name, mod in engines.items() %} | ||||
| 
 | ||||
|       * - {{name}} | ||||
|         - !{{mod.shortcut}} | ||||
|         - {{mod.__name__}} | ||||
|         - {{mod.timeout}} | ||||
|         - {{", ".join(mod.categories)}} | ||||
|         - {{(mod.paging and "y") or ""}} | ||||
|         - {{(mod.language_support and "y") or ""}} | ||||
|         - {{(mod.safesearch and "y") or ""}} | ||||
|         - {{(mod.disabled and "y") or ""}} | ||||
|         - {{(mod.time_range_support and "y") or ""}} | ||||
|         - {{(mod.offline and "y") or ""}} | ||||
|         - {{mod.weight or 1 }} | ||||
|         - {{(mod.disabled and "y") or ""}} | ||||
| 
 | ||||
|      {% endfor %} | ||||
| @ -6,6 +6,11 @@ Administrator documentation | ||||
|    :maxdepth: 1 | ||||
| 
 | ||||
|    installation | ||||
|    settings | ||||
|    api | ||||
|    architecture | ||||
|    filtron | ||||
|    morty | ||||
|    engines | ||||
|    plugins | ||||
|    buildhosts | ||||
|  | ||||
| @ -114,6 +114,9 @@ content: | ||||
|     # Module to import | ||||
|     module = searx.webapp | ||||
| 
 | ||||
|     # Support running the module from a webserver subdirectory. | ||||
|     route-run = fixpathinfo: | ||||
| 
 | ||||
|     # Virtualenv and python path | ||||
|     virtualenv = /usr/local/searx/searx-ve/ | ||||
|     pythonpath = /usr/local/searx/ | ||||
| @ -151,7 +154,10 @@ content: | ||||
|     server { | ||||
|         listen 80; | ||||
|         server_name searx.example.com; | ||||
|         root /usr/local/searx; | ||||
|         root /usr/local/searx/searx; | ||||
| 
 | ||||
|         location /static { | ||||
|         } | ||||
| 
 | ||||
|         location / { | ||||
|                 include uwsgi_params; | ||||
| @ -180,14 +186,13 @@ Add this configuration in the server config file | ||||
| 
 | ||||
| .. code:: nginx | ||||
| 
 | ||||
|     location = /searx { rewrite ^ /searx/; } | ||||
|     location /searx { | ||||
|             try_files $uri @searx; | ||||
|     location /searx/static { | ||||
|             alias /usr/local/searx/searx/static; | ||||
|     } | ||||
|     location @searx { | ||||
| 
 | ||||
|     location /searx { | ||||
|             uwsgi_param SCRIPT_NAME /searx; | ||||
|             include uwsgi_params; | ||||
|             uwsgi_modifier1 30; | ||||
|             uwsgi_pass unix:/run/uwsgi/app/searx/socket; | ||||
|     } | ||||
| 
 | ||||
| @ -197,6 +202,10 @@ in case of single-user or low-traffic instances.) | ||||
| 
 | ||||
| .. code:: nginx | ||||
| 
 | ||||
|     location /searx/static { | ||||
|             alias /usr/local/searx/searx/static; | ||||
|     } | ||||
| 
 | ||||
|     location /searx { | ||||
|         proxy_pass http://127.0.0.1:8888; | ||||
|         proxy_set_header Host $host; | ||||
| @ -338,4 +347,3 @@ References | ||||
| 
 | ||||
| * How to: `Setup searx in a couple of hours with a free SSL certificate | ||||
|   <https://www.reddit.com/r/privacytoolsIO/comments/366kvn/how_to_setup_your_own_privacy_respecting_search/>`__ | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										39
									
								
								docs/admin/plugins.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								docs/admin/plugins.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,39 @@ | ||||
| .. _plugins generic: | ||||
| 
 | ||||
| =============== | ||||
| Plugins builtin | ||||
| =============== | ||||
| 
 | ||||
| .. sidebar:: Further reading .. | ||||
| 
 | ||||
|    - :ref:`dev plugin` | ||||
| 
 | ||||
| Configuration defaults (at built time): | ||||
| 
 | ||||
| :DO: Default on | ||||
| 
 | ||||
| .. _configured plugins: | ||||
| 
 | ||||
| .. jinja:: webapp | ||||
| 
 | ||||
|    .. flat-table:: Plugins configured at built time (defaults) | ||||
|       :header-rows: 1 | ||||
|       :stub-columns: 1 | ||||
|       :widths: 3 1 9 | ||||
| 
 | ||||
|       * - Name | ||||
|         - DO | ||||
|         - Description | ||||
| 
 | ||||
|           JS & CSS dependencies | ||||
| 
 | ||||
|       {% for plgin in plugins %} | ||||
| 
 | ||||
|       * - {{plgin.name}} | ||||
|         - {{(plgin.default_on and "y") or ""}} | ||||
|         - {{plgin.description}} | ||||
| 
 | ||||
|           {% for dep in (plgin.js_dependencies + plgin.css_dependencies) %} | ||||
|           | ``{{dep}}`` {% endfor %} | ||||
| 
 | ||||
|       {% endfor %} | ||||
							
								
								
									
										181
									
								
								docs/admin/settings.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										181
									
								
								docs/admin/settings.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,181 @@ | ||||
| .. _settings.yml: | ||||
| 
 | ||||
| ================ | ||||
| ``settings.yml`` | ||||
| ================ | ||||
| 
 | ||||
| .. sidebar:: Further reading .. | ||||
| 
 | ||||
|    - :ref:`search API` | ||||
| 
 | ||||
| This page describe the options possibilities of the settings.yml file. | ||||
| 
 | ||||
| .. _settings global: | ||||
| 
 | ||||
| Global Settings | ||||
| =============== | ||||
| 
 | ||||
| .. code:: yaml | ||||
| 
 | ||||
|    server: | ||||
|        port : 8888 | ||||
|        secret_key : "ultrasecretkey" # change this! | ||||
|        debug : False                 # debug mode, only for development | ||||
|        request_timeout : 2.0         # seconds | ||||
|        base_url : False              # set custom base_url (or False) | ||||
|        themes_path : ""              # custom ui themes path | ||||
|        default_theme : oscar         # ui theme | ||||
|        useragent_suffix : ""         # suffix of searx_useragent, could contain | ||||
|                                      # informations like admins email address | ||||
|        image_proxy : False           # proxying image results through searx | ||||
|        default_locale : ""           # default interface locale | ||||
| 
 | ||||
|    # uncomment below section if you want to use a proxy | ||||
| 
 | ||||
|    #outgoing_proxies : | ||||
|    #    http : http://127.0.0.1:8080 | ||||
|    #    https: http://127.0.0.1:8080 | ||||
| 
 | ||||
|    # uncomment below section only if you have more than one network interface | ||||
|    # which can be the source of outgoing search requests | ||||
| 
 | ||||
|    #source_ips: | ||||
|    #  - 1.1.1.1 | ||||
|    #  - 1.1.1.2 | ||||
| 
 | ||||
|    locales: | ||||
|        en : English | ||||
|        de : Deutsch | ||||
|        he : Hebrew | ||||
|        hu : Magyar | ||||
|        fr : Français | ||||
|        es : Español | ||||
|        it : Italiano | ||||
|        nl : Nederlands | ||||
|        ja : 日本語 (Japanese) | ||||
|        tr : Türkçe | ||||
|        ru : Russian | ||||
|        ro : Romanian | ||||
| 
 | ||||
| 
 | ||||
| ``port`` : | ||||
|   Port number of the searx web application if you run it directly using ``python | ||||
|   searx/webapp.py``.  Doesn't apply to searx running on Apache or Nginx. | ||||
| 
 | ||||
| ``secret_key`` : | ||||
|   Used for cryptography purpose. | ||||
| 
 | ||||
| ``debug`` : | ||||
|   Allow a more detailed log if you run searx directly. Display *detailed* error | ||||
|   messages in the browser too, so this must be deactivated in production. | ||||
| 
 | ||||
| ``request_timeout`` : | ||||
|   Global timeout of the requests made to others engines in seconds. A bigger | ||||
|   timeout will allow to wait for answers from slow engines, but in consequence | ||||
|   will slow searx reactivity (the result page may take the time specified in the | ||||
|   timeout to load) | ||||
| 
 | ||||
| ``base_url`` : | ||||
|   The base URL where searx is deployed.  Used to create correct inbound links. | ||||
| 
 | ||||
| ``themes_path`` : | ||||
|   Path to where the themes are located.  If you didn't develop anything, leave it | ||||
|   blank. | ||||
| 
 | ||||
| ``default_theme`` : | ||||
|   Name of the theme you want to use by default on you searx instance. | ||||
| 
 | ||||
| ``useragent_suffix`` : | ||||
|   Suffix to the user-agent searx uses to send requests to others engines.  If an | ||||
|   engine wish to block you, a contact info here may be useful to avoid that. | ||||
| 
 | ||||
| ``image_proxy`` : | ||||
|   Allow your instance of searx of being able to proxy images.  Uses memory space. | ||||
| 
 | ||||
| ``default_locale`` : | ||||
|   Aearx interface language.  If blank, the locale is detected by using the | ||||
|   browser language.  If it doesn't work, or you are deploying a language | ||||
|   specific instance of searx, a locale can be defined using an ISO language | ||||
|   code, like ``fr``, ``en``, ``de``. | ||||
| 
 | ||||
| .. _requests proxies: http://docs.python-requests.org/en/latest/user/advanced/#proxies | ||||
| .. _PR SOCKS support: https://github.com/kennethreitz/requests/pull/478 | ||||
| 
 | ||||
| ``outgoing_proxies`` : | ||||
|   Define a proxy you wish to use, see `requests proxies`_.  SOCKS proxies are | ||||
|   not supported / see `PR SOCKS support`. | ||||
| 
 | ||||
| ``source_ips`` : | ||||
|   If you use multiple nework interfaces, define from which IP the requests must | ||||
|   be made. | ||||
| 
 | ||||
| ``locales`` : | ||||
|   Locales codes and their names.  Available translations of searx interface. | ||||
| 
 | ||||
| 
 | ||||
| .. _settings engine: | ||||
| 
 | ||||
| Engine settings | ||||
| =============== | ||||
| 
 | ||||
| .. sidebar:: Further reading .. | ||||
| 
 | ||||
|    - :ref:`engines-dev` | ||||
| 
 | ||||
| .. code:: yaml | ||||
| 
 | ||||
|    - name : bing | ||||
|      engine : bing | ||||
|      shortcut : bi | ||||
|      base_url : 'https://{language}.wikipedia.org/' | ||||
|      categories : general | ||||
|      timeout : 3.0 | ||||
|      api_key : 'apikey' | ||||
|      disabled : True | ||||
|      language : en_US | ||||
| 
 | ||||
| ``name`` : | ||||
|   Name that will be used accross searx to define this engine.  In settings, on | ||||
|   the result page... | ||||
| 
 | ||||
| ``engine`` : | ||||
|   Name of the python file used to handle requests and responses to and from this | ||||
|   search engine. | ||||
| 
 | ||||
| ``shortcut`` : | ||||
|   Code used to execute bang requests (in this case using ``!bi`` or ``?bi``) | ||||
| 
 | ||||
| ``base_url`` : optional | ||||
|   Part of the URL that should be stable accross every request.  Can be useful to | ||||
|   use multiple sites using only one engine, or updating the site URL without | ||||
|   touching at the code. | ||||
| 
 | ||||
| ``categories`` : optional | ||||
|   Define in which categories this engine will be active.  Most of the time, it is | ||||
|   defined in the code of the engine, but in a few cases it is useful, like when | ||||
|   describing multiple search engine using the same code. | ||||
| 
 | ||||
| ``timeout`` : optional | ||||
|   Timeout of the search with the current search engine.  **Be careful, it will | ||||
|   modify the global timeout of searx.** | ||||
| 
 | ||||
| ``api_key`` : optional | ||||
|   In a few cases, using an API needs the use of a secret key.  How to obtain them | ||||
|   is described in the file. | ||||
| 
 | ||||
| ``disabled`` : optional | ||||
|   To disable by default the engine, but not deleting it. It will allow the user | ||||
|   to manually activate it in the settings. | ||||
| 
 | ||||
| ``language`` : optional | ||||
|   If you want to use another language for a specific engine, you can define it | ||||
|   by using the full ISO code of language and country, like ``fr_FR``, ``en_US``, | ||||
|   ``de_DE``. | ||||
| 
 | ||||
| ``weigth`` : default ``1`` | ||||
|   Weighting of the results of this engine. | ||||
| 
 | ||||
| .. note:: | ||||
| 
 | ||||
|    A few more options are possible, but they are pretty specific to some | ||||
|    engines, and so won't be described here. | ||||
							
								
								
									
										39
									
								
								docs/conf.py
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								docs/conf.py
									
									
									
									
									
								
							| @ -14,11 +14,18 @@ project = u'searx' | ||||
| copyright = u'2015-2019, Adam Tauber, Noémi Ványi' | ||||
| author = u'Adam Tauber' | ||||
| release, version = VERSION_STRING, VERSION_STRING | ||||
| highlight_language = 'none' | ||||
| 
 | ||||
| # General -------------------------------------------------------------- | ||||
| 
 | ||||
| master_doc = "index" | ||||
| source_suffix = '.rst' | ||||
| numfig = True | ||||
| 
 | ||||
| from searx import webapp | ||||
| jinja_contexts = { | ||||
|     'webapp': dict(**webapp.__dict__) | ||||
| } | ||||
| 
 | ||||
| # usage::   lorem :patch:`f373169` ipsum | ||||
| extlinks = {} | ||||
| @ -32,21 +39,40 @@ extlinks['origin'] = (GIT_URL + '/blob/master/%s', 'git://') | ||||
| extlinks['patch'] = (GIT_URL + '/commit/%s', '#') | ||||
| extlinks['search'] = (SEARX_URL + '/%s', '#') | ||||
| extlinks['docs'] = (DOCS_URL + '/%s', 'docs: ') | ||||
| extlinks['pypi'] = ('https://pypi.org/project/%s', 'PyPi: ') | ||||
| extlinks['man'] = ('https://manpages.debian.org/jump?q=%s', '') | ||||
| #extlinks['role'] = ( | ||||
| #    'https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-%s', '') | ||||
| extlinks['duref'] = ( | ||||
|     'http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#%s', '') | ||||
| extlinks['durole'] = ( | ||||
|     'http://docutils.sourceforge.net/docs/ref/rst/roles.html#%s', '') | ||||
| extlinks['dudir'] =  ( | ||||
|     'http://docutils.sourceforge.net/docs/ref/rst/directives.html#%s', '') | ||||
| extlinks['ctan'] =  ( | ||||
|     'https://ctan.org/pkg/%s', 'CTAN: ') | ||||
| 
 | ||||
| extensions = [ | ||||
|     'sphinx.ext.imgmath', | ||||
|     'sphinx.ext.extlinks', | ||||
|     'sphinx.ext.viewcode', | ||||
|     "sphinx.ext.autodoc", | ||||
|     "sphinx.ext.intersphinx", | ||||
|     "pallets_sphinx_themes", | ||||
|     "sphinx_issues", # https://github.com/sloria/sphinx-issues/blob/master/README.rst | ||||
|     "sphinxcontrib.jinja",  # https://github.com/tardyp/sphinx-jinja | ||||
|     'linuxdoc.rstFlatTable',    # Implementation of the 'flat-table' reST-directive. | ||||
|     'linuxdoc.kfigure',         # Sphinx extension which implements scalable image handling. | ||||
|     "sphinx_tabs.tabs", # https://github.com/djungelorm/sphinx-tabs | ||||
| ] | ||||
| 
 | ||||
| intersphinx_mapping = { | ||||
|     "python": ("https://docs.python.org/3/", None), | ||||
|     # "flask": ("https://flask.palletsprojects.com/", None), | ||||
|     "flask": ("https://flask.palletsprojects.com/", None), | ||||
|     # "werkzeug": ("https://werkzeug.palletsprojects.com/", None), | ||||
|     # "jinja": ("https://jinja.palletsprojects.com/", None), | ||||
|     "jinja": ("https://jinja.palletsprojects.com/", None), | ||||
|     "linuxdoc" : ("https://return42.github.io/linuxdoc/", None), | ||||
|     "sphinx" : ("https://www.sphinx-doc.org/en/master/", None), | ||||
| } | ||||
| 
 | ||||
| issues_github_path = "asciimoo/searx" | ||||
| @ -54,16 +80,21 @@ issues_github_path = "asciimoo/searx" | ||||
| # HTML ----------------------------------------------------------------- | ||||
| 
 | ||||
| sys.path.append(os.path.abspath('_themes')) | ||||
| 
 | ||||
| html_theme_path = ['_themes'] | ||||
| html_theme = "searx" | ||||
| 
 | ||||
| # sphinx.ext.imgmath setup | ||||
| html_math_renderer = 'imgmath' | ||||
| imgmath_image_format = 'svg' | ||||
| imgmath_font_size = 14 | ||||
| # sphinx.ext.imgmath setup END | ||||
| 
 | ||||
| html_theme_options = {"index_sidebar_logo": True} | ||||
| html_context = { | ||||
|     "project_links": [ | ||||
|         ProjectLink("Source", GIT_URL), | ||||
|         ProjectLink("Wiki", "https://github.com/asciimoo/searx/wiki"), | ||||
|         ProjectLink("Public instances", "https://github.com/asciimoo/searx/wiki/Searx-instances"), | ||||
|         ProjectLink("Public instances", "https://asciimoo.github.io/searx/user/public_instances.html"), | ||||
|         ProjectLink("Twitter", "https://twitter.com/Searx_engine"), | ||||
|     ] | ||||
| } | ||||
|  | ||||
| @ -1,3 +1,5 @@ | ||||
| .. _how to contribute: | ||||
| 
 | ||||
| ================= | ||||
| How to contribute | ||||
| ================= | ||||
| @ -48,7 +50,20 @@ Code | ||||
| ==== | ||||
| 
 | ||||
| .. _PEP8: https://www.python.org/dev/peps/pep-0008/ | ||||
| .. _Conventional Commits: https://www.conventionalcommits.org/ | ||||
| .. _Git Commit Good Practice: https://wiki.openstack.org/wiki/GitCommitMessages | ||||
| .. _Structural split of changes: | ||||
|     https://wiki.openstack.org/wiki/GitCommitMessages#Structural_split_of_changes | ||||
| .. _gitmoji: https://gitmoji.carloscuesta.me/ | ||||
| .. _Semantic PR: https://github.com/zeke/semantic-pull-requests | ||||
| 
 | ||||
| .. sidebar:: Create good commits! | ||||
| 
 | ||||
|    - `Structural split of changes`_ | ||||
|    - `Conventional Commits`_ | ||||
|    - `Git Commit Good Practice`_ | ||||
|    - some like to use: gitmoji_ | ||||
|    - not yet active: `Semantic PR`_ | ||||
| 
 | ||||
| In order to submit a patch, please follow the steps below: | ||||
| 
 | ||||
| @ -57,6 +72,9 @@ In order to submit a patch, please follow the steps below: | ||||
|   - PEP8_ standards apply, except the convention of line length | ||||
|   - Maximum line length is 120 characters | ||||
| 
 | ||||
| - The cardinal rule for creating good commits is to ensure there is only one | ||||
|   *logical change* per commit / read `Structural split of changes`_ | ||||
| 
 | ||||
| - Check if your code breaks existing tests.  If so, update the tests or fix your | ||||
|   code. | ||||
| 
 | ||||
| @ -64,6 +82,16 @@ In order to submit a patch, please follow the steps below: | ||||
| 
 | ||||
| - Add yourself to the :origin:`AUTHORS.rst` file. | ||||
| 
 | ||||
| - Choose meaning full commit messages, read `Conventional Commits`_ | ||||
| 
 | ||||
|   .. code:: | ||||
| 
 | ||||
|      <type>[optional scope]: <description> | ||||
| 
 | ||||
|      [optional body] | ||||
| 
 | ||||
|      [optional footer(s)] | ||||
| 
 | ||||
| - Create a pull request. | ||||
| 
 | ||||
| For more help on getting started with searx development, see :ref:`devquickstart`. | ||||
| @ -79,6 +107,8 @@ Translation currently takes place on :ref:`transifex <translation>`. | ||||
|    Please, do not update translation files in the repo. | ||||
| 
 | ||||
| 
 | ||||
| .. _contrib docs: | ||||
| 
 | ||||
| Documentation | ||||
| ============= | ||||
| 
 | ||||
| @ -91,7 +121,7 @@ Documentation | ||||
| 
 | ||||
| The documentation is built using Sphinx_.  So in order to be able to generate | ||||
| the required files, you have to install it on your system.  Much easier, use | ||||
| Makefile our targets. | ||||
| our :ref:`makefile`. | ||||
| 
 | ||||
| Here is an example which makes a complete rebuild: | ||||
| 
 | ||||
| @ -101,6 +131,7 @@ Here is an example which makes a complete rebuild: | ||||
|    ... | ||||
|    The HTML pages are in dist/docs. | ||||
| 
 | ||||
| .. _make docs-live: | ||||
| 
 | ||||
| live build | ||||
| ---------- | ||||
| @ -110,9 +141,10 @@ live build | ||||
|    It is recommended to assert a complete rebuild before deploying (use | ||||
|    ``docs-clean``). | ||||
| 
 | ||||
| Live build is like WYSIWYG, If you want to edit the documentation, its | ||||
| recommended to use.  The Makefile target ``docs-live`` builds the docs, opens URL | ||||
| in your favorite browser and rebuilds every time a reST file has been changed. | ||||
| Live build is like WYSIWYG.  If you want to edit the documentation, its | ||||
| recommended to use.  The Makefile target ``docs-live`` builds the docs, opens | ||||
| URL in your favorite browser and rebuilds every time a reST file has been | ||||
| changed. | ||||
| 
 | ||||
| .. code:: sh | ||||
| 
 | ||||
| @ -123,12 +155,13 @@ in your favorite browser and rebuilds every time a reST file has been changed. | ||||
|    ... Start watching changes | ||||
| 
 | ||||
| 
 | ||||
| .. _deploy on github.io: | ||||
| 
 | ||||
| deploy on github.io | ||||
| ------------------- | ||||
| 
 | ||||
| To deploy documentation at :docs:`github.io <.>` use Makefile target | ||||
| ``gh-pages``, which will builds the documentation, clones searx into a sub | ||||
| :ref:`make gh-pages`, which will builds the documentation, clones searx into a sub | ||||
| folder ``gh-pages``, cleans it, copies the doc build into and runs all the | ||||
| needed git add, commit and push: | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										6
									
								
								docs/dev/csv_table.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								docs/dev/csv_table.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | ||||
| stub col row 1, column, "loremLorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy | ||||
| eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam | ||||
| voluptua." | ||||
| stub col row 1, "At vero eos et accusam et justo duo dolores et ea rebum. Stet clita | ||||
| kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.", column | ||||
| stub col row 1, column, column | ||||
| @ -29,6 +29,7 @@ the ones in the engine file. | ||||
| It does not matter if an option is stored in the engine file or in the | ||||
| settings.  However, the standard way is the following: | ||||
| 
 | ||||
| .. _engine file: | ||||
| 
 | ||||
| engine file | ||||
| ----------- | ||||
| @ -43,6 +44,7 @@ time_range_support      boolean     support search time range | ||||
| offline                 boolean     engine runs offline | ||||
| ======================= =========== =========================================== | ||||
| 
 | ||||
| .. _engine settings: | ||||
| 
 | ||||
| settings.yml | ||||
| ------------ | ||||
|  | ||||
							
								
								
									
										3
									
								
								docs/dev/hello.dot
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								docs/dev/hello.dot
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| graph G { | ||||
|       Hello -- World | ||||
| } | ||||
| @ -11,3 +11,5 @@ Developer documentation | ||||
|    search_api | ||||
|    plugins | ||||
|    translation | ||||
|    makefile | ||||
|    reST | ||||
|  | ||||
							
								
								
									
										221
									
								
								docs/dev/makefile.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										221
									
								
								docs/dev/makefile.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,221 @@ | ||||
| .. _makefile: | ||||
| 
 | ||||
| ================ | ||||
| Makefile Targets | ||||
| ================ | ||||
| 
 | ||||
| .. _gnu-make: https://www.gnu.org/software/make/manual/make.html#Introduction | ||||
| 
 | ||||
| .. sidebar:: build environment | ||||
| 
 | ||||
|    Before looking deeper at the targets, first read about :ref:`makefile setup` | ||||
|    and :ref:`make pyenv`. | ||||
| 
 | ||||
| With the aim to simplify development cycles, started with :pull:`1756` a | ||||
| ``Makefile`` based boilerplate was added.  If you are not familiar with | ||||
| Makefiles, we recommend to read gnu-make_ introduction. | ||||
| 
 | ||||
| The usage is simple, just type ``make {target-name}`` to *build* a target. | ||||
| Calling the ``help`` target gives a first overview:: | ||||
| 
 | ||||
|   $ make help | ||||
|     test      - run developer tests | ||||
|     docs      - build documentation | ||||
|     docs-live - autobuild HTML documentation while editing | ||||
|     run       - run developer instance | ||||
|     install   - developer install (./local) | ||||
|     uninstall - uninstall (./local) | ||||
|     gh-pages  - build docs & deploy on gh-pages branch | ||||
|     clean     - drop builds and environments | ||||
|     ... | ||||
| 
 | ||||
| .. contents:: Contents | ||||
|    :depth: 2 | ||||
|    :local: | ||||
|    :backlinks: entry | ||||
| 
 | ||||
| 
 | ||||
| .. _makefile setup: | ||||
| 
 | ||||
| Setup | ||||
| ===== | ||||
| 
 | ||||
| .. _git stash: https://git-scm.com/docs/git-stash | ||||
| 
 | ||||
| The main setup is done in the :origin:`Makefile`:: | ||||
| 
 | ||||
|   export GIT_URL=https://github.com/asciimoo/searx | ||||
|   export SEARX_URL=https://searx.me | ||||
|   export DOCS_URL=https://asciimoo.github.io/searx | ||||
| 
 | ||||
| .. sidebar:: fork & upstream | ||||
| 
 | ||||
|    Commit changes in your (local) branch, fork or whatever, but do not push them | ||||
|    upstream / `git stash`_ is your friend. | ||||
| 
 | ||||
| :GIT_URL: Changes this, to point to your searx fork. | ||||
| 
 | ||||
| :SEARX_URL: Changes this, to point to your searx instance. | ||||
| 
 | ||||
| :DOCS_URL: If you host your own (branded) documentation, change this URL. | ||||
| 
 | ||||
| .. _make pyenv: | ||||
| 
 | ||||
| Python environment | ||||
| ================== | ||||
| 
 | ||||
| .. sidebar:: activate environment | ||||
| 
 | ||||
|    ``source ./local/py3/bin/activate`` | ||||
| 
 | ||||
| With Makefile we do no longer need to build up the virualenv manually (as | ||||
| described in the :ref:`devquickstart` guide).  Jump into your git working tree | ||||
| and release a ``make pyenv``: | ||||
| 
 | ||||
| .. code:: sh | ||||
| 
 | ||||
|    $ cd ~/searx-clone | ||||
|    $ make pyenv | ||||
|    PYENV     usage: source ./local/py3/bin/activate | ||||
|    ... | ||||
| 
 | ||||
| With target ``pyenv`` a development environment (aka virtualenv) was build up in | ||||
| ``./local/py3/``.  To make a *developer install* of searx (:origin:`setup.py`) | ||||
| into this environment, use make target ``install``: | ||||
| 
 | ||||
| .. code:: sh | ||||
| 
 | ||||
|    $ make install | ||||
|    PYENV     usage: source ./local/py3/bin/activate | ||||
|    PYENV     using virtualenv from ./local/py3 | ||||
|    PYENV     install . | ||||
| 
 | ||||
| You have never to think about intermediate targets like ``pyenv`` or | ||||
| ``install``, the ``Makefile`` chains them as requisites.  Just run your main | ||||
| target. | ||||
| 
 | ||||
| .. sidebar:: drop environment | ||||
| 
 | ||||
|    To get rid of the existing environment before re-build use :ref:`clean target | ||||
|    <make clean>` first. | ||||
| 
 | ||||
| If you think, something goes wrong with your ./local environment or you change | ||||
| the :origin:`setup.py` file (or the requirements listed in | ||||
| :origin:`requirements-dev.txt` and :origin:`requirements.txt`), you have to call | ||||
| :ref:`make clean`. | ||||
| 
 | ||||
| 
 | ||||
| .. _make run: | ||||
| 
 | ||||
| ``make run`` | ||||
| ============ | ||||
| 
 | ||||
| To get up a running a developer instance simply call ``make run``.  This enables | ||||
| *debug* option in :origin:`searx/settings.yml`, starts a ``./searx/webapp.py`` | ||||
| instance, disables *debug* option again and opens the URL in your favorite WEB | ||||
| browser (:man:`xdg-open`): | ||||
| 
 | ||||
| .. code:: sh | ||||
| 
 | ||||
|   $ make run | ||||
|   PYENV     usage: source ./local/py3/bin/activate | ||||
|   PYENV     install . | ||||
|   ./local/py3/bin/python ./searx/webapp.py | ||||
|   ... | ||||
|   INFO:werkzeug: * Running on http://127.0.0.1:8888/ (Press CTRL+C to quit) | ||||
|   ... | ||||
| 
 | ||||
| .. _make clean: | ||||
| 
 | ||||
| ``make clean`` | ||||
| ============== | ||||
| 
 | ||||
| Drop all intermediate files, all builds, but keep sources untouched.  Includes | ||||
| target ``pyclean`` which drops ./local environment.  Before calling ``make | ||||
| clean`` stop all processes using :ref:`make pyenv`. | ||||
| 
 | ||||
| .. code:: sh | ||||
| 
 | ||||
|    $ make clean | ||||
|    CLEAN     pyclean | ||||
|    CLEAN     clean | ||||
| 
 | ||||
| .. _make docs: | ||||
| 
 | ||||
| ``make docs docs-live docs-clean`` | ||||
| ================================== | ||||
| 
 | ||||
| We describe the usage of the ``doc*`` targets in the :ref:`How to contribute / | ||||
| Documentation <contrib docs>` section.  If you want to edit the documentation | ||||
| read our :ref:`make docs-live` section.  If you are working in your own brand, | ||||
| adjust your :ref:`Makefile setup <makefile setup>`. | ||||
| 
 | ||||
| 
 | ||||
| .. _make gh-pages: | ||||
| 
 | ||||
| ``make gh-pages`` | ||||
| ================= | ||||
| 
 | ||||
| To deploy on github.io first adjust your :ref:`Makefile setup <makefile | ||||
| setup>`.  For any further read :ref:`deploy on github.io`. | ||||
| 
 | ||||
| .. _make test: | ||||
| 
 | ||||
| ``make test`` | ||||
| ============= | ||||
| 
 | ||||
| Runs a series of tests: ``test.pep8``, ``test.unit``, ``test.robot`` and does | ||||
| additional :ref:`pylint checks <make pylint>`.  You can run tests selective, | ||||
| e.g.: | ||||
| 
 | ||||
| .. code:: sh | ||||
| 
 | ||||
|   $ make test.pep8 test.unit | ||||
|   . ./local/py3/bin/activate; ./manage.sh pep8_check | ||||
|   [!] Running pep8 check | ||||
|   . ./local/py3/bin/activate; ./manage.sh unit_tests | ||||
|   [!] Running unit tests | ||||
| 
 | ||||
| .. _make pylint: | ||||
| 
 | ||||
| ``make pylint`` | ||||
| =============== | ||||
| 
 | ||||
| .. _Pylint: https://www.pylint.org/ | ||||
| 
 | ||||
| Before commiting its recommend to do some (more) linting.  Pylint_ is known as | ||||
| one of the best source-code, bug and quality checker for the Python programming | ||||
| language.  Pylint_ is not yet a quality gate within our searx project (like | ||||
| :ref:`test.pep8 <make test>` it is), but Pylint_ can help to improve code | ||||
| quality anyway.  The pylint profile we use at searx project is found in | ||||
| project's root folder :origin:`.pylintrc`. | ||||
| 
 | ||||
| Code quality is a ongoing process.  Don't try to fix all messages from Pylint, | ||||
| run Pylint and check if your changed lines are bringing up new messages.  If so, | ||||
| fix it.  By this, code quality gets incremental better and if there comes the | ||||
| day, the linting is balanced out, we might decide to add Pylint as a quality | ||||
| gate. | ||||
| 
 | ||||
| 
 | ||||
| ``make pybuild`` | ||||
| ================ | ||||
| 
 | ||||
| .. _PyPi: https://pypi.org/ | ||||
| .. _twine: https://twine.readthedocs.io/en/latest/ | ||||
| 
 | ||||
| Build Python packages in ``./dist/py``. | ||||
| 
 | ||||
| .. code:: sh | ||||
| 
 | ||||
|   $ make pybuild | ||||
|   ... | ||||
|   BUILD     pybuild | ||||
|   running sdist | ||||
|   running egg_info | ||||
|   ... | ||||
|   $ ls  ./dist/py/ | ||||
|   searx-0.15.0-py3-none-any.whl  searx-0.15.0.tar.gz | ||||
| 
 | ||||
| To upload packages to PyPi_, there is also a ``upload-pypi`` target.  It needs | ||||
| twine_ to be installed.  Since you are not the owner of :pypi:`searx` you will | ||||
| never need the latter. | ||||
| @ -1,7 +1,13 @@ | ||||
| .. _dev plugin: | ||||
| 
 | ||||
| ======= | ||||
| Plugins | ||||
| ======= | ||||
| 
 | ||||
| .. sidebar:: Further reading .. | ||||
| 
 | ||||
|    - :ref:`plugins generic` | ||||
| 
 | ||||
| Plugins can extend or replace functionality of various components of searx. | ||||
| 
 | ||||
| Example plugin | ||||
|  | ||||
| @ -4,15 +4,23 @@ | ||||
| Development Quickstart | ||||
| ====================== | ||||
| 
 | ||||
| .. sidebar:: :ref:`makefile` | ||||
| 
 | ||||
|    For additional developer purpose there are :ref:`makefile`. | ||||
| 
 | ||||
| This quickstart guide gets your environment set up with searx.  Furthermore, it | ||||
| gives a short introduction to the ``manage.sh`` script. | ||||
| 
 | ||||
| How to setup your development environment | ||||
| ========================================= | ||||
| 
 | ||||
| .. sidebar:: :ref:`make pyenv <make pyenv>` | ||||
| 
 | ||||
|    Alternatively use the :ref:`make pyenv`. | ||||
| 
 | ||||
| First, clone the source code of searx to the desired folder.  In this case the | ||||
| source is cloned to ``~/myprojects/searx``.  Then create and activate the | ||||
| searx-ve virtualenv and install the required packages using manage.sh. | ||||
| searx-ve virtualenv and install the required packages using ``manage.sh``. | ||||
| 
 | ||||
| .. code:: sh | ||||
| 
 | ||||
| @ -27,6 +35,10 @@ searx-ve virtualenv and install the required packages using manage.sh. | ||||
| How to run tests | ||||
| ================ | ||||
| 
 | ||||
| .. sidebar:: :ref:`make test.unit <make test>` | ||||
| 
 | ||||
|    Alternatively use the ``test.pep8``, ``test.unit``, ``test.robot`` targets. | ||||
| 
 | ||||
| Tests can be run using the ``manage.sh`` script.  Following tests and checks are | ||||
| available: | ||||
| 
 | ||||
| @ -41,7 +53,8 @@ For example unit tests are run with the command below: | ||||
| 
 | ||||
|    ./manage.sh unit_tests | ||||
| 
 | ||||
| For further test options, please consult the help of the ``manage.sh`` script. | ||||
| For further test options, please consult the help of the ``manage.sh`` script or | ||||
| read :ref:`make test`. | ||||
| 
 | ||||
| 
 | ||||
| How to compile styles and javascript | ||||
| @ -97,6 +110,11 @@ After installing grunt, the files can be built using the following command: | ||||
| Tips for debugging/development | ||||
| ============================== | ||||
| 
 | ||||
| .. sidebar:: :ref:`make run` | ||||
| 
 | ||||
|    Makefile target ``run`` already enables debug option for your developer | ||||
|    session / see :ref:`make run`. | ||||
| 
 | ||||
| Turn on debug logging | ||||
|   Whether you are working on a new engine or trying to eliminate a bug, it is | ||||
|   always a good idea to turn on debug logging.  When debug logging is enabled a | ||||
| @ -104,6 +122,10 @@ Turn on debug logging | ||||
|   message. It can be turned on by setting ``debug: False`` to ``debug: True`` in | ||||
|   :origin:`settings.yml <searx/settings.yml>`. | ||||
| 
 | ||||
| .. sidebar:: :ref:`make test` | ||||
| 
 | ||||
|    Alternatively use the :ref:`make test` targets. | ||||
| 
 | ||||
| Run ``./manage.sh tests`` before creating a PR. | ||||
|   Failing build on Travis is common because of PEP8 checks.  So a new commit | ||||
|   must be created containing these format fixes.  This phase can be skipped if | ||||
|  | ||||
							
								
								
									
										1428
									
								
								docs/dev/reST.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1428
									
								
								docs/dev/reST.rst
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,3 +1,5 @@ | ||||
| .. _search API: | ||||
| 
 | ||||
| ========== | ||||
| Search API | ||||
| ========== | ||||
| @ -14,6 +16,12 @@ Furthermore, two enpoints ``/`` and ``/search`` are available for querying. | ||||
| Parameters | ||||
| ========== | ||||
| 
 | ||||
| .. sidebar:: Further reading .. | ||||
| 
 | ||||
|    - :ref:`engines-dev` | ||||
|    - :ref:`settings.yml` | ||||
|    - :ref:`engines generic` | ||||
| 
 | ||||
| ``q`` : required | ||||
|   The search query.  This string is passed to external search services.  Thus, | ||||
|   searx supports syntax of each search service.  For example, ``site:github.com | ||||
|  | ||||
							
								
								
									
										10
									
								
								docs/dev/svg_image.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								docs/dev/svg_image.svg
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- originate: https://commons.wikimedia.org/wiki/File:Variable_Resistor.svg --> | ||||
| <svg xmlns="http://www.w3.org/2000/svg" | ||||
| 	version="1.1" baseProfile="full" | ||||
| 	width="70px" height="40px" viewBox="0 0 700 400"> | ||||
| 	<line x1="0" y1="200" x2="700" y2="200" stroke="black" stroke-width="20px"/> | ||||
| 	<rect x="100" y="100" width="500" height="200" fill="white" stroke="black" stroke-width="20px"/> | ||||
| 	<line x1="180" y1="370" x2="500" y2="50" stroke="black" stroke-width="15px"/> | ||||
| 	<polygon points="585 0 525 25 585 50" transform="rotate(135 525 25)"/> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 580 B | 
| @ -5,5 +5,6 @@ User documentation | ||||
| .. toctree:: | ||||
|    :maxdepth: 1 | ||||
| 
 | ||||
|    public_instances | ||||
|    search_syntax | ||||
|    own-instance | ||||
|  | ||||
							
								
								
									
										318
									
								
								docs/user/public_instances.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										318
									
								
								docs/user/public_instances.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,318 @@ | ||||
| .. _public instances: | ||||
| 
 | ||||
| .. | ||||
|    links has been ported from markdown to reST by:: | ||||
| 
 | ||||
|       regexpr:        \[([^\]]*)\]\(([^)]*)\) | ||||
|       substitution:  `\1 <\2>`__ | ||||
| 
 | ||||
| 
 | ||||
| ====================== | ||||
| Public Searx instances | ||||
| ====================== | ||||
| 
 | ||||
| .. _mailing list: mailto:searx-instances@autistici.org | ||||
| .. _subscription page: https://www.autistici.org/mailman/listinfo/searx-instances | ||||
| 
 | ||||
| 
 | ||||
| Useful information | ||||
| ================== | ||||
| 
 | ||||
| * Up-to-date health report available on https://stats.searx.xyz [1]_, for onion | ||||
|   (tor) services: https://stats.searx.xyz/tor.html | ||||
| 
 | ||||
| * Searx instances `mailing list`_ & `subscription page`_. | ||||
| 
 | ||||
| * Some of the Searx instances have a CAcert SSL certificate. You can install the | ||||
|   missing root cert `from here <http://www.cacert.org/index.php?id=3>`__. | ||||
| 
 | ||||
| * To add your own Searx instance to this page send us your PR.  A GitHub account | ||||
|   is required to send PR or add an issue. | ||||
| 
 | ||||
| .. [1] Note that most of the instances with a A+ grade in CSP column in this | ||||
|        site are not fully functional - for example auto-completion may not work. | ||||
| 
 | ||||
| 
 | ||||
| List of public Searx instances | ||||
| ============================== | ||||
| 
 | ||||
| Meta-searx instances | ||||
| ==================== | ||||
| 
 | ||||
| These are websites that source from other searx instances.  These are useful if | ||||
| you can't decide which Searx instance to use: | ||||
| 
 | ||||
| 
 | ||||
| .. flat-table:: Meta-searx instances | ||||
|    :header-rows: 1 | ||||
|    :stub-columns: 0 | ||||
|    :widths: 2 1 2 4 4 | ||||
| 
 | ||||
|    * - clearnet host | ||||
|      - onion host | ||||
|      - issuer | ||||
|      - source selection method | ||||
|      - extra privacy features | ||||
| 
 | ||||
|    * - `Neocities <https://searx.neocities.org/>`__ | ||||
|      - n/a | ||||
|      - Comodo (`Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.neocities.org>`__) | ||||
|      - Redirects users directly to a random selection of any known running | ||||
|        server after entering query. Requires | ||||
|        Javascript. `Changelog <https://searx.neocities.org/changelog.html>`__. | ||||
|      - Excludes servers with user tracking and analytics or are proxied through | ||||
|        Cloudflare. | ||||
| 
 | ||||
|    * - `Searxes <https://searxes.danwin1210.me/>`__ @Danwin | ||||
|      - onion v3 `hidden service | ||||
|        <http://searxes.nmqnkngye4ct7bgss4bmv5ca3wpa55yugvxen5kz2bbq67lwy6ps54yd.onion/>`__ | ||||
|      - Let's Encrypt (`Verification | ||||
|        <https://www.ssllabs.com/ssltest/analyze.html?d=searxes.danwin1210.me>`__) | ||||
|      - sources data from a randomly selected running server that satisfies | ||||
|        admin's quality standards which is used for post-processing | ||||
|      - filters out privacy-hostile websites (like CloudFlare) and either marks | ||||
|        them as such or folds them below the high ranking results. | ||||
| 
 | ||||
| 
 | ||||
| Alive and running | ||||
| ================= | ||||
| 
 | ||||
| **BEFORE EDITING**: Please add your Searx instance by respecting the alphabetic order. | ||||
| 
 | ||||
| .. note:: | ||||
| 
 | ||||
|    Public instances listed here may yield less accurate results as they have | ||||
|    much higher traffic and consequently have a higher chance of being blocked by | ||||
|    search providers such as Google, Qwant, Bing, Startpage, etc.  Hosting your | ||||
|    own instance or using an instance that isn't listed here may give you a more | ||||
|    consistent search experience. | ||||
| 
 | ||||
| * `ai.deafpray.wtf/searx <https://ai.deafpray.wtf/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=ai.deafpray.wtf/searx>`__ | ||||
| * `bamboozle.it <https://bamboozle.it/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=bamboozle.it>`__ | ||||
| * `bee.jaekr.dev <https://bee.jaekr.dev>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=bee.jaekr.dev>`__ | ||||
| * `beezboo.com <https://beezboo.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=beezboo.com>`__ | ||||
| * `burtrum.org/searx <https://burtrum.org/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=burtrum.org/searx>`__ | ||||
| * `darmarit.cloud/searx <https://darmarit.cloud/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=darmarit.cloud/searx>`__ | ||||
| * `dc.ax <https://dc.ax>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=dc.ax>`__ | ||||
| * `dynabyte.ca <https://dynabyte.ca>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=dynabyte.ca>`__ | ||||
| * `goso.ga <https://goso.ga/search>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=goso.ga>`__ | ||||
| * `gruble.de <https://www.gruble.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=www.gruble.de>`__ | ||||
| * `haku.ahmia.fi <https://haku.ahmia.fi/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=haku.ahmia.fi&latest>`__ | ||||
| * `haku.lelux.fi <https://haku.lelux.fi/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=haku.lelux.fi>`__ | ||||
| * `huyo.me <https://huyo.me/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=huyo.me>`__ | ||||
| * `jsearch.pw <https://jsearch.pw>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=jsearch.pw>`__ | ||||
| * `le-dahut.com/searx <https://le-dahut.com/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=le-dahut.com/searx>`__ | ||||
| * `mijisou.com <https://mijisou.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=mijisou.com>`__ | ||||
| * `null.media <https://null.media>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=null.media>`__ | ||||
| * `openworlds.info <https://openworlds.info/>`__ - Issuer: Let's Encrypt | ||||
| * `perfectpixel.de/searx/ <https://www.perfectpixel.de/searx/>`__ - Issuer: LetsEncrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=www.perfectpixel.de>`__ | ||||
| * `ransack.i2p <http://ransack.i2p/>`__ - I2P eepsite, only accessible with `I2P <https://geti2p.net/>`__ (`base32 address <http://mqamk4cfykdvhw5kjez2gnvse56gmnqxn7vkvvbuor4k4j2lbbnq.b32.i2p>`__) | ||||
| * `rapu.nz <https://rapu.nz/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=rapu.nz>`__ | ||||
| * `roflcopter.fr <https://wtf.roflcopter.fr/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=wtf.roflcopter.fr>`__ | ||||
| * `roteserver.de/searx <https://roteserver.de/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=roteserver.de>`__ | ||||
| * `s.cmd.gg <https://s.cmd.gg>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=s.cmd.gg>`__ | ||||
| * `search.activemail.de <https://search.activemail.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.activemail.de&latest>`__ | ||||
| * `search.anonymize.com <https://search.anonymize.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.anonymize.com>`__ | ||||
| * `search.azkware.net <https://search.azkware.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.azkware.net>`__ | ||||
| * `search.biboumail.fr <https://search.biboumail.fr/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.biboumail.fr>`__ | ||||
| * `search.blankenberg.eu <https://search.blankenberg.eu>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.blankenberg.eu>`__ | ||||
| * `search.d4networks.com <https://search.d4networks.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.d4networks.com>`__ | ||||
| * `search.datensturm.net <https://search.datensturm.net>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.datensturm.net>`__ | ||||
| * `search.disroot.org <https://search.disroot.org/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.disroot.org>`__ | ||||
| * `search.ethibox.fr <https://search.ethibox.fr>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.ethibox.fr>`__ | ||||
| * `search.fossdaily.xyz <https://search.fossdaily.xyz>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.fossdaily.xyz>`__ | ||||
| * `search.galaxy.cat <https://search.galaxy.cat>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.galaxy.cat>`__ | ||||
| * `search.gibberfish.org <https://search.gibberfish.org/>`__ (as `Hidden Service <http://o2jdk5mdsijm2b7l.onion/>`__ or `Proxied through Tor <https://search.gibberfish.org/tor/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.gibberfish.org>`__ | ||||
| * `search.koehn.com <https://search.koehn.com>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.koehn.com>`__ | ||||
| * `search.lgbtq.cool <https://search.lgbtq.cool/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.lgbtq.cool>`__ | ||||
| * `search.mdosch.de <https://search.mdosch.de/>`__ (as `Hidden Service <http://search.4bkxscubgtxwvhpe.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.mdosch.de>`__ | ||||
| * `search.modalogi.com <https://search.modalogi.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.modalogi.com&latest>`__ | ||||
| * `search.moravit.com <https://search.moravit.com>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.moravit.com>`__ | ||||
| * `search.nebulacentre.net <https://search.nebulacentre.net>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.nebulacentre.net>`__ | ||||
| * `search.paulla.asso.fr <https://search.paulla.asso.fr/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.paulla.asso.fr>`__ | ||||
| * `search.pifferi.info <https://search.pifferi.info/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.pifferi.info&latest>`__ | ||||
| * `search.poal.co <https://search.poal.co/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.poal.co>`__ | ||||
| * `search.privacytools.io <https://search.privacytools.io/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.privacytools.io>`__ - Uses Matomo for user tracking and analytics | ||||
| * `search.seds.nl <https://search.seds.nl/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.seds.nl&latest>`__ | ||||
| * `search.snopyta.org <https://search.snopyta.org/>`__ (as `Hidden Service <http://juy4e6eicawzdrz7.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.snopyta.org>`__ | ||||
| * `search.spaeth.me <https://search.spaeth.me/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.spaeth.me&latest>`__ | ||||
| * `search.st8.at <https://search.st8.at/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.st8.at>`__ | ||||
| * `search.stinpriza.org <https://search.stinpriza.org>`__ (as `Hidden Service <http://z5vawdol25vrmorm4yydmohsd4u6rdoj2sylvoi3e3nqvxkvpqul7bqd.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.stinpriza.org&hideResults=on>`__ | ||||
| * `search.sudo-i.net <https://search.sudo-i.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.sudo-i.net>`__ | ||||
| * `search.tolstoevsky.ml <https://search.tolstoevsky.ml>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.tolstoevsky.ml>`__ | ||||
| * `searchsin.com/searx <https://searchsin.com/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searchsin.com/searx>`__ | ||||
| * `searx.anongoth.pl <https://searx.anongoth.pl>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.anongoth.pl&latest>`__ | ||||
| * `searx.be <https://searx.be>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.be>`__ | ||||
| * `searx.ca <https://searx.ca/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.ca>`__ | ||||
| * `searx.canox.net <https://searx.canox.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.canox.net>`__ | ||||
| * `searx.cybt.de <https://searx.cybt.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.cybt.de>`__ | ||||
| * `searx.de <https://www.searx.de/>`__ - Issuer: COMODO `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.de>`__ | ||||
| * `searx.decatec.de <https://searx.decatec.de>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.decatec.de>`__ | ||||
| * `searx.devol.it <https://searx.devol.it/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=sears.devol.it>`__ | ||||
| * `searx.dnswarden.com <https://searx.dnswarden.com>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.dnswarden.com>`__ | ||||
| * `searx.drakonix.net <https://searx.drakonix.net/>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.drakonix.net>`__ | ||||
| * `searx.dresden.network <https://searx.dresden.network/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.dresden.network>`__ | ||||
| * `searx.elukerio.org <https://searx.elukerio.org/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.elukerio.org/>`__ | ||||
| * `searx.everdot.org <https://searx.everdot.org/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.everdot.org/>`__ - Crawls using YaCy | ||||
| * `searx.foo.li <https://searx.foo.li>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.foo.li&hideResults=on>`__ | ||||
| * `searx.fossencdi.org <https://searx.fossencdi.org>`__ (as `Hidden Service <http://searx.cwuzdtzlubq5uual.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.fossencdi.org>`__ | ||||
| * `searx.fr32k.de <https://searx.fr32k.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.fr32k.de>`__ | ||||
| * `searx.good.one.pl <https://searx.good.one.pl>`__ (as `Hidden Service <http://searxl7u2y6gvonm.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.good.one.pl>`__ | ||||
| * `searx.gotrust.de <https://searx.gotrust.de/>`__ (as `Hidden Service <http://nxhhwbbxc4khvvlw.onion/>`__)  - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.gotrust.de>`__ | ||||
| * `searx.hardwired.link <https://searx.hardwired.link/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.hardwired.link>`__ | ||||
| * `searx.hlfh.space <https://searx.hlfh.space>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.hlfh.space>`__ | ||||
| * `searx.info <https://searx.info>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.info>`__ | ||||
| * `searx.itunix.eu <https://searx.itunix.eu/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.itunix.eu>`__ | ||||
| * `searx.john-at-me.net <https://searx.john-at-me.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.john-at-me.net>`__ | ||||
| * `searx.kvch.me <https://searx.kvch.me>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.kvch.me>`__ | ||||
| * `searx.laquadrature.net <https://searx.laquadrature.net>`__ (as `Hidden Service <http://searchb5a7tmimez.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.laquadrature.net>`__ | ||||
| * `searx.lelux.fi <https://searx.lelux.fi/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=haku.lelux.fi>`__ | ||||
| * `searx.lhorn.de <https://searx.lhorn.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.lhorn.de&latest>`__ | ||||
| * `searx.li <https://searx.li/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.li>`__ | ||||
| * `searx.libmail.eu <https://searx.libmail.eu/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.libmail.eu/>`__ | ||||
| * `searx.linux.pizza <https://searx.linux.pizza>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.linux.pizza>`__ | ||||
| * `searx.lynnesbian.space <https://searx.lynnesbian.space/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.lynnesbian.space>`__ | ||||
| * `searx.mastodontech.de <https://searx.mastodontech.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.mastodontech.de>`__ | ||||
| * `searx.me <https://searx.me>`__ (as `Hidden Service <http://ulrn6sryqaifefld.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.me>`__ | ||||
| * `searx.mxchange.org <https://searx.mxchange.org/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.mxchange.org>`__ | ||||
| * `searx.nakhan.net <https://searx.nakhan.net>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.nakhan.net>`__ | ||||
| * `searx.nixnet.xyz <https://searx.nixnet.xyz>`__ (as `Hidden Service <http://searx.l4qlywnpwqsluw65ts7md3khrivpirse744un3x7mlskqauz5pyuzgqd.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.nixnet.xyz>`__ | ||||
| * `searx.nnto.net <https://searx.nnto.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.nnto.net>`__ | ||||
| * `searx.openhoofd.nl <https://searx.openhoofd.nl/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=openhoofd.nl>`__ | ||||
| * `searx.openpandora.org <https://searx.openpandora.org/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.openpandora.org&latest>`__ | ||||
| * `searx.operationtulip.com <https://searx.operationtulip.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.operationtulip.com>`__ | ||||
| * `searx.orcadian.net <https://searx.orcadian.net/>`__ - Issuer: Comodo CA Limited `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.orcadian.net>`__ | ||||
| * `searx.ouahpit.info <https://searx.ouahpiti.info/>`__ - Issuer: Let's Encrypt | ||||
| * `searx.pofilo.fr <https://searx.pofilo.fr/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.pofilo.fr>`__ | ||||
| * `searx.prvcy.eu <https://searx.prvcy.eu/>`__ (as `Hidden Service <http://hmfztxt3pfhevucl.onion/>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.prvcy.eu>`__ | ||||
| * `searx.pwoss.org <https://searx.pwoss.org>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.pwoss.org>`__ | ||||
| * `searx.ro <https://searx.ro/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.ro>`__ | ||||
| * `searx.ru <https://searx.ru/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.ru>`__ | ||||
| * `searx.solusar.de <https://searx.solusar.de/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.solusar.de>`__ | ||||
| * `searx.targaryen.house <https://searx.targaryen.house/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.targaryen.house>`__ | ||||
| * `searx.tuxcloud.net <https://searx.tuxcloud.net>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.tuxcloud.net>`__ | ||||
| * `searx.tyil.nl <https://searx.tyil.nl>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.tyil.nl>`__ | ||||
| * `searx.wegeeks.win <https://searx.wegeeks.win>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.wegeeks.win>`__ | ||||
| * `searx.win <https://searx.win/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.win&latest>`__ | ||||
| * `searx.xyz <https://searx.xyz/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.xyz&latest>`__ | ||||
| * `searx.zareldyn.net <https://searx.zareldyn.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.zareldyn.net>`__ | ||||
| * `searx.zdechov.net <https://searx.zdechov.net>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.zdechov.net>`__ | ||||
| * `searxs.eu <https://www.searxs.eu>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=www.searxs.eu&hideResults=on>`__ | ||||
| * `seeks.hsbp.org <https://seeks.hsbp.org/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=seeks.hsbp.org>`__ - `PGP signed fingerprints of cert <https://seeks.hsbp.org/cert>`__ | ||||
| * `skyn3t.in/srx <https://skyn3t.in/srx/>`__ - Issuer: Let's Encrypt | onion `hidden service <http://skyn3tb3bas655mw.onion/srx/>`__ | ||||
| * `spot.ecloud.global <https://spot.ecloud.global/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=spot.ecloud.global>`__ | ||||
| * `srx.sx <https://srx.sx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=srx.sx>`__ | ||||
| * `stemy.me/searx <https://stemy.me/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=stemy.me>`__ | ||||
| * `suche.dasnetzundich.de <https://suche.dasnetzundich.de>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=suche.dasnetzundich.de>`__ | ||||
| * `suche.elaon.de <https://suche.elaon.de>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=suche.elaon.de>`__ | ||||
| * `suche.xyzco456vwisukfg.onion <http://suche.xyzco456vwisukfg.onion/>`__ | ||||
| * `suche.uferwerk.org <https://suche.uferwerk.org>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=suche.uferwerk.org>`__ | ||||
| * `timdor.noip.me/searx <https://timdor.noip.me/searx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=timdor.noip.me/searx>`__ | ||||
| * `trovu.komun.org <https://trovu.komun.org>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=trovu.komun.org>`__ | ||||
| * `unmonito.red <https://unmonito.red/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=unmonito.red>`__ | ||||
| * `www.finden.tk <https://www.finden.tk/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=www.finden.tk>`__ | ||||
| * `zoek.anchel.nl <https://zoek.anchel.nl/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=zoek.anchel.nl>`__ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| Running in exclusive private walled-gardens | ||||
| =========================================== | ||||
| 
 | ||||
| These instances run in walled-gardens that exclude some segment of the general | ||||
| public (e.g. Tor users and users sharing IPs with many other users).  Caution: | ||||
| privacy is also compromised on these sites due to exposure of cleartext traffic | ||||
| to a third party other than the website operator. | ||||
| 
 | ||||
| * `intelme.com <https://intelme.com>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=intelme.com>`__ | ||||
| * `search404.io <https://www.search404.io/>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search404.io>`__  | ||||
| * `searx.com.au <https://searx.com.au/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.com.au>`__ | ||||
| * `searx.lavatech.top <https://searx.lavatech.top/>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.lavatech.top>`__ | ||||
| * `searchx.mobi <https://searchx.mobi/>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searchx.mobi>`__ | ||||
| * `searx.org <https://searx.org/>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.org>`__  | ||||
| * `searx.run <https://searx.run/>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.run>`__ | ||||
| * `searx.world <https://searx.world>`__ - Issuer: Cloudflare `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.world>`__ - Adds Amazon affiliate links | ||||
| 
 | ||||
| 
 | ||||
| Running with an incorrect SSL certificate | ||||
| ========================================= | ||||
| 
 | ||||
| * `listi.me <https://listi.me/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=listi.me&latest>`__ | ||||
| * `s.matejc.com <https://s.matejc.com/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=s.matejc.com>`__ | ||||
| * `search.jollausers.de <https://search.jollausers.de>`__ - Incorrectly configured `SSL certificate <https://www.ssllabs.com/ssltest/analyze.html?d=search.jollausers.de>`__ | ||||
| * `search.paviro.de <https://search.paviro.de>`__ - Issuer: LetsEncrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.paviro.de>`__ | ||||
| * `searx.abenthung.it <https://searx.abenthung.it/>`__ - Issuer: Comodo CA Limited `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.abenthung.it>`__ | ||||
| * `searx.coding4schoki.org <https://searx.coding4schoki.org/>`__ - Incorrectly configured `SSL Certificate <https://www.ssllabs.com/ssltest/analyze.html?d=searx.coding4schoki.org>`__ | ||||
| * `searx.haxors.club <https://searx.haxors.club/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.haxors.club>`__ | ||||
| * `searx.nulltime.net <https://searx.nulltime.net/>`__ (as `Hidden Service <http://searx7gwtu5rh6wr.onion>`__) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.nulltime.net>`__ | ||||
| * `searx.ch <https://searx.ch/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.ch>`__ (cert clock problems) | ||||
| 
 | ||||
| 
 | ||||
| Offline | ||||
| ======= | ||||
| 
 | ||||
| * `a.searx.space <https://a.searx.space>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=a.searx.space>`__ (unstable, under construction). | ||||
| * `anyonething.de <https://anyonething.de>`__ - (was found to have become a pastebin on or before 2019-03-01) Issuer: Comodo CA Limited (Warning: uses Cloudflare) `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=anyonething.de>`__ | ||||
| * `h7jwxg5rakyfvikpi.onion <http://7jwxg5rakyfvikpi.onion/>`__ - available only as Tor Hidden Service (down on 2019-06-26) | ||||
| * `hacktivis.me/searx <https://hacktivis.me/searx>`__ - (down) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=hacktivis.me/searx>`__ | ||||
| * `icebal.com <https://icebal.com>`__ - (down) Issuer: Let's Encrypt | ||||
| * `netrangler.host <https://netrangler.host>`__ - (down) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=netrangler.host>`__ | ||||
| * `opengo.nl <https://www.opengo.nl>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=www.opengo.nl>`__ | ||||
| * `p9e.de <https://p9e.de/>`__ - (down - timeout) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=p9e.de>`__ | ||||
| * `rubri.co <https://rubri.co>`__ - (down) Issuer: Let's Encrypt | ||||
| * `s.bacafe.xyz <https://s.bacafe.xyz/>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=s.bacafe.xyz&latest>`__ | ||||
| * `search.alecpap.com <https://search.alecpap.com/>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.alecpap.com>`__ | ||||
| * `search.blackit.de <https://search.blackit.de/>`__ - (down) Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.blackit.de>`__ | ||||
| * `search.deblan.org <https://search.deblan.org/>`__ (down) - Issuer: COMODO via GANDI `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.deblan.org>`__ | ||||
| * `search.homecomputing.fr <https://search.homecomputing.fr/>`__ - (down) Issuer: CAcert `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.homecomputing.fr>`__ | ||||
| * `search.jpope.org <https://search.jpope.org>`__ - (down - timeout) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.jpope.org>`__ | ||||
| * `search.kakise.xyz <https://search.kakise.xyz/>`__ - down | ||||
| * `search.kosebamse.com <https://search.kosebamse.com>`__ - Issuer: LetsEncrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.kosebamse.com>`__ | ||||
| * `search.kujiu.org <https://search.kujiu.org>`__ - (down) Issuer: Let's Encrypt | ||||
| * `search.mailaender.coffee <https://search.mailaender.coffee/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.mailaender.coffee>`__ | ||||
| * `search.matrix.ac <https://search.matrix.ac>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=matrix.ac>`__ | ||||
| * `search.mypsc.ca <https://search.mypsc.ca/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.mypsc.ca>`__ | ||||
| * `search.namedkitten.pw <https://search.namedkitten.pw>`__ - (SSL error) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.namedkitten.pw>`__ | ||||
| * `search.opentunisia.org <https://search.opentunisia.org>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.opentunisia.org>`__ | ||||
| * `search.r3d007.com <https://search.r3d007.com/>`__ - (down) Issuer: Let's Encrypt | ||||
| * `search.static.lu <https://search.static.lu/>`__ - (down) Issuer: StartCom `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.static.lu>`__ | ||||
| * `search.teej.xyz <https://search.teej.xyz>`__ - (down) Issuer: LetsEncrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.teej.xyz>`__ | ||||
| * `search.wxzm.sx <https://search.wxzm.sx>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=search.wxzm.sx>`__ | ||||
| * `searx.4ray.co <https://searx.4ray.co/>`__ - (no longer an instance, redirects to main page) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.4ray.co>`__ | ||||
| * `searx.32bitflo.at <https://searx.32bitflo.at/>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.32bitflo.at>`__ | ||||
| * `searx.ahh.si <https://searx.ahh.si/>`__ - (down) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.ahh.si>`__  | ||||
| * `searx.angristan.xyz <https://searx.angristan.xyz/>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.angristan.xyz>`__ | ||||
| * `searx.antirep.net <https://searx.antirep.net/>`__ - (return a 502 HTTP error) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.antirep.net>`__ | ||||
| * `searx.aquilenet.fr <https://searx.aquilenet.fr/>`__ - (down - 429 HTTP error) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.aquilenet.fr>`__ | ||||
| * `searx.at <https://searx.at/>`__ - (return "request exception" at every search) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.at>`__ | ||||
| * `searx.cc <https://searx.cc/>`__ - (down on 2019-06-26) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.cc>`__  | ||||
| * `searx.dk <https://searx.dk/>`__ - (down - 429 HTTP error) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.dk>`__ | ||||
| * `searx.ehrmanns.ch <https://searx.ehrmanns.ch>`__ - (down) Issuer: Let's Encrypt  | ||||
| * `searx.glibre.net <https://searx.glibre.net>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.glibre.net>`__ | ||||
| * `searx.infini.fr <https://searx.infini.fr>`__ - (return a page stating that the website is not installed) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.infini.fr>`__ | ||||
| * `searx.jeanphilippemorvan.info <https://searx.jeanphilippemorvan.info/>`__ - (down) Issuer: StartCom `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.jeanphilippemorvan.info>`__ | ||||
| * `searx.lhorn.de <https://searx.lhorn.de/>`__ - (redirect the Searx's github repository page) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.lhorn.de&latest>`__ (only reachable from european countries) | ||||
| * `searx.lvweb.host <https://searx.lvweb.host>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.lvweb.host>`__ | ||||
| * `searx.mrtino.eu <https://searx.mrtino.eu>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.mrtino.eu>`__ | ||||
| * `searx.netzspielplatz.de <https://searx.netzspielplatz.de/>`__ - (error page about GDPR even when browsing it from USA and Asia) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.netzspielplatz.de>`__ | ||||
| * `searx.new-admin.net <https://searx.new-admin.net>`__ - (down) Issuer: Let's Encrypt | ||||
| * `searx.nogafa.org <https://searx.nogafa.org/>`__ - (broken CSS) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.nogafa.org>`__ | ||||
| * `searx.potato.hu <https://searx.potato.hu>`__ - (not a searx instance) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.potato.hu>`__ | ||||
| * `searx.rubbeldiekatz.info <https://searx.rubbeldiekatz.info/>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.rubbeldiekatz.info/>`__ | ||||
| * `searx.s42.space <https://searx.s42.space>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.s42.space>`__ | ||||
| * `searx.salcay.hu <https://searx.salcay.hu/>`__ - (down - blank page) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.salcay.hu>`__ | ||||
| * `searx.selea.se <https://searx.selea.se>`__ - (Leads to default Apache page) Issuer: RapidSSL (HSTS preloaded, DNSSEC) `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.selea.se>`__ | `HSTS Preload <https://hstspreload.org/?domain=searx.selea.se>`__ | ||||
| * `searx.steinscraft.net <https://searx.steinscraft.net/>`__ - (down) Issuer: Cloudflare | ||||
| * `searx.techregion.de <https://searx.techregion.de/>`__ - (domain expired) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.techregion.de>`__ | ||||
| * `searx.tognella.com <https://searx.tognella.com/>`__ - (down) Issuer: Cloudflare | ||||
| * `searx.xi.ht <https://searx.xi.ht/>`__ - (return a 502 HTTP error) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searx.xi.ht>`__ | ||||
| * `searxist.com <https://searxist.com/>`__ - (down) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=searxist.com>`__ | ||||
| * `so.sb <https://so.sb/>`__ - (down) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=so.sb>`__ | ||||
| * `srx.stdout.net <https://srx.stdout.net/>`__ - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=srx.stdout.net>`__ | ||||
| * `w6f7cgdm54cyvohcuhraaafhajctyj3ihenrovuxogoagrr5g43qmoid.onion <http://w6f7cgdm54cyvohcuhraaafhajctyj3ihenrovuxogoagrr5g43qmoid.onion/>`__ - Hidden Service | ||||
| * `win8linux.nohost.me <https://win8linux.nohost.me/searx/>`__ - (down) Issuer: Let's Encrypt | ||||
| * `wiznet.tech <https://wiznet.tech>`__ - (down) - Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=wiznet.tech>`__ | ||||
| * `www.mercurius.space <https://www.mercurius.space/>`__ - (down) Issuer: Let's Encrypt | ||||
| * `www.ready.pm <https://www.ready.pm>`__ - Issuer: WoSign `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=www.ready.pm>`__ | ||||
| * `z.awsmppl.com <https://z.awsmppl.com>`__ - (down) Issuer: Let's Encrypt `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=z.awsmppl.com>`__ | ||||
| * `zlsdzh.tk <https://zlsdzh.tk>`__ - (down - 404 HTTP error) Issuer: TrustAsia Technologies, Inc. `Verification <https://www.ssllabs.com/ssltest/analyze.html?d=zlsdzh.tk>`__ * | ||||
| 
 | ||||
| @ -11,3 +11,6 @@ transifex-client==0.12.2 | ||||
| unittest2==1.1.0 | ||||
| zope.testrunner==4.5.1 | ||||
| selenium==3.141.0 | ||||
| linuxdoc @ git+http://github.com/return42/linuxdoc.git | ||||
| sphinx-jinja | ||||
| sphinx-tabs | ||||
|  | ||||
| @ -89,8 +89,7 @@ def response(resp): | ||||
|                         'content': content}) | ||||
| 
 | ||||
|     try: | ||||
|         result_len_container = "".join(eval_xpath(dom, '//span[@class="sb_count"]/text()')) | ||||
|         result_len_container = utils.to_string(result_len_container) | ||||
|         result_len_container = "".join(eval_xpath(dom, '//span[@class="sb_count"]//text()')) | ||||
|         if "-" in result_len_container: | ||||
|             # Remove the part "from-to" for paginated request ... | ||||
|             result_len_container = result_len_container[result_len_container.find("-") * 2 + 2:] | ||||
| @ -102,7 +101,7 @@ def response(resp): | ||||
|         logger.debug('result error :\n%s', e) | ||||
|         pass | ||||
| 
 | ||||
|     if _get_offset_from_pageno(resp.search_params.get("pageno", 0)) > result_len: | ||||
|     if result_len and _get_offset_from_pageno(resp.search_params.get("pageno", 0)) > result_len: | ||||
|         return [] | ||||
| 
 | ||||
|     results.append({'number_of_results': result_len}) | ||||
|  | ||||
| @ -109,14 +109,22 @@ def response(resp): | ||||
|         else: | ||||
|             url = build_flickr_url(photo['ownerNsid'], photo['id']) | ||||
| 
 | ||||
|         results.append({'url': url, | ||||
|                         'title': title, | ||||
|         result = { | ||||
|             'url': url, | ||||
|             'img_src': img_src, | ||||
|             'thumbnail_src': thumbnail_src, | ||||
|                         'content': content, | ||||
|                         'author': author, | ||||
|             'source': source, | ||||
|             'img_format': img_format, | ||||
|                         'template': 'images.html'}) | ||||
|             'template': 'images.html' | ||||
|         } | ||||
|         try: | ||||
|             result['author'] = author | ||||
|             result['title'] = title | ||||
|             result['content'] = content | ||||
|         except: | ||||
|             result['author'] = '' | ||||
|             result['title'] = '' | ||||
|             result['content'] = '' | ||||
|         results.append(result) | ||||
| 
 | ||||
|     return results | ||||
|  | ||||
| @ -32,7 +32,7 @@ base_url = 'https://www.ina.fr' | ||||
| search_url = base_url + '/layout/set/ajax/recherche/result?autopromote=&hf={ps}&b={start}&type=Video&r=&{query}' | ||||
| 
 | ||||
| # specific xpath variables | ||||
| results_xpath = '//div[contains(@class,"search-results--list")]/div[@class="media"]' | ||||
| results_xpath = '//div[contains(@class,"search-results--list")]//div[@class="media-body"]' | ||||
| url_xpath = './/a/@href' | ||||
| title_xpath = './/h3[@class="h3--title media-heading"]' | ||||
| thumbnail_xpath = './/img/@src' | ||||
| @ -65,8 +65,11 @@ def response(resp): | ||||
|         videoid = result.xpath(url_xpath)[0] | ||||
|         url = base_url + videoid | ||||
|         title = p.unescape(extract_text(result.xpath(title_xpath))) | ||||
|         try: | ||||
|             thumbnail = extract_text(result.xpath(thumbnail_xpath)[0]) | ||||
|         if thumbnail[0] == '/': | ||||
|         except: | ||||
|             thumbnail = '' | ||||
|         if thumbnail and thumbnail[0] == '/': | ||||
|             thumbnail = base_url + thumbnail | ||||
|         d = extract_text(result.xpath(publishedDate_xpath)[0]) | ||||
|         d = d.split('/') | ||||
|  | ||||
| @ -45,6 +45,8 @@ def request(query, params): | ||||
| def response(resp): | ||||
|     results = [] | ||||
|     response_data = loads(resp.text) | ||||
|     if not response_data: | ||||
|         return results | ||||
| 
 | ||||
|     for result in response_data['results']: | ||||
|         url = _get_url(result) | ||||
|  | ||||
| @ -29,7 +29,7 @@ def request(query, params): | ||||
|     params['url'] = search_url | ||||
|     params['method'] = 'POST' | ||||
|     params['headers']['Content-type'] = "application/json" | ||||
|     params['data'] = dumps({"query": query, | ||||
|     params['data'] = dumps({"query": query.decode('utf-8'), | ||||
|                             "searchField": "ALL", | ||||
|                             "sortDirection": "ASC", | ||||
|                             "sortOrder": "RELEVANCY", | ||||
|  | ||||
| @ -12,10 +12,14 @@ | ||||
| 
 | ||||
| from json import loads | ||||
| from searx.url_utils import urlencode | ||||
| import requests | ||||
| import base64 | ||||
| 
 | ||||
| # engine dependent config | ||||
| categories = ['music'] | ||||
| paging = True | ||||
| api_client_id = None | ||||
| api_client_secret = None | ||||
| 
 | ||||
| # search-url | ||||
| url = 'https://api.spotify.com/' | ||||
| @ -31,6 +35,16 @@ def request(query, params): | ||||
| 
 | ||||
|     params['url'] = search_url.format(query=urlencode({'q': query}), offset=offset) | ||||
| 
 | ||||
|     r = requests.post( | ||||
|         'https://accounts.spotify.com/api/token', | ||||
|         data={'grant_type': 'client_credentials'}, | ||||
|         headers={'Authorization': 'Basic ' + base64.b64encode( | ||||
|             "{}:{}".format(api_client_id, api_client_secret).encode('utf-8') | ||||
|         ).decode('utf-8')} | ||||
|     ) | ||||
|     j = loads(r.text) | ||||
|     params['headers'] = {'Authorization': 'Bearer {}'.format(j.get('access_token'))} | ||||
| 
 | ||||
|     return params | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -79,9 +79,10 @@ engines: | ||||
|     categories : science | ||||
|     timeout : 4.0 | ||||
| 
 | ||||
|   - name : base | ||||
|     engine : base | ||||
|     shortcut : bs | ||||
| #  tmp suspended:  dh key too small | ||||
| #  - name : base | ||||
| #    engine : base | ||||
| #    shortcut : bs | ||||
| 
 | ||||
|   - name : wikipedia | ||||
|     engine : wikipedia | ||||
| @ -552,10 +553,11 @@ engines: | ||||
|     timeout : 10.0 | ||||
|     disabled : True | ||||
| 
 | ||||
|   - name : scanr structures | ||||
|     shortcut: scs | ||||
|     engine : scanr_structures | ||||
|     disabled : True | ||||
| # tmp suspended: bad certificate | ||||
| #  - name : scanr structures | ||||
| #    shortcut: scs | ||||
| #    engine : scanr_structures | ||||
| #    disabled : True | ||||
| 
 | ||||
|   - name : soundcloud | ||||
|     engine : soundcloud | ||||
| @ -598,9 +600,12 @@ engines: | ||||
|     shortcut : se | ||||
|     categories : science | ||||
| 
 | ||||
|   - name : spotify | ||||
|     engine : spotify | ||||
|     shortcut : stf | ||||
| # Spotify needs API credentials | ||||
| #  - name : spotify | ||||
| #    engine : spotify | ||||
| #    shortcut : stf | ||||
| #    api_client_id : ******* | ||||
| #    api_client_secret : ******* | ||||
| 
 | ||||
|   - name : startpage | ||||
|     engine : startpage | ||||
|  | ||||
| @ -15,7 +15,68 @@ | ||||
|     {% include 'oscar/search.html' %} | ||||
| 
 | ||||
|     <div class="row"> | ||||
|         <div class="col-sm-8" id="main_results"> | ||||
|         <div class="col-sm-4 col-sm-push-8" id="sidebar_results"> | ||||
|             {% if number_of_results != '0' -%} | ||||
|                 <p><small>{{ _('Number of results') }}: {{ number_of_results }}</small></p> | ||||
|             {%- endif %} | ||||
| 
 | ||||
|             {% if unresponsive_engines and results|length >= 1 -%} | ||||
|             <div class="alert alert-danger fade in" role="alert"> | ||||
|                 <p>{{ _('Engines cannot retrieve results') }}:</p> | ||||
|                 {%- for engine_name, error_type in unresponsive_engines -%} | ||||
|                 {{- engine_name }} ({{ error_type }}){% if not loop.last %}, {% endif %}{{- "" -}} | ||||
|                 {%- endfor -%} | ||||
|             </div> | ||||
|             {%- endif %} | ||||
| 
 | ||||
|             {% if infoboxes -%} | ||||
|                 {% for infobox in infoboxes %} | ||||
|                     {% include 'oscar/infobox.html' %}{{- "\n\n" -}} | ||||
|                 {% endfor %} | ||||
|             {%- endif %} | ||||
| 
 | ||||
|             {% if suggestions %} | ||||
|             <div class="panel panel-default"> | ||||
|                 <div class="panel-heading"> | ||||
|                     <h4 class="panel-title">{{ _('Suggestions') }}</h4> | ||||
|                 </div> | ||||
|                 <div class="panel-body"> | ||||
|                     {% for suggestion in suggestions %} | ||||
|                     <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}" role="navigation" class="form-inline pull-{% if rtl %}right{% else %}left{% endif %} suggestion_item"> | ||||
|                         <input type="hidden" name="q" value="{{ suggestion.url }}"> | ||||
|                         <button type="submit" class="btn btn-default btn-xs">{{ suggestion.title }}</button> | ||||
|                     </form> | ||||
|                     {% endfor %} | ||||
|                 </div> | ||||
|             </div> | ||||
|             {%- endif %} | ||||
| 
 | ||||
|             <div class="panel panel-default"> | ||||
|                 <div class="panel-heading">{{- "" -}} | ||||
|                     <h4 class="panel-title">{{ _('Links') }}</h4>{{- "" -}} | ||||
|                 </div> | ||||
|                 <div class="panel-body"> | ||||
|                     <form role="form">{{- "" -}} | ||||
|                         <div class="form-group">{{- "" -}} | ||||
|                             <label for="search_url">{{ _('Search URL') }}</label>{{- "" -}} | ||||
|                             <input id="search_url" type="url" class="form-control select-all-on-click cursor-text" name="search_url" value="{{ search_url() }}" readonly>{{- "" -}} | ||||
|                         </div>{{- "" -}} | ||||
|                     </form> | ||||
|                     <label>{{ _('Download results') }}</label> | ||||
|                     <div class="clearfix"></div> | ||||
|                     {% for output_type in ('csv', 'json', 'rss') %} | ||||
|                     <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}" class="form-inline pull-{% if rtl %}right{% else %}left{% endif %} result_download"> | ||||
|                         {{- search_form_attrs(pageno) -}} | ||||
|                         <input type="hidden" name="format" value="{{ output_type }}">{{- "" -}} | ||||
|                         <button type="submit" class="btn btn-default">{{ output_type }}</button>{{- "" -}} | ||||
|                     </form> | ||||
|                     {% endfor %} | ||||
|                     <div class="clearfix"></div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div><!-- /#sidebar_results --> | ||||
| 
 | ||||
|         <div class="col-sm-8 col-sm-pull-4" id="main_results"> | ||||
|             <h1 class="sr-only">{{ _('Search results') }}</h1> | ||||
| 
 | ||||
|             {% if corrections -%} | ||||
| @ -91,66 +152,5 @@ | ||||
|             {% endif %} | ||||
|             {% endif %} | ||||
|         </div><!-- /#main_results --> | ||||
| 
 | ||||
|         <div class="col-sm-4" id="sidebar_results"> | ||||
|             {% if number_of_results != '0' -%} | ||||
|                 <p><small>{{ _('Number of results') }}: {{ number_of_results }}</small></p> | ||||
|             {%- endif %} | ||||
| 
 | ||||
|             {% if unresponsive_engines and results|length >= 1 -%} | ||||
|             <div class="alert alert-danger fade in" role="alert"> | ||||
|                 <p>{{ _('Engines cannot retrieve results') }}:</p> | ||||
|                 {%- for engine_name, error_type in unresponsive_engines -%} | ||||
|                 {{- engine_name }} ({{ error_type }}){% if not loop.last %}, {% endif %}{{- "" -}} | ||||
|                 {%- endfor -%} | ||||
|             </div> | ||||
|             {%- endif %} | ||||
| 
 | ||||
|             {% if infoboxes -%} | ||||
|                 {% for infobox in infoboxes %} | ||||
|                     {% include 'oscar/infobox.html' %}{{- "\n\n" -}} | ||||
|                 {% endfor %} | ||||
|             {%- endif %} | ||||
| 
 | ||||
|             {% if suggestions %} | ||||
|             <div class="panel panel-default"> | ||||
|                 <div class="panel-heading"> | ||||
|                     <h4 class="panel-title">{{ _('Suggestions') }}</h4> | ||||
|                 </div> | ||||
|                 <div class="panel-body"> | ||||
|                     {% for suggestion in suggestions %} | ||||
|                     <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}" role="navigation" class="form-inline pull-{% if rtl %}right{% else %}left{% endif %} suggestion_item"> | ||||
|                         <input type="hidden" name="q" value="{{ suggestion.url }}"> | ||||
|                         <button type="submit" class="btn btn-default btn-xs">{{ suggestion.title }}</button> | ||||
|                     </form> | ||||
|                     {% endfor %} | ||||
|                 </div> | ||||
|             </div> | ||||
|             {%- endif %} | ||||
| 
 | ||||
|             <div class="panel panel-default"> | ||||
|                 <div class="panel-heading">{{- "" -}} | ||||
|                     <h4 class="panel-title">{{ _('Links') }}</h4>{{- "" -}} | ||||
|                 </div> | ||||
|                 <div class="panel-body"> | ||||
|                     <form role="form">{{- "" -}} | ||||
|                         <div class="form-group">{{- "" -}} | ||||
|                             <label for="search_url">{{ _('Search URL') }}</label>{{- "" -}} | ||||
|                             <input id="search_url" type="url" class="form-control select-all-on-click cursor-text" name="search_url" value="{{ search_url() }}" readonly>{{- "" -}} | ||||
|                         </div>{{- "" -}} | ||||
|                     </form> | ||||
|                     <label>{{ _('Download results') }}</label> | ||||
|                     <div class="clearfix"></div> | ||||
|                     {% for output_type in ('csv', 'json', 'rss') %} | ||||
|                     <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}" class="form-inline pull-{% if rtl %}right{% else %}left{% endif %} result_download"> | ||||
|                         {{- search_form_attrs(pageno) -}} | ||||
|                         <input type="hidden" name="format" value="{{ output_type }}">{{- "" -}} | ||||
|                         <button type="submit" class="btn btn-default">{{ output_type }}</button>{{- "" -}} | ||||
|                     </form> | ||||
|                     {% endfor %} | ||||
|                     <div class="clearfix"></div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div><!-- /#sidebar_results --> | ||||
|     </div> | ||||
| {% endblock %} | ||||
|  | ||||
| @ -198,6 +198,7 @@ $(GH_PAGES):: | ||||
| 	$(MAKE) docs | ||||
| 	[ -d "gh-pages/.git" ] || git clone $(GIT_URL) gh-pages | ||||
| 	-cd $(GH_PAGES); git checkout gh-pages >/dev/null | ||||
| 	-cd $(GH_PAGES); git pull | ||||
| 	-cd $(GH_PAGES); ls -A | grep -v '.git$$' | xargs rm -rf | ||||
| 	cp -r $(DOCS_DIST)/* $(GH_PAGES)/ | ||||
| 	touch $(GH_PAGES)/.nojekyll | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Mathieu Brunot
						Mathieu Brunot