diff options
Diffstat (limited to 'searx/plugins')
| -rw-r--r-- | searx/plugins/__init__.py | 4 | ||||
| -rw-r--r-- | searx/plugins/https_rewrite.py | 4 | ||||
| -rw-r--r-- | searx/plugins/infinite_scroll.py | 1 | ||||
| -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.py | 1 | ||||
| -rw-r--r-- | searx/plugins/search_on_category_select.py | 1 | ||||
| -rw-r--r-- | searx/plugins/tracker_url_remover.py | 28 | ||||
| -rw-r--r-- | searx/plugins/vim_hotkeys.py | 1 |
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',) |