33 lines
		
	
	
		
			1000 B
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			33 lines
		
	
	
		
			1000 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								# SPDX-License-Identifier: AGPL-3.0-or-later
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import re
							 | 
						||
| 
								 | 
							
								from urllib.parse import urlunparse
							 | 
						||
| 
								 | 
							
								from searx import settings
							 | 
						||
| 
								 | 
							
								from searx.plugins import logger
							 | 
						||
| 
								 | 
							
								from flask_babel import gettext
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								name = gettext('Hostname replace')
							 | 
						||
| 
								 | 
							
								description = gettext('Rewrite result hostnames or remove results based on the hostname')
							 | 
						||
| 
								 | 
							
								default_on = False
							 | 
						||
| 
								 | 
							
								preference_section = 'general'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								plugin_id = 'hostname_replace'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								replacements = {re.compile(p): r for (p, r) in settings[plugin_id].items()} if plugin_id in settings else {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								logger = logger.getChild(plugin_id)
							 | 
						||
| 
								 | 
							
								parsed = 'parsed_url'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def on_result(request, search, result):
							 | 
						||
| 
								 | 
							
								    if parsed not in result:
							 | 
						||
| 
								 | 
							
								        return True
							 | 
						||
| 
								 | 
							
								    for (pattern, replacement) in replacements.items():
							 | 
						||
| 
								 | 
							
								        if pattern.search(result[parsed].netloc):
							 | 
						||
| 
								 | 
							
								            if not replacement:
							 | 
						||
| 
								 | 
							
								                return False
							 | 
						||
| 
								 | 
							
								            result[parsed] = result[parsed]._replace(netloc=pattern.sub(replacement, result[parsed].netloc))
							 | 
						||
| 
								 | 
							
								            result['url'] = urlunparse(result[parsed])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return True
							 |