summaryrefslogtreecommitdiff
path: root/searx/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'searx/plugins')
-rw-r--r--searx/plugins/__init__.py4
-rw-r--r--searx/plugins/https_rewrite.py4
-rw-r--r--searx/plugins/infinite_scroll.py1
-rw-r--r--searx/plugins/oa_doi_rewrite.py (renamed from searx/plugins/doai_rewrite.py)21
-rw-r--r--searx/plugins/open_results_on_new_tab.py1
-rw-r--r--searx/plugins/search_on_category_select.py1
-rw-r--r--searx/plugins/tracker_url_remover.py28
-rw-r--r--searx/plugins/vim_hotkeys.py1
8 files changed, 47 insertions, 14 deletions
diff --git a/searx/plugins/__init__.py b/searx/plugins/__init__.py
index 46c1f8918..4dbcbbd28 100644
--- a/searx/plugins/__init__.py
+++ b/searx/plugins/__init__.py
@@ -22,7 +22,7 @@ if version_info[0] == 3:
logger = logger.getChild('plugins')
-from searx.plugins import (doai_rewrite,
+from searx.plugins import (oa_doi_rewrite,
https_rewrite,
infinite_scroll,
open_results_on_new_tab,
@@ -78,7 +78,7 @@ class PluginStore():
plugins = PluginStore()
-plugins.register(doai_rewrite)
+plugins.register(oa_doi_rewrite)
plugins.register(https_rewrite)
plugins.register(infinite_scroll)
plugins.register(open_results_on_new_tab)
diff --git a/searx/plugins/https_rewrite.py b/searx/plugins/https_rewrite.py
index 4462c86bc..82556017e 100644
--- a/searx/plugins/https_rewrite.py
+++ b/searx/plugins/https_rewrite.py
@@ -31,6 +31,7 @@ if sys.version_info[0] == 3:
name = "HTTPS rewrite"
description = gettext('Rewrite HTTP links to HTTPS if possible')
default_on = True
+preference_section = 'privacy'
if 'SEARX_HTTPS_REWRITE_PATH' in environ:
rules_path = environ['SEARX_rules_path']
@@ -224,6 +225,9 @@ def https_url_rewrite(result):
def on_result(request, search, result):
+ if 'parsed_url' not in result:
+ return True
+
if result['parsed_url'].scheme == 'http':
https_url_rewrite(result)
return True
diff --git a/searx/plugins/infinite_scroll.py b/searx/plugins/infinite_scroll.py
index 422a4befb..e3726671a 100644
--- a/searx/plugins/infinite_scroll.py
+++ b/searx/plugins/infinite_scroll.py
@@ -3,6 +3,7 @@ from flask_babel import gettext
name = gettext('Infinite scroll')
description = gettext('Automatically load next page when scrolling to bottom of current page')
default_on = False
+preference_section = 'ui'
js_dependencies = ('plugins/js/infinite_scroll.js',)
css_dependencies = ('plugins/css/infinite_scroll.css',)
diff --git a/searx/plugins/doai_rewrite.py b/searx/plugins/oa_doi_rewrite.py
index 95efa8f9b..be80beb26 100644
--- a/searx/plugins/doai_rewrite.py
+++ b/searx/plugins/oa_doi_rewrite.py
@@ -1,12 +1,17 @@
from flask_babel import gettext
import re
from searx.url_utils import urlparse, parse_qsl
+from searx import settings
+
regex = re.compile(r'10\.\d{4,9}/[^\s]+')
-name = gettext('DOAI rewrite')
+name = gettext('Open Access DOI rewrite')
description = gettext('Avoid paywalls by redirecting to open-access versions of publications when available')
default_on = False
+preference_section = 'general'
+
+doi_resolvers = settings['doi_resolvers']
def extract_doi(url):
@@ -20,12 +25,24 @@ def extract_doi(url):
return None
+def get_doi_resolver(args, preference_doi_resolver):
+ doi_resolvers = settings['doi_resolvers']
+ doi_resolver = args.get('doi_resolver', preference_doi_resolver)[0]
+ if doi_resolver not in doi_resolvers:
+ doi_resolvers = settings['default_doi_resolver']
+ doi_resolver_url = doi_resolvers[doi_resolver]
+ return doi_resolver_url
+
+
def on_result(request, search, result):
+ if 'parsed_url' not in result:
+ return True
+
doi = extract_doi(result['parsed_url'])
if doi and len(doi) < 50:
for suffix in ('/', '.pdf', '/full', '/meta', '/abstract'):
if doi.endswith(suffix):
doi = doi[:-len(suffix)]
- result['url'] = 'http://doai.io/' + doi
+ result['url'] = get_doi_resolver(request.args, request.preferences.get_value('doi_resolver')) + doi
result['parsed_url'] = urlparse(result['url'])
return True
diff --git a/searx/plugins/open_results_on_new_tab.py b/searx/plugins/open_results_on_new_tab.py
index ae27ea277..0f06f5a56 100644
--- a/searx/plugins/open_results_on_new_tab.py
+++ b/searx/plugins/open_results_on_new_tab.py
@@ -20,5 +20,6 @@ description = gettext('Results are opened in the same window by default. '
'This plugin overwrites the default behaviour to open links on new tabs/windows. '
'(JavaScript required)')
default_on = False
+preference_section = 'ui'
js_dependencies = ('plugins/js/open_results_on_new_tab.js',)
diff --git a/searx/plugins/search_on_category_select.py b/searx/plugins/search_on_category_select.py
index f72c63d76..2a38cac78 100644
--- a/searx/plugins/search_on_category_select.py
+++ b/searx/plugins/search_on_category_select.py
@@ -19,5 +19,6 @@ name = gettext('Search on category select')
description = gettext('Perform search immediately if a category selected. '
'Disable to select multiple categories. (JavaScript required)')
default_on = True
+preference_section = 'ui'
js_dependencies = ('plugins/js/search_on_category_select.js',)
diff --git a/searx/plugins/tracker_url_remover.py b/searx/plugins/tracker_url_remover.py
index a84012828..33dd621e1 100644
--- a/searx/plugins/tracker_url_remover.py
+++ b/searx/plugins/tracker_url_remover.py
@@ -17,28 +17,36 @@ along with searx. If not, see < http://www.gnu.org/licenses/ >.
from flask_babel import gettext
import re
-from searx.url_utils import urlunparse
+from searx.url_utils import urlunparse, parse_qsl, urlencode
-regexes = {re.compile(r'utm_[^&]+&?'),
- re.compile(r'(wkey|wemail)[^&]+&?'),
+regexes = {re.compile(r'utm_[^&]+'),
+ re.compile(r'(wkey|wemail)[^&]*'),
re.compile(r'&$')}
name = gettext('Tracker URL remover')
description = gettext('Remove trackers arguments from the returned URL')
default_on = True
+preference_section = 'privacy'
def on_result(request, search, result):
+ if 'parsed_url' not in result:
+ return True
+
query = result['parsed_url'].query
if query == "":
return True
-
- for reg in regexes:
- query = reg.sub('', query)
-
- if query != result['parsed_url'].query:
- result['parsed_url'] = result['parsed_url']._replace(query=query)
- result['url'] = urlunparse(result['parsed_url'])
+ parsed_query = parse_qsl(query)
+
+ changes = 0
+ for i, (param_name, _) in enumerate(list(parsed_query)):
+ for reg in regexes:
+ if reg.match(param_name):
+ parsed_query.pop(i - changes)
+ changes += 1
+ result['parsed_url'] = result['parsed_url']._replace(query=urlencode(parsed_query))
+ result['url'] = urlunparse(result['parsed_url'])
+ break
return True
diff --git a/searx/plugins/vim_hotkeys.py b/searx/plugins/vim_hotkeys.py
index 8f06f1343..47b830c79 100644
--- a/searx/plugins/vim_hotkeys.py
+++ b/searx/plugins/vim_hotkeys.py
@@ -5,6 +5,7 @@ description = gettext('Navigate search results with Vim-like hotkeys '
'(JavaScript required). '
'Press "h" key on main or result page to get help.')
default_on = False
+preference_section = 'ui'
js_dependencies = ('plugins/js/vim_hotkeys.js',)
css_dependencies = ('plugins/css/vim_hotkeys.css',)