upstream update

This commit is contained in:
Vansh Comar 2021-11-26 19:42:01 +05:30
commit 9fad8f7af5
13 changed files with 496 additions and 442 deletions

View File

@ -2,7 +2,7 @@ name: buildx
on: on:
workflow_run: workflow_run:
workflows: ["tests"] workflows: ["docker_tests"]
branches: [main] branches: [main]
types: types:
- completed - completed

21
.github/workflows/docker_tests.yml vendored Normal file
View File

@ -0,0 +1,21 @@
name: docker_tests
on:
workflow_run:
workflows: ["tests"]
branches: [main]
types:
- completed
jobs:
on-success:
runs-on: ubuntu-latest
steps:
- name: checkout code
uses: actions/checkout@v2
- name: build and test
run: |
docker build --tag whoogle-search:test .
docker run --publish 5000:5000 --detach --name whoogle-search whoogle-search:test
sleep 15
docker exec whoogle-search curl -f http://localhost:5000/healthz || exit 1

View File

@ -15,7 +15,7 @@ app = Flask(__name__, static_folder=os.path.dirname(
os.path.abspath(__file__)) + '/static') os.path.abspath(__file__)) + '/static')
# Load .env file if enabled # Load .env file if enabled
if os.getenv("WHOOGLE_DOTENV", ''): if os.getenv('WHOOGLE_DOTENV', ''):
dotenv_path = '../whoogle.env' dotenv_path = '../whoogle.env'
load_dotenv(os.path.join(os.path.dirname(os.path.abspath(__file__)), load_dotenv(os.path.join(os.path.dirname(os.path.abspath(__file__)),
dotenv_path)) dotenv_path))
@ -24,6 +24,11 @@ app.default_key = generate_user_key()
app.config['SECRET_KEY'] = os.urandom(32) app.config['SECRET_KEY'] = os.urandom(32)
app.config['SESSION_TYPE'] = 'filesystem' app.config['SESSION_TYPE'] = 'filesystem'
app.config['SESSION_COOKIE_SAMESITE'] = 'strict' app.config['SESSION_COOKIE_SAMESITE'] = 'strict'
if os.getenv('HTTPS_ONLY'):
app.config['SESSION_COOKIE_NAME'] = '__Secure-session'
app.config['SESSION_COOKIE_SECURE'] = True
app.config['VERSION_NUMBER'] = '0.6.0' app.config['VERSION_NUMBER'] = '0.6.0'
app.config['APP_ROOT'] = os.getenv( app.config['APP_ROOT'] = os.getenv(
'APP_ROOT', 'APP_ROOT',

View File

@ -17,7 +17,7 @@ class Config:
self.block = os.getenv('WHOOGLE_CONFIG_BLOCK', '') self.block = os.getenv('WHOOGLE_CONFIG_BLOCK', '')
self.block_title = os.getenv('WHOOGLE_CONFIG_BLOCK_TITLE', '') self.block_title = os.getenv('WHOOGLE_CONFIG_BLOCK_TITLE', '')
self.block_url = os.getenv('WHOOGLE_CONFIG_BLOCK_URL', '') self.block_url = os.getenv('WHOOGLE_CONFIG_BLOCK_URL', '')
self.ctry = os.getenv('WHOOGLE_CONFIG_COUNTRY', '') self.ctry = os.getenv('WHOOGLE_CONFIG_COUNTRY', 'US')
self.theme = os.getenv('WHOOGLE_CONFIG_THEME', 'system') self.theme = os.getenv('WHOOGLE_CONFIG_THEME', 'system')
self.safe = read_config_bool('WHOOGLE_CONFIG_SAFE') self.safe = read_config_bool('WHOOGLE_CONFIG_SAFE')
self.dark = read_config_bool('WHOOGLE_CONFIG_DARK') # deprecated self.dark = read_config_bool('WHOOGLE_CONFIG_DARK') # deprecated

View File

@ -120,7 +120,7 @@ def gen_query(query, args, config, near_city=None) -> str:
if 'chips' in args: if 'chips' in args:
param_dict['chips'] = '&chips=' + args.get('chips') param_dict['chips'] = '&chips=' + args.get('chips')
param_dict['cr'] = ('&cr=' + config.ctry) if config.ctry else '' param_dict['gl'] = ('&gl=' + config.ctry) if config.ctry else ''
param_dict['hl'] = '&hl=' + ( param_dict['hl'] = '&hl=' + (
config.lang_interface.replace('lang_', '') config.lang_interface.replace('lang_', '')
if config.lang_interface else '' if config.lang_interface else ''

View File

@ -14,9 +14,9 @@ from app.models.config import Config
from app.models.endpoint import Endpoint from app.models.endpoint import Endpoint
from app.request import Request, TorError from app.request import Request, TorError
from app.utils.bangs import resolve_bang from app.utils.bangs import resolve_bang
from app.utils.misc import read_config_bool, get_client_ip from app.utils.misc import read_config_bool, get_client_ip, get_request_url
from app.utils.results import add_ip_card, check_currency, \ from app.utils.results import add_ip_card
add_currency_card, bold_search_terms from app.utils.results import bold_search_terms
from app.utils.search import * from app.utils.search import *
from app.utils.session import generate_user_key, valid_user_session from app.utils.session import generate_user_key, valid_user_session
from bs4 import BeautifulSoup as bsoup from bs4 import BeautifulSoup as bsoup
@ -28,7 +28,6 @@ from requests.models import PreparedRequest
# Load DDG bang json files only on init # Load DDG bang json files only on init
bang_json = json.load(open(app.config['BANG_FILE'])) bang_json = json.load(open(app.config['BANG_FILE']))
# Check the newest version of WHOOGLE # Check the newest version of WHOOGLE
update = bsoup(get(app.config['RELEASES_URL']).text, 'html.parser') update = bsoup(get(app.config['RELEASES_URL']).text, 'html.parser')
newest_version = update.select_one('[class="Link--primary"]').string[1:] newest_version = update.select_one('[class="Link--primary"]').string[1:]
@ -36,7 +35,7 @@ current_version = int(''.join(filter(str.isdigit,
app.config['VERSION_NUMBER']))) app.config['VERSION_NUMBER'])))
newest_version = int(''.join(filter(str.isdigit, newest_version))) newest_version = int(''.join(filter(str.isdigit, newest_version)))
newest_version = '' if current_version >= newest_version \ newest_version = '' if current_version >= newest_version \
else newest_version else newest_version
def auth_required(f): def auth_required(f):
@ -113,14 +112,14 @@ def before_request_func():
session['uuid'] = str(uuid.uuid4()) session['uuid'] = str(uuid.uuid4())
session['key'] = generate_user_key() session['key'] = generate_user_key()
# Skip checking for session on /autocomplete searches, # Skip checking for session on any searches that don't
# since they can be done from the browser search bar (aka # require a valid session
# no ability to initialize a session) if (not Endpoint.autocomplete.in_path(request.path) and
if not Endpoint.autocomplete.in_path(request.path): not Endpoint.healthz.in_path(request.path)):
return redirect(url_for( return redirect(url_for(
'session_check', 'session_check',
session_id=session['uuid'], session_id=session['uuid'],
follow=request.url), code=307) follow=get_request_url(request.url)), code=307)
else: else:
g.user_config = Config(**session['config']) g.user_config = Config(**session['config'])
elif 'cookies_disabled' not in request.args: elif 'cookies_disabled' not in request.args:
@ -133,20 +132,12 @@ def before_request_func():
session.pop('_permanent', None) session.pop('_permanent', None)
g.user_config = Config(**default_config) g.user_config = Config(**default_config)
# Handle https upgrade
if needs_https(request.url):
return redirect(
request.url.replace('http://', 'https://', 1),
code=308)
if not g.user_config.url: if not g.user_config.url:
g.user_config.url = request.url_root.replace( g.user_config.url = get_request_url(request.url_root)
'http://',
'https://') if os.getenv('HTTPS_ONLY', False) else request.url_root
g.user_request = Request( g.user_request = Request(
request.headers.get('User-Agent'), request.headers.get('User-Agent'),
request.url_root, get_request_url(request.url_root),
config=g.user_config) config=g.user_config)
g.app_location = g.user_config.url g.app_location = g.user_config.url
@ -207,9 +198,9 @@ def index():
'logo.html', 'logo.html',
dark=g.user_config.dark), dark=g.user_config.dark),
config_disabled=( config_disabled=(
app.config['CONFIG_DISABLE'] or app.config['CONFIG_DISABLE'] or
not valid_user_session(session) or not valid_user_session(session) or
'cookies_disabled' in request.args), 'cookies_disabled' in request.args),
config=g.user_config, config=g.user_config,
tor_available=int(os.environ.get('TOR_AVAILABLE')), tor_available=int(os.environ.get('TOR_AVAILABLE')),
version_number=app.config['VERSION_NUMBER']) version_number=app.config['VERSION_NUMBER'])
@ -524,7 +515,8 @@ def run_app() -> None:
os.environ['WHOOGLE_PROXY_TYPE'] = args.proxytype os.environ['WHOOGLE_PROXY_TYPE'] = args.proxytype
os.environ['WHOOGLE_PROXY_LOC'] = args.proxyloc os.environ['WHOOGLE_PROXY_LOC'] = args.proxyloc
os.environ['HTTPS_ONLY'] = '1' if args.https_only else '' if args.https_only:
os.environ['HTTPS_ONLY'] = '1'
if args.debug: if args.debug:
app.run(host=args.host, port=args.port, debug=args.debug) app.run(host=args.host, port=args.port, debug=args.debug)

View File

@ -61,6 +61,15 @@ body {
-webkit-appearance: none; -webkit-appearance: none;
} }
.config-options {
max-height: 370px;
overflow-y: scroll;
}
.config-buttons {
max-height: 30px;
}
.config-div { .config-div {
padding: 5px; padding: 5px;
} }
@ -102,7 +111,6 @@ button::-moz-focus-inner {
} }
.open { .open {
overflow-y: scroll;
padding-bottom: 20px; padding-bottom: 20px;
} }

View File

@ -1,248 +1,247 @@
[ [
{"name": "-------", "value": ""}, {"name": "-------", "value": ""},
{"name": "Afghanistan", "value": "countryAF"}, {"name": "Afghanistan", "value": "AF"},
{"name": "Albania", "value": "countryAL"}, {"name": "Albania", "value": "AL"},
{"name": "Algeria", "value": "countryDZ"}, {"name": "Algeria", "value": "DZ"},
{"name": "American Samoa", "value": "countryAS"}, {"name": "American Samoa", "value": "AS"},
{"name": "Andorra", "value": "countryAD"}, {"name": "Andorra", "value": "AD"},
{"name": "Angola", "value": "countryAO"}, {"name": "Angola", "value": "AO"},
{"name": "Anguilla", "value": "countryAI"}, {"name": "Anguilla", "value": "AI"},
{"name": "Antarctica", "value": "countryAQ"}, {"name": "Antarctica", "value": "AQ"},
{"name": "Antigua and Barbuda", "value": "countryAG"}, {"name": "Antigua and Barbuda", "value": "AG"},
{"name": "Argentina", "value": "countryAR"}, {"name": "Argentina", "value": "AR"},
{"name": "Armenia", "value": "countryAM"}, {"name": "Armenia", "value": "AM"},
{"name": "Aruba", "value": "countryAW"}, {"name": "Aruba", "value": "AW"},
{"name": "Australia", "value": "countryAU"}, {"name": "Australia", "value": "AU"},
{"name": "Austria", "value": "countryAT"}, {"name": "Austria", "value": "AT"},
{"name": "Azerbaijan", "value": "countryAZ"}, {"name": "Azerbaijan", "value": "AZ"},
{"name": "Bahamas", "value": "countryBS"}, {"name": "Bahamas", "value": "BS"},
{"name": "Bahrain", "value": "countryBH"}, {"name": "Bahrain", "value": "BH"},
{"name": "Bangladesh", "value": "countryBD"}, {"name": "Bangladesh", "value": "BD"},
{"name": "Barbados", "value": "countryBB"}, {"name": "Barbados", "value": "BB"},
{"name": "Belarus", "value": "countryBY"}, {"name": "Belarus", "value": "BY"},
{"name": "Belgium", "value": "countryBE"}, {"name": "Belgium", "value": "BE"},
{"name": "Belize", "value": "countryBZ"}, {"name": "Belize", "value": "BZ"},
{"name": "Benin", "value": "countryBJ"}, {"name": "Benin", "value": "BJ"},
{"name": "Bermuda", "value": "countryBM"}, {"name": "Bermuda", "value": "BM"},
{"name": "Bhutan", "value": "countryBT"}, {"name": "Bhutan", "value": "BT"},
{"name": "Bolivia", "value": "countryBO"}, {"name": "Bolivia", "value": "BO"},
{"name": "Bosnia and Herzegovina", "value": "countryBA"}, {"name": "Bosnia and Herzegovina", "value": "BA"},
{"name": "Botswana", "value": "countryBW"}, {"name": "Botswana", "value": "BW"},
{"name": "Bouvet Island", "value": "countryBV"}, {"name": "Bouvet Island", "value": "BV"},
{"name": "Brazil", "value": "countryBR"}, {"name": "Brazil", "value": "BR"},
{"name": "British Indian Ocean Territory", "value": "countryIO"}, {"name": "British Indian Ocean Territory", "value": "IO"},
{"name": "Brunei Darussalam", "value": "countryBN"}, {"name": "Brunei Darussalam", "value": "BN"},
{"name": "Bulgaria", "value": "countryBG"}, {"name": "Bulgaria", "value": "BG"},
{"name": "Burkina Faso", "value": "countryBF"}, {"name": "Burkina Faso", "value": "BF"},
{"name": "Burundi", "value": "countryBI"}, {"name": "Burundi", "value": "BI"},
{"name": "Cambodia", "value": "countryKH"}, {"name": "Cambodia", "value": "KH"},
{"name": "Cameroon", "value": "countryCM"}, {"name": "Cameroon", "value": "CM"},
{"name": "Canada", "value": "countryCA"}, {"name": "Canada", "value": "CA"},
{"name": "Cape Verde", "value": "countryCV"}, {"name": "Cape Verde", "value": "CV"},
{"name": "Cayman Islands", "value": "countryKY"}, {"name": "Cayman Islands", "value": "KY"},
{"name": "Central African Republic", "value": "countryCF"}, {"name": "Central African Republic", "value": "CF"},
{"name": "Chad", "value": "countryTD"}, {"name": "Chad", "value": "TD"},
{"name": "Chile", "value": "countryCL"}, {"name": "Chile", "value": "CL"},
{"name": "China", "value": "countryCN"}, {"name": "China", "value": "CN"},
{"name": "Christmas Island", "value": "countryCX"}, {"name": "Christmas Island", "value": "CX"},
{"name": "Cocos (Keeling) Islands", "value": "countryCC"}, {"name": "Cocos (Keeling) Islands", "value": "CC"},
{"name": "Colombia", "value": "countryCO"}, {"name": "Colombia", "value": "CO"},
{"name": "Comoros", "value": "countryKM"}, {"name": "Comoros", "value": "KM"},
{"name": "Congo", "value": "countryCG"}, {"name": "Congo", "value": "CG"},
{"name": "Congo, Democratic Republic of the", "value": "countryCD"}, {"name": "Congo, Democratic Republic of the", "value": "CD"},
{"name": "Cook Islands", "value": "countryCK"}, {"name": "Cook Islands", "value": "CK"},
{"name": "Costa Rica", "value": "countryCR"}, {"name": "Costa Rica", "value": "CR"},
{"name": "Cote D\"ivoire", "value": "countryCI"}, {"name": "Cote D'ivoire", "value": "CI"},
{"name": "Croatia (Hrvatska)", "value": "countryHR"}, {"name": "Croatia (Hrvatska)", "value": "HR"},
{"name": "Cuba", "value": "countryCU"}, {"name": "Cuba", "value": "CU"},
{"name": "Cyprus", "value": "countryCY"}, {"name": "Cyprus", "value": "CY"},
{"name": "Czech Republic", "value": "countryCZ"}, {"name": "Czech Republic", "value": "CZ"},
{"name": "Denmark", "value": "countryDK"}, {"name": "Denmark", "value": "DK"},
{"name": "Djibouti", "value": "countryDJ"}, {"name": "Djibouti", "value": "DJ"},
{"name": "Dominica", "value": "countryDM"}, {"name": "Dominica", "value": "DM"},
{"name": "Dominican Republic", "value": "countryDO"}, {"name": "Dominican Republic", "value": "DO"},
{"name": "East Timor", "value": "countryTP"}, {"name": "East Timor", "value": "TP"},
{"name": "Ecuador", "value": "countryEC"}, {"name": "Ecuador", "value": "EC"},
{"name": "Egypt", "value": "countryEG"}, {"name": "Egypt", "value": "EG"},
{"name": "El Salvador", "value": "countrySV"}, {"name": "El Salvador", "value": "SV"},
{"name": "Equatorial Guinea", "value": "countryGQ"}, {"name": "Equatorial Guinea", "value": "GQ"},
{"name": "Eritrea", "value": "countryER"}, {"name": "Eritrea", "value": "ER"},
{"name": "Estonia", "value": "countryEE"}, {"name": "Estonia", "value": "EE"},
{"name": "Ethiopia", "value": "countryET"}, {"name": "Ethiopia", "value": "ET"},
{"name": "European Union", "value": "countryEU"}, {"name": "European Union", "value": "EU"},
{"name": "Falkland Islands (Malvinas)", "value": "countryFK"}, {"name": "Falkland Islands (Malvinas)", "value": "FK"},
{"name": "Faroe Islands", "value": "countryFO"}, {"name": "Faroe Islands", "value": "FO"},
{"name": "Fiji", "value": "countryFJ"}, {"name": "Fiji", "value": "FJ"},
{"name": "Finland", "value": "countryFI"}, {"name": "Finland", "value": "FI"},
{"name": "France", "value": "countryFR"}, {"name": "France", "value": "FR"},
{"name": "France, Metropolitan", "value": "countryFX"}, {"name": "France, Metropolitan", "value": "FX"},
{"name": "French Guiana", "value": "countryGF"}, {"name": "French Guiana", "value": "GF"},
{"name": "French Polynesia", "value": "countryPF"}, {"name": "French Polynesia", "value": "PF"},
{"name": "French Southern Territories", "value": "countryTF"}, {"name": "French Southern Territories", "value": "TF"},
{"name": "Gabon", "value": "countryGA"}, {"name": "Gabon", "value": "GA"},
{"name": "Gambia", "value": "countryGM"}, {"name": "Gambia", "value": "GM"},
{"name": "Georgia", "value": "countryGE"}, {"name": "Georgia", "value": "GE"},
{"name": "Germany", "value": "countryDE"}, {"name": "Germany", "value": "DE"},
{"name": "Ghana", "value": "countryGH"}, {"name": "Ghana", "value": "GH"},
{"name": "Gibraltar", "value": "countryGI"}, {"name": "Gibraltar", "value": "GI"},
{"name": "Greece", "value": "countryGR"}, {"name": "Greece", "value": "GR"},
{"name": "Greenland", "value": "countryGL"}, {"name": "Greenland", "value": "GL"},
{"name": "Grenada", "value": "countryGD"}, {"name": "Grenada", "value": "GD"},
{"name": "Guadeloupe", "value": "countryGP"}, {"name": "Guadeloupe", "value": "GP"},
{"name": "Guam", "value": "countryGU"}, {"name": "Guam", "value": "GU"},
{"name": "Guatemala", "value": "countryGT"}, {"name": "Guatemala", "value": "GT"},
{"name": "Guinea", "value": "countryGN"}, {"name": "Guinea", "value": "GN"},
{"name": "Guinea-Bissau", "value": "countryGW"}, {"name": "Guinea-Bissau", "value": "GW"},
{"name": "Guyana", "value": "countryGY"}, {"name": "Guyana", "value": "GY"},
{"name": "Haiti", "value": "countryHT"}, {"name": "Haiti", "value": "HT"},
{"name": "Heard Island and Mcdonald Islands", "value": "countryHM"}, {"name": "Heard Island and Mcdonald Islands", "value": "HM"},
{"name": "Holy See (Vatican City State)", "value": "countryVA"}, {"name": "Holy See (Vatican City State)", "value": "VA"},
{"name": "Honduras", "value": "countryHN"}, {"name": "Honduras", "value": "HN"},
{"name": "Hong Kong", "value": "countryHK"}, {"name": "Hong Kong", "value": "HK"},
{"name": "Hungary", "value": "countryHU"}, {"name": "Hungary", "value": "HU"},
{"name": "Iceland", "value": "countryIS"}, {"name": "Iceland", "value": "IS"},
{"name": "India", "value": "countryIN"}, {"name": "India", "value": "IN"},
{"name": "Indonesia", "value": "countryID"}, {"name": "Indonesia", "value": "ID"},
{"name": "Iran, Islamic Republic of", "value": "countryIR"}, {"name": "Iran, Islamic Republic of", "value": "IR"},
{"name": "Iraq", "value": "countryIQ"}, {"name": "Iraq", "value": "IQ"},
{"name": "Ireland", "value": "countryIE"}, {"name": "Ireland", "value": "IE"},
{"name": "Israel", "value": "countryIL"}, {"name": "Israel", "value": "IL"},
{"name": "Italy", "value": "countryIT"}, {"name": "Italy", "value": "IT"},
{"name": "Jamaica", "value": "countryJM"}, {"name": "Jamaica", "value": "JM"},
{"name": "Japan", "value": "countryJP"}, {"name": "Japan", "value": "JP"},
{"name": "Jordan", "value": "countryJO"}, {"name": "Jordan", "value": "JO"},
{"name": "Kazakhstan", "value": "countryKZ"}, {"name": "Kazakhstan", "value": "KZ"},
{"name": "Kenya", "value": "countryKE"}, {"name": "Kenya", "value": "KE"},
{"name": "Kiribati", "value": "countryKI"}, {"name": "Kiribati", "value": "KI"},
{"name": "Korea, Democratic People\"s Republic of", {"name": "Korea, Democratic People's Republic of", "value": "KP"},
"value": "countryKP"}, {"name": "Korea, Republic of", "value": "KR"},
{"name": "Korea, Republic of", "value": "countryKR"}, {"name": "Kuwait", "value": "KW"},
{"name": "Kuwait", "value": "countryKW"}, {"name": "Kyrgyzstan", "value": "KG"},
{"name": "Kyrgyzstan", "value": "countryKG"}, {"name": "Lao People's Democratic Republic", "value": "LA"},
{"name": "Lao People\"s Democratic Republic", "value": "countryLA"}, {"name": "Latvia", "value": "LV"},
{"name": "Latvia", "value": "countryLV"}, {"name": "Lebanon", "value": "LB"},
{"name": "Lebanon", "value": "countryLB"}, {"name": "Lesotho", "value": "LS"},
{"name": "Lesotho", "value": "countryLS"}, {"name": "Liberia", "value": "LR"},
{"name": "Liberia", "value": "countryLR"}, {"name": "Libyan Arab Jamahiriya", "value": "LY"},
{"name": "Libyan Arab Jamahiriya", "value": "countryLY"}, {"name": "Liechtenstein", "value": "LI"},
{"name": "Liechtenstein", "value": "countryLI"}, {"name": "Lithuania", "value": "LT"},
{"name": "Lithuania", "value": "countryLT"}, {"name": "Luxembourg", "value": "LU"},
{"name": "Luxembourg", "value": "countryLU"}, {"name": "Macao", "value": "MO"},
{"name": "Macao", "value": "countryMO"},
{"name": "Macedonia, the Former Yugosalv Republic of", {"name": "Macedonia, the Former Yugosalv Republic of",
"value": "countryMK"}, "value": "MK"},
{"name": "Madagascar", "value": "countryMG"}, {"name": "Madagascar", "value": "MG"},
{"name": "Malawi", "value": "countryMW"}, {"name": "Malawi", "value": "MW"},
{"name": "Malaysia", "value": "countryMY"}, {"name": "Malaysia", "value": "MY"},
{"name": "Maldives", "value": "countryMV"}, {"name": "Maldives", "value": "MV"},
{"name": "Mali", "value": "countryML"}, {"name": "Mali", "value": "ML"},
{"name": "Malta", "value": "countryMT"}, {"name": "Malta", "value": "MT"},
{"name": "Marshall Islands", "value": "countryMH"}, {"name": "Marshall Islands", "value": "MH"},
{"name": "Martinique", "value": "countryMQ"}, {"name": "Martinique", "value": "MQ"},
{"name": "Mauritania", "value": "countryMR"}, {"name": "Mauritania", "value": "MR"},
{"name": "Mauritius", "value": "countryMU"}, {"name": "Mauritius", "value": "MU"},
{"name": "Mayotte", "value": "countryYT"}, {"name": "Mayotte", "value": "YT"},
{"name": "Mexico", "value": "countryMX"}, {"name": "Mexico", "value": "MX"},
{"name": "Micronesia, Federated States of", "value": "countryFM"}, {"name": "Micronesia, Federated States of", "value": "FM"},
{"name": "Moldova, Republic of", "value": "countryMD"}, {"name": "Moldova, Republic of", "value": "MD"},
{"name": "Monaco", "value": "countryMC"}, {"name": "Monaco", "value": "MC"},
{"name": "Mongolia", "value": "countryMN"}, {"name": "Mongolia", "value": "MN"},
{"name": "Montserrat", "value": "countryMS"}, {"name": "Montserrat", "value": "MS"},
{"name": "Morocco", "value": "countryMA"}, {"name": "Morocco", "value": "MA"},
{"name": "Mozambique", "value": "countryMZ"}, {"name": "Mozambique", "value": "MZ"},
{"name": "Myanmar", "value": "countryMM"}, {"name": "Myanmar", "value": "MM"},
{"name": "Namibia", "value": "countryNA"}, {"name": "Namibia", "value": "NA"},
{"name": "Nauru", "value": "countryNR"}, {"name": "Nauru", "value": "NR"},
{"name": "Nepal", "value": "countryNP"}, {"name": "Nepal", "value": "NP"},
{"name": "Netherlands", "value": "countryNL"}, {"name": "Netherlands", "value": "NL"},
{"name": "Netherlands Antilles", "value": "countryAN"}, {"name": "Netherlands Antilles", "value": "AN"},
{"name": "New Caledonia", "value": "countryNC"}, {"name": "New Caledonia", "value": "NC"},
{"name": "New Zealand", "value": "countryNZ"}, {"name": "New Zealand", "value": "NZ"},
{"name": "Nicaragua", "value": "countryNI"}, {"name": "Nicaragua", "value": "NI"},
{"name": "Niger", "value": "countryNE"}, {"name": "Niger", "value": "NE"},
{"name": "Nigeria", "value": "countryNG"}, {"name": "Nigeria", "value": "NG"},
{"name": "Niue", "value": "countryNU"}, {"name": "Niue", "value": "NU"},
{"name": "Norfolk Island", "value": "countryNF"}, {"name": "Norfolk Island", "value": "NF"},
{"name": "Northern Mariana Islands", "value": "countryMP"}, {"name": "Northern Mariana Islands", "value": "MP"},
{"name": "Norway", "value": "countryNO"}, {"name": "Norway", "value": "NO"},
{"name": "Oman", "value": "countryOM"}, {"name": "Oman", "value": "OM"},
{"name": "Pakistan", "value": "countryPK"}, {"name": "Pakistan", "value": "PK"},
{"name": "Palau", "value": "countryPW"}, {"name": "Palau", "value": "PW"},
{"name": "Palestinian Territory", "value": "countryPS"}, {"name": "Palestinian Territory", "value": "PS"},
{"name": "Panama", "value": "countryPA"}, {"name": "Panama", "value": "PA"},
{"name": "Papua New Guinea", "value": "countryPG"}, {"name": "Papua New Guinea", "value": "PG"},
{"name": "Paraguay", "value": "countryPY"}, {"name": "Paraguay", "value": "PY"},
{"name": "Peru", "value": "countryPE"}, {"name": "Peru", "value": "PE"},
{"name": "Philippines", "value": "countryPH"}, {"name": "Philippines", "value": "PH"},
{"name": "Pitcairn", "value": "countryPN"}, {"name": "Pitcairn", "value": "PN"},
{"name": "Poland", "value": "countryPL"}, {"name": "Poland", "value": "PL"},
{"name": "Portugal", "value": "countryPT"}, {"name": "Portugal", "value": "PT"},
{"name": "Puerto Rico", "value": "countryPR"}, {"name": "Puerto Rico", "value": "PR"},
{"name": "Qatar", "value": "countryQA"}, {"name": "Qatar", "value": "QA"},
{"name": "Reunion", "value": "countryRE"}, {"name": "Reunion", "value": "RE"},
{"name": "Romania", "value": "countryRO"}, {"name": "Romania", "value": "RO"},
{"name": "Russian Federation", "value": "countryRU"}, {"name": "Russian Federation", "value": "RU"},
{"name": "Rwanda", "value": "countryRW"}, {"name": "Rwanda", "value": "RW"},
{"name": "Saint Helena", "value": "countrySH"}, {"name": "Saint Helena", "value": "SH"},
{"name": "Saint Kitts and Nevis", "value": "countryKN"}, {"name": "Saint Kitts and Nevis", "value": "KN"},
{"name": "Saint Lucia", "value": "countryLC"}, {"name": "Saint Lucia", "value": "LC"},
{"name": "Saint Pierre and Miquelon", "value": "countryPM"}, {"name": "Saint Pierre and Miquelon", "value": "PM"},
{"name": "Saint Vincent and the Grenadines", "value": "countryVC"}, {"name": "Saint Vincent and the Grenadines", "value": "VC"},
{"name": "Samoa", "value": "countryWS"}, {"name": "Samoa", "value": "WS"},
{"name": "San Marino", "value": "countrySM"}, {"name": "San Marino", "value": "SM"},
{"name": "Sao Tome and Principe", "value": "countryST"}, {"name": "Sao Tome and Principe", "value": "ST"},
{"name": "Saudi Arabia", "value": "countrySA"}, {"name": "Saudi Arabia", "value": "SA"},
{"name": "Senegal", "value": "countrySN"}, {"name": "Senegal", "value": "SN"},
{"name": "Serbia and Montenegro", "value": "countryCS"}, {"name": "Serbia and Montenegro", "value": "CS"},
{"name": "Seychelles", "value": "countrySC"}, {"name": "Seychelles", "value": "SC"},
{"name": "Sierra Leone", "value": "countrySL"}, {"name": "Sierra Leone", "value": "SL"},
{"name": "Singapore", "value": "countrySG"}, {"name": "Singapore", "value": "SG"},
{"name": "Slovakia", "value": "countrySK"}, {"name": "Slovakia", "value": "SK"},
{"name": "Slovenia", "value": "countrySI"}, {"name": "Slovenia", "value": "SI"},
{"name": "Solomon Islands", "value": "countrySB"}, {"name": "Solomon Islands", "value": "SB"},
{"name": "Somalia", "value": "countrySO"}, {"name": "Somalia", "value": "SO"},
{"name": "South Africa", "value": "countryZA"}, {"name": "South Africa", "value": "ZA"},
{"name": "South Georgia and the South Sandwich Islands", {"name": "South Georgia and the South Sandwich Islands",
"value": "countryGS"}, "value": "GS"},
{"name": "Spain", "value": "countryES"}, {"name": "Spain", "value": "ES"},
{"name": "Sri Lanka", "value": "countryLK"}, {"name": "Sri Lanka", "value": "LK"},
{"name": "Sudan", "value": "countrySD"}, {"name": "Sudan", "value": "SD"},
{"name": "Suriname", "value": "countrySR"}, {"name": "Suriname", "value": "SR"},
{"name": "Svalbard and Jan Mayen", "value": "countrySJ"}, {"name": "Svalbard and Jan Mayen", "value": "SJ"},
{"name": "Swaziland", "value": "countrySZ"}, {"name": "Swaziland", "value": "SZ"},
{"name": "Sweden", "value": "countrySE"}, {"name": "Sweden", "value": "SE"},
{"name": "Switzerland", "value": "countryCH"}, {"name": "Switzerland", "value": "CH"},
{"name": "Syrian Arab Republic", "value": "countrySY"}, {"name": "Syrian Arab Republic", "value": "SY"},
{"name": "Taiwan", "value": "countryTW"}, {"name": "Taiwan", "value": "TW"},
{"name": "Tajikistan", "value": "countryTJ"}, {"name": "Tajikistan", "value": "TJ"},
{"name": "Tanzania, United Republic of", "value": "countryTZ"}, {"name": "Tanzania, United Republic of", "value": "TZ"},
{"name": "Thailand", "value": "countryTH"}, {"name": "Thailand", "value": "TH"},
{"name": "Togo", "value": "countryTG"}, {"name": "Togo", "value": "TG"},
{"name": "Tokelau", "value": "countryTK"}, {"name": "Tokelau", "value": "TK"},
{"name": "Tonga", "value": "countryTO"}, {"name": "Tonga", "value": "TO"},
{"name": "Trinidad and Tobago", "value": "countryTT"}, {"name": "Trinidad and Tobago", "value": "TT"},
{"name": "Tunisia", "value": "countryTN"}, {"name": "Tunisia", "value": "TN"},
{"name": "Turkey", "value": "countryTR"}, {"name": "Turkey", "value": "TR"},
{"name": "Turkmenistan", "value": "countryTM"}, {"name": "Turkmenistan", "value": "TM"},
{"name": "Turks and Caicos Islands", "value": "countryTC"}, {"name": "Turks and Caicos Islands", "value": "TC"},
{"name": "Tuvalu", "value": "countryTV"}, {"name": "Tuvalu", "value": "TV"},
{"name": "Uganda", "value": "countryUG"}, {"name": "Uganda", "value": "UG"},
{"name": "Ukraine", "value": "countryUA"}, {"name": "Ukraine", "value": "UA"},
{"name": "United Arab Emirates", "value": "countryAE"}, {"name": "United Arab Emirates", "value": "AE"},
{"name": "United Kingdom", "value": "countryUK"}, {"name": "United Kingdom", "value": "UK"},
{"name": "United States", "value": "countryUS"}, {"name": "United States", "value": "US"},
{"name": "United States Minor Outlying Islands", "value": "countryUM"}, {"name": "United States Minor Outlying Islands", "value": "UM"},
{"name": "Uruguay", "value": "countryUY"}, {"name": "Uruguay", "value": "UY"},
{"name": "Uzbekistan", "value": "countryUZ"}, {"name": "Uzbekistan", "value": "UZ"},
{"name": "Vanuatu", "value": "countryVU"}, {"name": "Vanuatu", "value": "VU"},
{"name": "Venezuela", "value": "countryVE"}, {"name": "Venezuela", "value": "VE"},
{"name": "Vietnam", "value": "countryVN"}, {"name": "Vietnam", "value": "VN"},
{"name": "Virgin Islands, British", "value": "countryVG"}, {"name": "Virgin Islands, British", "value": "VG"},
{"name": "Virgin Islands, U.S.", "value": "countryVI"}, {"name": "Virgin Islands, U.S.", "value": "VI"},
{"name": "Wallis and Futuna", "value": "countryWF"}, {"name": "Wallis and Futuna", "value": "WF"},
{"name": "Western Sahara", "value": "countryEH"}, {"name": "Western Sahara", "value": "EH"},
{"name": "Yemen", "value": "countryYE"}, {"name": "Yemen", "value": "YE"},
{"name": "Yugoslavia", "value": "countryYU"}, {"name": "Yugoslavia", "value": "YU"},
{"name": "Zambia", "value": "countryZM"}, {"name": "Zambia", "value": "ZM"},
{"name": "Zimbabwe", "value": "countryZW"} {"name": "Zimbabwe", "value": "ZW"}
] ]

View File

@ -2,8 +2,7 @@
"lang_en": { "lang_en": {
"search": "Search", "search": "Search",
"config": "Configuration", "config": "Configuration",
"config-country": "Filter Results by Country", "config-country": "Set Country",
"config-country-help": "Note: If enabled, a website will only appear in the search results if it is *hosted* in the selected country.",
"config-lang": "Interface Language", "config-lang": "Interface Language",
"config-lang-search": "Search Language", "config-lang-search": "Search Language",
"config-near": "Near", "config-near": "Near",
@ -39,8 +38,7 @@
"lang_nl": { "lang_nl": {
"search": "Zoeken", "search": "Zoeken",
"config": "Instellingen", "config": "Instellingen",
"config-country": "Filter zoek resultaten bij land", "config-country": "Land instellen",
"config-country-help": "Let op: Als je dit aanzet zal alleen website die gehost worden in het land weergegeven worden.",
"config-lang": "Taal instellingen", "config-lang": "Taal instellingen",
"config-lang-search": "Zoek taal", "config-lang-search": "Zoek taal",
"config-near": "Dichtbij", "config-near": "Dichtbij",
@ -76,8 +74,7 @@
"lang_de": { "lang_de": {
"search": "Suchen", "search": "Suchen",
"config": "Einstellungen", "config": "Einstellungen",
"config-country": "Ergebnisse nach Land filtern", "config-country": "Land einstellen",
"config-country-help": "Hinweis: Wenn aktiv, wird eine Webseite nur angezeigt, wenn sie auch in dem jeweiligen Land *gehosted* wird.",
"config-lang": "Oberflächen-Sprache", "config-lang": "Oberflächen-Sprache",
"config-lang-search": "Such-Sprache", "config-lang-search": "Such-Sprache",
"config-near": "In der Nähe von", "config-near": "In der Nähe von",
@ -113,8 +110,7 @@
"lang_es": { "lang_es": {
"search": "Buscar", "search": "Buscar",
"config": "Configuración", "config": "Configuración",
"config-country": "Filtrar Resultados por País", "config-country": "Establecer País",
"config-country-help": "Nota: Si está habilitado, un sitio web solo aparecerá en los resultados de búsqueda si está alojado en ese país.",
"config-lang": "Idioma de Interfaz", "config-lang": "Idioma de Interfaz",
"config-lang-search": "Idioma de Búsqueda", "config-lang-search": "Idioma de Búsqueda",
"config-near": "Cerca", "config-near": "Cerca",
@ -150,8 +146,7 @@
"lang_it": { "lang_it": {
"search": "Cerca", "search": "Cerca",
"config": "Impostazioni", "config": "Impostazioni",
"config-country": "Filtra risultati per paese", "config-country": "Imposta Paese",
"config-country-help": "Nota: se abilitato, il sito sarà presente tra i risultati se e soltanto se il server risiede nel paese selezionato",
"config-lang": "Lingua dell'interfaccia", "config-lang": "Lingua dell'interfaccia",
"config-lang-search": "Lingua della ricerca", "config-lang-search": "Lingua della ricerca",
"config-near": "Vicino", "config-near": "Vicino",
@ -187,8 +182,7 @@
"lang_pt": { "lang_pt": {
"search": "Pesquisar", "search": "Pesquisar",
"config": "Configuração", "config": "Configuração",
"config-country": "Filtrar Resultados por País", "config-country": "Definir País",
"config-country-help": "Observação: Se ativado, um site só aparecerá nos resultados da pesquisa se estiver *hospedado* no país selecionado.",
"config-lang": "Idioma da Interface", "config-lang": "Idioma da Interface",
"config-lang-search": "Idioma da Pesquisa", "config-lang-search": "Idioma da Pesquisa",
"config-near": "Perto", "config-near": "Perto",
@ -221,11 +215,46 @@
"dark": "escuro", "dark": "escuro",
"system": "configuração de sistema" "system": "configuração de sistema"
}, },
"lang_ru": {
"search": "Поиск",
"config": "Настройка",
"config-country": "Установить страну",
"config-lang": "Язык интерфейса",
"config-lang-search": "Язык поиска",
"config-near": "Около",
"config-near-help": "Название города",
"config-block": "Блокировать",
"config-block-help": "Список сайтов, разделенный запятыми",
"config-block-title": "Блокировать по названию",
"config-block-title-help": "Используйте regex",
"config-block-url": "Блокировать по URL-адресу",
"config-block-url-help": "Используйте regex",
"config-theme": "Оформление",
"config-nojs": "Показывать ссылки NoJS",
"config-dark": "Темный режим",
"config-safe": "Безопасный поиск",
"config-alts": "Заменить ссылки на социальные сети",
"config-alts-help": "Замена ссылкок Twitter, YouTube, Instagram и т.д. на альтернативы, уважающие конфиденциальность.",
"config-new-tab": "Открывать ссылки в новой вкладке",
"config-images": "Поиск полноразмерных изображений",
"config-images-help": "(Экспериментально) Добавляет опцию 'Просмотр изображения' к поиску изображений в ПК-режиме. Это приведет к тому, что миниатюры изображений будут иметь более низкое разрешение.",
"config-tor": "Использовать Tor",
"config-get-only": "Только GET-запросы",
"config-url": "Корневой URL-адрес",
"config-css": "Пользовательский CSS",
"load": "Загрузить",
"apply": "Применить",
"save-as": "Сохранить как...",
"github-link": "Посмотреть в GitHub",
"translate": "перевести",
"light": "светлое",
"dark": "темное",
"system": "системное"
},
"lang_zh-CN": { "lang_zh-CN": {
"search": "搜索", "search": "搜索",
"config": "配置", "config": "配置",
"config-country": "按国家过滤搜索结果", "config-country": "设置国家",
"config-country-help": "注意:启用后,只有在所选国家*部署*的网站会出现在搜索结果中。",
"config-lang": "界面语言", "config-lang": "界面语言",
"config-lang-search": "搜索语言", "config-lang-search": "搜索语言",
"config-near": "接近", "config-near": "接近",
@ -261,8 +290,7 @@
"lang_si": { "lang_si": {
"search": "සොයන්න", "search": "සොයන්න",
"config": "වින්‍යාසය", "config": "වින්‍යාසය",
"config-country": "රට අනුව ප්‍රතිඵල පෙරන්න", "config-country": "රට සකසන්න",
"config-country-help": "සටහන: සබල කර ඇත්නම්, වියමන අඩවියක් සෙවුම් ප්‍රතිඵලවල දිස්වන්නේ එය තෝරාගත් රටෙහි සිට *සත්කාරකත්වය* දරන්නේ නම් පමණි.",
"config-lang": "අතුරු මුහුණතෙහි භාෂාව", "config-lang": "අතුරු මුහුණතෙහි භාෂාව",
"config-lang-search": "සෙවුම් භාෂාව", "config-lang-search": "සෙවුම් භාෂාව",
"config-near": "ආසන්න", "config-near": "ආසන්න",
@ -298,8 +326,7 @@
"lang_fr": { "lang_fr": {
"search": "Chercher", "search": "Chercher",
"config": "Configuration", "config": "Configuration",
"config-country": "Filter les Résultats par Pays", "config-country": "Définir le pays",
"config-country-help": "Note : Si activé, un site web va uniquement apparaitre dans les résultat de la recherche si il est *hébérgé* dans le pays sélectionné.",
"config-lang": "Langage de l'Interface", "config-lang": "Langage de l'Interface",
"config-lang-search": "Langage de Recherche", "config-lang-search": "Langage de Recherche",
"config-near": "Proche", "config-near": "Proche",
@ -335,8 +362,7 @@
"lang_fa": { "lang_fa": {
"search": "جستجو", "search": "جستجو",
"config": "پیکربندی", "config": "پیکربندی",
"config-country": "فیلتر نتایج بر اساس کشور", "config-country": "کشور را تنظیم کنید",
"config-country-help": "توجه: در صورت فعال بودن، وبسایت تنها در صورتی نمایش داده می‌شود که *در کشور انتخابی میزبانی شده باشد*.",
"config-lang": "زبان رابط کاربری", "config-lang": "زبان رابط کاربری",
"config-lang-search": "زبان جستجو", "config-lang-search": "زبان جستجو",
"config-near": "نزدیک", "config-near": "نزدیک",
@ -372,8 +398,7 @@
"lang_cs": { "lang_cs": {
"search": "Hledat", "search": "Hledat",
"config": "Konfigurace", "config": "Konfigurace",
"config-country": "Filtrovat výsledky podle země", "config-country": "Nastavte zemi",
"config-country-help": "Poznámka: Pokud je povoleno, webová stránka se objeví ve výsledcích vyhledávání, pouze pokud je *hostována* ve vybrané zemi.",
"config-lang": "Jazyk rozhraní", "config-lang": "Jazyk rozhraní",
"config-lang-search": "Jazyk vyhledávání", "config-lang-search": "Jazyk vyhledávání",
"config-near": "Poblíž", "config-near": "Poblíž",
@ -409,8 +434,7 @@
"lang_zh-TW": { "lang_zh-TW": {
"search": "搜尋", "search": "搜尋",
"config": "設定", "config": "設定",
"config-country": "依國家過濾結果", "config-country": "設置國家",
"config-country-help": "注意:一經套用,只有在部署在指定國家內的網站會出現在搜尋結果中。",
"config-lang": "界面語言", "config-lang": "界面語言",
"config-lang-search": "搜尋語言", "config-lang-search": "搜尋語言",
"config-near": "接近", "config-near": "接近",
@ -446,8 +470,7 @@
"lang_bg": { "lang_bg": {
"search": "Търсене", "search": "Търсене",
"config": "Конфигурация", "config": "Конфигурация",
"config-country": "Филтрирай резултатите по държави", "config-country": "Задайте държава",
"config-country-help": "Забележка: Ако това е разрешено, уебсайтoвете ще се показват в резултатите от търсенето, само ако са * хоствани * в избраната държава.",
"config-lang": "Език на интерфейса", "config-lang": "Език на интерфейса",
"config-lang-search": "Език за търсене", "config-lang-search": "Език за търсене",
"config-near": "Близо до", "config-near": "Близо до",
@ -483,8 +506,7 @@
"lang_hi": { "lang_hi": {
"search": "खोज", "search": "खोज",
"config": "कॉन्फ़िगरेशन", "config": "कॉन्फ़िगरेशन",
"config-country": "देश के अनुसार परिणाम फ़िल्टर करें", "config-country": "देश सेट करें",
"config-country-help": "नोट: यदि सक्षम है, तो कोई वेबसाइट खोज परिणामों में केवल तभी दिखाई देगी जब वह चयनित देश में *होस्ट* हो।",
"config-lang": "इंटरफ़ेस भाषा", "config-lang": "इंटरफ़ेस भाषा",
"config-lang-search": "खोज की भाषा", "config-lang-search": "खोज की भाषा",
"config-near": "पास", "config-near": "पास",
@ -520,8 +542,7 @@
"lang_ja": { "lang_ja": {
"search": "検索", "search": "検索",
"config": "設定", "config": "設定",
"config-country": "検索結果を国でフィルタ", "config-country": "国を設定する",
"config-country-help": "注: 有効にした場合、選択した国で*ホストされている*ウェブサイトのみが検索結果に表示されます。",
"config-lang": "インタフェースの言語", "config-lang": "インタフェースの言語",
"config-lang-search": "検索する言語", "config-lang-search": "検索する言語",
"config-near": "場所", "config-near": "場所",

View File

@ -5,6 +5,7 @@
<link rel="search" href="opensearch.xml" type="application/opensearchdescription+xml" title="Whoogle Search"> <link rel="search" href="opensearch.xml" type="application/opensearchdescription+xml" title="Whoogle Search">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="referrer" content="no-referrer"> <meta name="referrer" content="no-referrer">
<link rel="stylesheet" href="{{ cb_url('logo.css') }}">
<link rel="stylesheet" href="{{ cb_url('input.css') }}"> <link rel="stylesheet" href="{{ cb_url('input.css') }}">
<link rel="stylesheet" href="{{ cb_url('search.css') }}"> <link rel="stylesheet" href="{{ cb_url('search.css') }}">
<link rel="stylesheet" href="{{ cb_url('header.css') }}"> <link rel="stylesheet" href="{{ cb_url('header.css') }}">

View File

@ -21,6 +21,7 @@
<script type="text/javascript" src="{{ cb_url('controller.js') }}"></script> <script type="text/javascript" src="{{ cb_url('controller.js') }}"></script>
<link rel="search" href="opensearch.xml" type="application/opensearchdescription+xml" title="Whoogle Search"> <link rel="search" href="opensearch.xml" type="application/opensearchdescription+xml" title="Whoogle Search">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="{{ cb_url('logo.css') }}">
{% if config.theme %} {% if config.theme %}
{% if config.theme == 'system' %} {% if config.theme == 'system' %}
<style> <style>
@ -84,145 +85,146 @@
<div class="content"> <div class="content">
<div class="config-fields"> <div class="config-fields">
<form id="config-form" action="config" method="post"> <form id="config-form" action="config" method="post">
<div class="config-div config-div-ctry"> <div class="config-options">
<label for="config-ctry">{{ translation['config-country'] }}: </label> <div class="config-div config-div-ctry">
<select name="ctry" id="config-ctry"> <label for="config-ctry">{{ translation['config-country'] }}: </label>
{% for ctry in countries %} <select name="ctry" id="config-ctry">
<option value="{{ ctry.value }}" {% for ctry in countries %}
{% if ctry.value in config.ctry %} <option value="{{ ctry.value }}"
selected {% if ctry.value in config.ctry %}
{% endif %}> selected
{{ ctry.name }} {% endif %}>
</option> {{ ctry.name }}
{% endfor %} </option>
</select> {% endfor %}
<div><span class="info-text"> — {{ translation['config-country-help'] }}</span></div> </select>
</div>
<div class="config-div config-div-lang">
<label for="config-lang-interface">{{ translation['config-lang'] }}: </label>
<select name="lang_interface" id="config-lang-interface">
{% for lang in languages %}
<option value="{{ lang.value }}"
{% if lang.value in config.lang_interface %}
selected
{% endif %}>
{{ lang.name }}
</option>
{% endfor %}
</select>
</div>
<div class="config-div config-div-search-lang">
<label for="config-lang-search">{{ translation['config-lang-search'] }}: </label>
<select name="lang_search" id="config-lang-search">
{% for lang in languages %}
<option value="{{ lang.value }}"
{% if lang.value in config.lang_search %}
selected
{% endif %}>
{{ lang.name }}
</option>
{% endfor %}
</select>
</div>
<div class="config-div config-div-near">
<label for="config-near">{{ translation['config-near'] }}: </label>
<input type="text" name="near" id="config-near"
placeholder="{{ translation['config-near-help'] }}" value="{{ config.near }}">
</div>
<div class="config-div config-div-block">
<label for="config-block">{{ translation['config-block'] }}: </label>
<input type="text" name="block" id="config-block"
placeholder="{{ translation['config-block-help'] }}" value="{{ config.block }}">
</div>
<div class="config-div config-div-block">
<label for="config-block-title">{{ translation['config-block-title'] }}: </label>
<input type="text" name="block_title" id="config-block"
placeholder="{{ translation['config-block-title-help'] }}"
value="{{ config.block_title }}">
</div>
<div class="config-div config-div-block">
<label for="config-block-url">{{ translation['config-block-url'] }}: </label>
<input type="text" name="block_url" id="config-block"
placeholder="{{ translation['config-block-url-help'] }}" value="{{ config.block_url }}">
</div>
<div class="config-div config-div-nojs">
<label for="config-nojs">{{ translation['config-nojs'] }}: </label>
<input type="checkbox" name="nojs" id="config-nojs" {{ 'checked' if config.nojs else '' }}>
</div>
<div class="config-div config-div-theme">
<label for="config-theme">{{ translation['config-theme'] }}: </label>
<select name="theme" id="config-theme">
{% for theme in themes %}
<option value="{{ theme }}"
{% if theme in config.theme %}
selected
{% endif %}>
{{ translation[theme].capitalize() }}
</option>
{% endfor %}
</select>
</div>
<!-- DEPRECATED -->
<!--<div class="config-div config-div-dark">-->
<!--<label for="config-dark">{{ translation['config-dark'] }}: </label>-->
<!--<input type="checkbox" name="dark" id="config-dark" {{ 'checked' if config.dark else '' }}>-->
<!--</div>-->
<div class="config-div config-div-safe">
<label for="config-safe">{{ translation['config-safe'] }}: </label>
<input type="checkbox" name="safe" id="config-safe" {{ 'checked' if config.safe else '' }}>
</div>
<div class="config-div config-div-alts">
<label class="tooltip" for="config-alts">{{ translation['config-alts'] }}: </label>
<input type="checkbox" name="alts" id="config-alts" {{ 'checked' if config.alts else '' }}>
<div><span class="info-text"> — {{ translation['config-alts-help'] }}</span></div>
</div>
<div class="config-div config-div-new-tab">
<label for="config-new-tab">{{ translation['config-new-tab'] }}: </label>
<input type="checkbox" name="new_tab"
id="config-new-tab" {{ 'checked' if config.new_tab else '' }}>
</div>
<div class="config-div config-div-view-image">
<label for="config-view-image">{{ translation['config-images'] }}: </label>
<input type="checkbox" name="view_image"
id="config-view-image" {{ 'checked' if config.view_image else '' }}>
<div><span class="info-text"> — {{ translation['config-images-help'] }}</span></div>
</div>
<div class="config-div config-div-tor">
<label for="config-tor">{{ translation['config-tor'] }}: {{ '' if tor_available else 'Unavailable' }}</label>
<input type="checkbox" name="tor"
id="config-tor" {{ '' if tor_available else 'hidden' }} {{ 'checked' if config.tor else '' }}>
</div>
<div class="config-div config-div-get-only">
<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 '' }}>
</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 class="config-div config-div-root-url">
<label for="config-url">{{ translation['config-url'] }}: </label>
<input type="text" name="url" id="config-url" value="{{ config.url }}">
</div>
<div class="config-div config-div-custom-css">
<a id="css-link"
href="https://github.com/benbusby/whoogle-search/wiki/User-Contributed-CSS-Themes">
{{ translation['config-css'] }}:
</a>
<textarea
name="style"
id="config-style"
autocapitalize="off"
autocomplete="off"
spellcheck="false"
autocorrect="off"
value="">
{{ config.style.replace('\t', '') }}
</textarea>
</div>
</div> </div>
<div class="config-div config-div-lang"> <div class="config-div config-buttons">
<label for="config-lang-interface">{{ translation['config-lang'] }}: </label>
<select name="lang_interface" id="config-lang-interface">
{% for lang in languages %}
<option value="{{ lang.value }}"
{% if lang.value in config.lang_interface %}
selected
{% endif %}>
{{ lang.name }}
</option>
{% endfor %}
</select>
</div>
<div class="config-div config-div-search-lang">
<label for="config-lang-search">{{ translation['config-lang-search'] }}: </label>
<select name="lang_search" id="config-lang-search">
{% for lang in languages %}
<option value="{{ lang.value }}"
{% if lang.value in config.lang_search %}
selected
{% endif %}>
{{ lang.name }}
</option>
{% endfor %}
</select>
</div>
<div class="config-div config-div-near">
<label for="config-near">{{ translation['config-near'] }}: </label>
<input type="text" name="near" id="config-near"
placeholder="{{ translation['config-near-help'] }}" value="{{ config.near }}">
</div>
<div class="config-div config-div-block">
<label for="config-block">{{ translation['config-block'] }}: </label>
<input type="text" name="block" id="config-block"
placeholder="{{ translation['config-block-help'] }}" value="{{ config.block }}">
</div>
<div class="config-div config-div-block">
<label for="config-block-title">{{ translation['config-block-title'] }}: </label>
<input type="text" name="block_title" id="config-block"
placeholder="{{ translation['config-block-title-help'] }}"
value="{{ config.block_title }}">
</div>
<div class="config-div config-div-block">
<label for="config-block-url">{{ translation['config-block-url'] }}: </label>
<input type="text" name="block_url" id="config-block"
placeholder="{{ translation['config-block-url-help'] }}" value="{{ config.block_url }}">
</div>
<div class="config-div config-div-nojs">
<label for="config-nojs">{{ translation['config-nojs'] }}: </label>
<input type="checkbox" name="nojs" id="config-nojs" {{ 'checked' if config.nojs else '' }}>
</div>
<div class="config-div config-div-theme">
<label for="config-theme">{{ translation['config-theme'] }}: </label>
<select name="theme" id="config-theme">
{% for theme in themes %}
<option value="{{ theme }}"
{% if theme in config.theme %}
selected
{% endif %}>
{{ translation[theme].capitalize() }}
</option>
{% endfor %}
</select>
</div>
<!-- DEPRECATED -->
<!--<div class="config-div config-div-dark">-->
<!--<label for="config-dark">{{ translation['config-dark'] }}: </label>-->
<!--<input type="checkbox" name="dark" id="config-dark" {{ 'checked' if config.dark else '' }}>-->
<!--</div>-->
<div class="config-div config-div-safe">
<label for="config-safe">{{ translation['config-safe'] }}: </label>
<input type="checkbox" name="safe" id="config-safe" {{ 'checked' if config.safe else '' }}>
</div>
<div class="config-div config-div-alts">
<label class="tooltip" for="config-alts">{{ translation['config-alts'] }}: </label>
<input type="checkbox" name="alts" id="config-alts" {{ 'checked' if config.alts else '' }}>
<div><span class="info-text"> — {{ translation['config-alts-help'] }}</span></div>
</div>
<div class="config-div config-div-new-tab">
<label for="config-new-tab">{{ translation['config-new-tab'] }}: </label>
<input type="checkbox" name="new_tab"
id="config-new-tab" {{ 'checked' if config.new_tab else '' }}>
</div>
<div class="config-div config-div-view-image">
<label for="config-view-image">{{ translation['config-images'] }}: </label>
<input type="checkbox" name="view_image"
id="config-view-image" {{ 'checked' if config.view_image else '' }}>
<div><span class="info-text"> — {{ translation['config-images-help'] }}</span></div>
</div>
<div class="config-div config-div-tor">
<label for="config-tor">{{ translation['config-tor'] }}: {{ '' if tor_available else 'Unavailable' }}</label>
<input type="checkbox" name="tor"
id="config-tor" {{ '' if tor_available else 'hidden' }} {{ 'checked' if config.tor else '' }}>
</div>
<div class="config-div config-div-get-only">
<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 '' }}>
</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 class="config-div config-div-root-url">
<label for="config-url">{{ translation['config-url'] }}: </label>
<input type="text" name="url" id="config-url" value="{{ config.url }}">
</div>
<div class="config-div config-div-custom-css">
<a id="css-link"
href="https://github.com/benbusby/whoogle-search/wiki/User-Contributed-CSS-Themes">
{{ translation['config-css'] }}:
</a>
<textarea
name="style"
id="config-style"
autocapitalize="off"
autocomplete="off"
spellcheck="false"
autocorrect="off"
value="">
{{ config.style.replace('\t', '') }}
</textarea>
</div>
<div class="config-div">
<input type="submit" id="config-load" value="{{ translation['load'] }}">&nbsp; <input type="submit" id="config-load" value="{{ translation['load'] }}">&nbsp;
<input type="submit" id="config-submit" value="{{ translation['apply'] }}">&nbsp; <input type="submit" id="config-submit" value="{{ translation['apply'] }}">&nbsp;
<input type="submit" id="config-save" value="{{ translation['save-as'] }}"> <input type="submit" id="config-save" value="{{ translation['save-as'] }}">

View File

@ -1,4 +1,3 @@
<link rel="stylesheet" href="{{ cb_url('logo.css') }}">
<svg id="Layer_1" class="whoogle-svg" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1028 254"> <svg id="Layer_1" class="whoogle-svg" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1028 254">
<defs> <defs>
<style> <style>
@ -17,4 +16,3 @@
<path class="cls-1" d="M950.51,539.43c-.31,20.82-10.91,37.89-28,44.71-25.32,10.11-53.89-7-57.87-34.41-1.51-10.43-1.06-20.59,2.68-30.44,7.08-18.66,25.09-29.59,45-27.58,17.76,1.79,33.92,17.68,36.86,36.35C949.79,531.82,950.08,535.64,950.51,539.43Z" transform="translate(-446 -413)"></path> <path class="cls-1" d="M950.51,539.43c-.31,20.82-10.91,37.89-28,44.71-25.32,10.11-53.89-7-57.87-34.41-1.51-10.43-1.06-20.59,2.68-30.44,7.08-18.66,25.09-29.59,45-27.58,17.76,1.79,33.92,17.68,36.86,36.35C949.79,531.82,950.08,535.64,950.51,539.43Z" transform="translate(-446 -413)"></path>
<path class="cls-1" d="M1099.71,539.39c-.39,22.14-11.74,39.51-30.16,45.6-25.8,8.54-53.64-10.27-55.87-37.67-.78-9.54-.55-18.93,3-28,7.25-18.72,24.95-29.59,45-27.62,17.2,1.68,33.14,16.78,36.57,34.84C1099,530.77,1099.23,535.1,1099.71,539.39Z" transform="translate(-446 -413)"></path> <path class="cls-1" d="M1099.71,539.39c-.39,22.14-11.74,39.51-30.16,45.6-25.8,8.54-53.64-10.27-55.87-37.67-.78-9.54-.55-18.93,3-28,7.25-18.72,24.95-29.59,45-27.62,17.2,1.68,33.14,16.78,36.57,34.84C1099,530.77,1099.23,535.1,1099.71,539.39Z" transform="translate(-446 -413)"></path>
</svg> </svg>
</a>

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

@ -23,3 +23,10 @@ def get_client_ip(r: Request) -> str:
return r.environ['REMOTE_ADDR'] return r.environ['REMOTE_ADDR']
else: else:
return r.environ['HTTP_X_FORWARDED_FOR'] return r.environ['HTTP_X_FORWARDED_FOR']
def get_request_url(url: str) -> str:
if os.getenv('HTTPS_ONLY', False):
return url.replace('http://', 'https://', 1)
return url