Merge remote-tracking branch 'origin/main' into feature/public-instance-sessions

This commit is contained in:
Ben Busby 2021-10-25 17:46:07 -06:00
commit a8f178a7b7
No known key found for this signature in database
GPG Key ID: 339B7B7EB5333D14
7 changed files with 82 additions and 26 deletions

View File

@ -1,4 +1,4 @@
![Whoogle Search](docs/banner.png) ![Whoogle Search](https://raw.githubusercontent.com/benbusby/whoogle-search/main/docs/banner.png)
[![Latest Release](https://img.shields.io/github/v/release/benbusby/whoogle-search)](https://github.com/benbusby/shoogle/releases) [![Latest Release](https://img.shields.io/github/v/release/benbusby/whoogle-search)](https://github.com/benbusby/shoogle/releases)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
@ -39,9 +39,9 @@ Contents
## Features ## Features
- No ads or sponsored content - No ads or sponsored content
- No JavaScript - No JavaScript\*
- No cookies - No cookies\*\*
- No tracking/linking of your personal IP address\* - No tracking/linking of your personal IP address\*\*\*
- No AMP links - No AMP links
- No URL tracking tags (i.e. utm=%s) - No URL tracking tags (i.e. utm=%s)
- No referrer header - No referrer header
@ -49,14 +49,18 @@ Contents
- Autocomplete/search suggestions - Autocomplete/search suggestions
- POST request search and suggestion queries (when possible) - POST request search and suggestion queries (when possible)
- View images at full res without site redirect (currently mobile only) - View images at full res without site redirect (currently mobile only)
- Dark mode - Light/Dark/System theme modes (with support for [custom CSS theming](https://github.com/benbusby/whoogle-search/wiki/User-Contributed-CSS-Themes))
- Randomly generated User Agent - Randomly generated User Agent
- Easy to install/deploy - Easy to install/deploy
- DDG-style bang (i.e. `!<tag> <query>`) searches - DDG-style bang (i.e. `!<tag> <query>`) searches
- Optional location-based searching (i.e. results near \<city\>) - Optional location-based searching (i.e. results near \<city\>)
- Optional NoJS mode to disable all Javascript in results - Optional NoJS mode to view search results in a separate window with JavaScript blocked
<sup>*If deployed to a remote server, or configured to send requests through a VPN, Tor, proxy, etc.</sup> <sup>*No third party JavaScript. Whoogle can be used with JavaScript disabled, but if enabled, uses JavaScript for things like presenting search suggestions.</sup>
<sup>**No third party cookies. Whoogle uses server side cookies (sessions) to store non-sensitive configuration settings such as theme, language, etc. Just like with JavaScript, cookies can be disabled and not affect Whoogle's search functionality.</sup>
<sup>***If deployed to a remote server, or configured to send requests through a VPN, Tor, proxy, etc.</sup>
## Dependencies ## Dependencies
If using Heroku Quick Deploy, **you can skip this section**. If using Heroku Quick Deploy, **you can skip this section**.
@ -501,7 +505,7 @@ A lot of the app currently piggybacks on Google's existing support for fetching
## Screenshots ## Screenshots
#### Desktop #### Desktop
![Whoogle Desktop](docs/screenshot_desktop.jpg) ![Whoogle Desktop](https://raw.githubusercontent.com/benbusby/whoogle-search/main/docs/screenshot_desktop.jpg)
#### Mobile #### Mobile
![Whoogle Mobile](docs/screenshot_mobile.jpg) ![Whoogle Mobile](https://raw.githubusercontent.com/benbusby/whoogle-search/main/docs/screenshot_mobile.jpg)

View File

@ -331,8 +331,15 @@ class Filter:
if len(link_desc) == 0: if len(link_desc) == 0:
return return
# Replace link destination # Replace link description
link_desc[0].replace_with(get_site_alt(link_desc[0])) link_desc = link_desc[0]
for site, alt in SITE_ALTS.items():
if site not in link_desc:
continue
new_desc = BeautifulSoup(features='html.parser').new_tag('div')
new_desc.string = str(link_desc).replace(site, alt)
link_desc.replace_with(new_desc)
break
def view_image(self, soup) -> BeautifulSoup: def view_image(self, soup) -> BeautifulSoup:
"""Replaces the soup with a new one that handles mobile results and """Replaces the soup with a new one that handles mobile results and

View File

@ -28,6 +28,7 @@ class Config:
self.new_tab = read_config_bool('WHOOGLE_CONFIG_NEW_TAB') self.new_tab = read_config_bool('WHOOGLE_CONFIG_NEW_TAB')
self.view_image = read_config_bool('WHOOGLE_CONFIG_VIEW_IMAGE') self.view_image = read_config_bool('WHOOGLE_CONFIG_VIEW_IMAGE')
self.get_only = read_config_bool('WHOOGLE_CONFIG_GET_ONLY') self.get_only = read_config_bool('WHOOGLE_CONFIG_GET_ONLY')
self.accept_language = False
self.safe_keys = [ self.safe_keys = [
'lang_search', 'lang_search',

View File

@ -157,6 +157,12 @@ class Request:
self.language = ( self.language = (
config.lang_search if config.lang_search else '' config.lang_search if config.lang_search else ''
) )
# For setting Accept-language Header
self.lang_interface = ''
if config.accept_language:
self.lang_interface = config.lang_interface
self.mobile = bool(normal_ua) and ('Android' in normal_ua self.mobile = bool(normal_ua) and ('Android' in normal_ua
or 'iPhone' in normal_ua) or 'iPhone' in normal_ua)
self.modified_user_agent = gen_user_agent(self.mobile) self.modified_user_agent = gen_user_agent(self.mobile)
@ -243,7 +249,12 @@ class Request:
'User-Agent': modified_user_agent 'User-Agent': modified_user_agent
} }
# FIXME: Should investigate this further to ensure the consent # Adding the Accept-Language to the Header if possible
if self.lang_interface:
headers.update({'Accept-Language':
self.lang_interface.replace('lang_', '')
+ ';q=1.0'})
# view is suppressed correctly # view is suppressed correctly
now = datetime.now() now = datetime.now()
cookies = { cookies = {

View File

@ -3,7 +3,7 @@
/* LIGHT THEME COLORS */ /* LIGHT THEME COLORS */
--whoogle-logo: #685e79; --whoogle-logo: #685e79;
--whoogle-page-bg: #ffffff; --whoogle-page-bg: #ffffff;
--whoogle-element-bg: #685e79; --whoogle-element-bg: #4285f4;
--whoogle-text: #000000; --whoogle-text: #000000;
--whoogle-contrast-text: #ffffff; --whoogle-contrast-text: #ffffff;
--whoogle-secondary-text: #70757a; --whoogle-secondary-text: #70757a;
@ -11,18 +11,44 @@
--whoogle-result-title: #1967d2; --whoogle-result-title: #1967d2;
--whoogle-result-url: #0d652d; --whoogle-result-url: #0d652d;
--whoogle-result-visited: #4b11a8; --whoogle-result-visited: #4b11a8;
--whoogle-divider: #dfe1e5;
/* DARK THEME COLORS */ /* DARK THEME COLORS */
--whoogle-dark-logo: #888888; --whoogle-dark-logo: #685e79;
--whoogle-dark-page-bg: #080808; --whoogle-dark-page-bg: #101020;
--whoogle-dark-element-bg: #111111; --whoogle-dark-element-bg: #4285f4;
--whoogle-dark-text: #dddddd; --whoogle-dark-text: #ffffff;
--whoogle-dark-contrast-text: #aaaaaa; --whoogle-dark-contrast-text: #ffffff;
--whoogle-dark-secondary-text: #8a8b8c; --whoogle-dark-secondary-text: #bbbbbb;
--whoogle-dark-result-bg: #111111; --whoogle-dark-result-bg: #212131;
--whoogle-dark-result-title: #dddddd; --whoogle-dark-result-title: #64a7f6;
--whoogle-dark-result-url: #eceff4; --whoogle-dark-result-url: #34a853;
--whoogle-dark-result-visited: #959595; --whoogle-dark-result-visited: #bbbbff;
--whoogle-dark-divider: #111111; }
#whoogle-w {
fill: #4285f4;
}
#whoogle-h {
fill: #ea4335;
}
#whoogle-o-1 {
fill: #fbbc05;
}
#whoogle-o-2 {
fill: #4285f4;
}
#whoogle-g {
fill: #34a853;
}
#whoogle-l {
fill: #ea4335;
}
#whoogle-e {
fill: #fbbc05;
} }

View File

@ -177,6 +177,10 @@
<div class="config-div config-div-get-only"> <div class="config-div config-div-get-only">
<label for="config-get-only">{{ translation['config-get-only'] }}: </label> <label for="config-get-only">{{ translation['config-get-only'] }}: </label>
<input type="checkbox" name="get_only" id="config-get-only" {{ 'checked' if config.get_only else '' }}> <input type="checkbox" name="get_only" id="config-get-only" {{ 'checked' if config.get_only else '' }}>
</div>
<div class="config-div config-div-get-only">
<label for="config-accept-language">Set Accept-Language: </label>
<input type="checkbox" name="accept_language" id="config-accept-language" {{ 'checked' if config.accept_language else '' }}>
</div> </div>
<div class="config-div config-div-root-url"> <div class="config-div config-div-root-url">
<label for="config-url">{{ translation['config-url'] }}: </label> <label for="config-url">{{ translation['config-url'] }}: </label>

View File

@ -27,7 +27,10 @@ SITE_ALTS = {
'youtube.com': os.getenv('WHOOGLE_ALT_YT', 'invidious.snopyta.org'), 'youtube.com': os.getenv('WHOOGLE_ALT_YT', 'invidious.snopyta.org'),
'instagram.com': os.getenv('WHOOGLE_ALT_IG', 'bibliogram.art/u'), 'instagram.com': os.getenv('WHOOGLE_ALT_IG', 'bibliogram.art/u'),
'reddit.com': os.getenv('WHOOGLE_ALT_RD', 'libredd.it'), 'reddit.com': os.getenv('WHOOGLE_ALT_RD', 'libredd.it'),
'medium.com': os.getenv('WHOOGLE_ALT_MD', 'scribe.rip'), **dict.fromkeys([
'medium.com',
'levelup.gitconnected.com'
], os.getenv('WHOOGLE_ALT_MD', 'scribe.rip'))
} }