Rather than only checking for an available update on app init, the check for updates now performs the check once every 24 hours on the first request sent after that period. This also now catches the requests.exceptions.ConnectionError that is thrown if the app is initialized without an active internet connection. Fixes #649
50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
from bs4 import BeautifulSoup as bsoup
|
|
from flask import Request
|
|
import hashlib
|
|
import os
|
|
from requests import exceptions, get
|
|
|
|
|
|
def gen_file_hash(path: str, static_file: str) -> str:
|
|
file_contents = open(os.path.join(path, static_file), 'rb').read()
|
|
file_hash = hashlib.md5(file_contents).hexdigest()[:8]
|
|
filename_split = os.path.splitext(static_file)
|
|
|
|
return filename_split[0] + '.' + file_hash + filename_split[-1]
|
|
|
|
|
|
def read_config_bool(var: str) -> bool:
|
|
val = os.getenv(var, '0')
|
|
if val.isdigit():
|
|
return bool(int(val))
|
|
return False
|
|
|
|
|
|
def get_client_ip(r: Request) -> str:
|
|
if r.environ.get('HTTP_X_FORWARDED_FOR') is None:
|
|
return r.environ['REMOTE_ADDR']
|
|
else:
|
|
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
|
|
|
|
|
|
def check_for_update(version_url: str, current: str) -> int:
|
|
# Check for the latest version of Whoogle
|
|
try:
|
|
update = bsoup(get(version_url).text, 'html.parser')
|
|
latest = update.select_one('[class="Link--primary"]').string[1:]
|
|
current = int(''.join(filter(str.isdigit, current)))
|
|
latest = int(''.join(filter(str.isdigit, latest)))
|
|
has_update = '' if current >= latest else latest
|
|
except (exceptions.ConnectionError, AttributeError):
|
|
# Ignore failures, assume current version is up to date
|
|
has_update = ''
|
|
|
|
return has_update
|