Merge remote-tracking branch 'origin/main' into feature/public-instance-sessions
This commit is contained in:
commit
a8f178a7b7
22
README.md
22
README.md
|
@ -1,4 +1,4 @@
|
||||||

|

|
||||||
|
|
||||||
[](https://github.com/benbusby/shoogle/releases)
|
[](https://github.com/benbusby/shoogle/releases)
|
||||||
[](https://opensource.org/licenses/MIT)
|
[](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
|
||||||

|

|
||||||
|
|
||||||
#### Mobile
|
#### Mobile
|
||||||

|

|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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',
|
||||||
|
|
|
@ -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 = {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user