Friendlier error message when Tor is closed or network is down
Signed-off-by: Jesús <heckyel@hyperbola.info>
This commit is contained in:
parent
7f67af1031
commit
aadc20fa19
@ -108,6 +108,12 @@ def error_page(e):
|
|||||||
if exc_info()[1].ip:
|
if exc_info()[1].ip:
|
||||||
error_message += '\n\nExit node IP address: ' + exc_info()[1].ip
|
error_message += '\n\nExit node IP address: ' + exc_info()[1].ip
|
||||||
return flask.render_template('error.html', error_message=error_message, slim=slim), 502
|
return flask.render_template('error.html', error_message=error_message, slim=slim), 502
|
||||||
|
elif exc_info()[0] == util.FetchError and exc_info()[1].error_message:
|
||||||
|
return (flask.render_template(
|
||||||
|
'error.html',
|
||||||
|
error_message=exc_info()[1].error_message,
|
||||||
|
slim=slim
|
||||||
|
), 502)
|
||||||
return flask.render_template('error.html', traceback=traceback.format_exc(), slim=slim), 500
|
return flask.render_template('error.html', traceback=traceback.format_exc(), slim=slim), 500
|
||||||
|
|
||||||
|
|
||||||
|
@ -240,6 +240,7 @@ def fetch_url_response(url, headers=(), timeout=15, data=None,
|
|||||||
elif not isinstance(data, bytes):
|
elif not isinstance(data, bytes):
|
||||||
data = urllib.parse.urlencode(data).encode('utf-8')
|
data = urllib.parse.urlencode(data).encode('utf-8')
|
||||||
|
|
||||||
|
|
||||||
if cookiejar_send is not None or cookiejar_receive is not None: # Use urllib
|
if cookiejar_send is not None or cookiejar_receive is not None: # Use urllib
|
||||||
req = urllib.request.Request(url, data=data, headers=headers)
|
req = urllib.request.Request(url, data=data, headers=headers)
|
||||||
|
|
||||||
@ -263,9 +264,27 @@ def fetch_url_response(url, headers=(), timeout=15, data=None,
|
|||||||
else:
|
else:
|
||||||
retries = urllib3.Retry(3)
|
retries = urllib3.Retry(3)
|
||||||
pool = get_pool(use_tor and settings.route_tor)
|
pool = get_pool(use_tor and settings.route_tor)
|
||||||
|
try:
|
||||||
response = pool.request(method, url, headers=headers, body=data,
|
response = pool.request(method, url, headers=headers, body=data,
|
||||||
timeout=timeout, preload_content=False,
|
timeout=timeout, preload_content=False,
|
||||||
decode_content=False, retries=retries)
|
decode_content=False, retries=retries)
|
||||||
|
except urllib3.exceptions.MaxRetryError as e:
|
||||||
|
exception_cause = e.__context__.__context__
|
||||||
|
if (isinstance(exception_cause, socks.ProxyConnectionError)
|
||||||
|
and settings.route_tor):
|
||||||
|
msg = ('Failed to connect to Tor. Check that Tor is open and '
|
||||||
|
'that your internet connection is working.\n\n'
|
||||||
|
+ str(e))
|
||||||
|
raise FetchError('502', reason='Bad Gateway',
|
||||||
|
error_message=msg)
|
||||||
|
elif isinstance(e.__context__,
|
||||||
|
urllib3.exceptions.NewConnectionError):
|
||||||
|
msg = 'Failed to establish a connection.\n\n' + str(e)
|
||||||
|
raise FetchError(
|
||||||
|
'502', reason='Bad Gateway',
|
||||||
|
error_message=msg)
|
||||||
|
else:
|
||||||
|
raise
|
||||||
cleanup_func = (lambda r: r.release_conn())
|
cleanup_func = (lambda r: r.release_conn())
|
||||||
|
|
||||||
return response, cleanup_func
|
return response, cleanup_func
|
||||||
|
Loading…
x
Reference in New Issue
Block a user