summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorMicah Lee <micah@micahflee.com>2020-12-01 22:21:25 -0800
committerGitHub <noreply@github.com>2020-12-01 22:21:25 -0800
commit5f612a94a0356b797a1811f3898e5b4345b6952d (patch)
treeaa8e3a4184ae5361b5a7c0090f8a52a2b9a19e1b /cli
parentb0b552931ac371fe3f3dc1b2a69572009143e4c9 (diff)
parentedaa8bd073382027bcb2042c4b14358c17c0a725 (diff)
downloadonionshare-5f612a94a0356b797a1811f3898e5b4345b6952d.tar.gz
onionshare-5f612a94a0356b797a1811f3898e5b4345b6952d.zip
Merge pull request #1239 from micahflee/1214_onion_error_translations
Translate Tor-related error messages
Diffstat (limited to 'cli')
-rw-r--r--cli/onionshare_cli/__init__.py2
-rw-r--r--cli/onionshare_cli/onion.py112
-rw-r--r--cli/onionshare_cli/onionshare.py1
3 files changed, 57 insertions, 58 deletions
diff --git a/cli/onionshare_cli/__init__.py b/cli/onionshare_cli/__init__.py
index 34627deb..741db54f 100644
--- a/cli/onionshare_cli/__init__.py
+++ b/cli/onionshare_cli/__init__.py
@@ -340,7 +340,7 @@ def main(cwd=None):
print("")
sys.exit()
except Exception as e:
- sys.exit(e.args[0])
+ sys.exit()
# Start the onionshare app
try:
diff --git a/cli/onionshare_cli/onion.py b/cli/onionshare_cli/onion.py
index d6f59a59..aa057b12 100644
--- a/cli/onionshare_cli/onion.py
+++ b/cli/onionshare_cli/onion.py
@@ -34,8 +34,6 @@ import psutil
from distutils.version import LooseVersion as Version
from .settings import Settings
-# TODO: Figure out how to localize this for the GUI
-
class TorErrorAutomatic(Exception):
"""
@@ -89,11 +87,15 @@ class TorErrorProtocolError(Exception):
"""
-class TorTooOld(Exception):
+class TorTooOldEphemeral(Exception):
"""
- This exception is raised if onionshare needs to use a feature of Tor or stem
- (like stealth ephemeral onion services) but the version you have installed
- is too old.
+ This exception is raised if the version of tor doesn't support ephemeral onion services
+ """
+
+
+class TorTooOldStealth(Exception):
+ """
+ This exception is raised if the version of tor doesn't support stealth onion services
"""
@@ -118,6 +120,12 @@ class BundledTorBroken(Exception):
"""
+class PortNotAvailable(Exception):
+ """
+ There are no available ports for OnionShare to use, which really shouldn't ever happen
+ """
+
+
class Onion(object):
"""
Onion is an abstraction layer for connecting to the Tor control port and
@@ -214,7 +222,8 @@ class Onion(object):
try:
self.tor_socks_port = self.common.get_available_port(1000, 65535)
except:
- raise OSError("OnionShare port not available")
+ print("OnionShare port not available")
+ raise PortNotAvailable()
self.tor_torrc = os.path.join(self.tor_data_directory_name, "torrc")
# If there is an existing OnionShare tor process, kill it
@@ -246,7 +255,8 @@ class Onion(object):
try:
self.tor_control_port = self.common.get_available_port(1000, 65535)
except:
- raise OSError("OnionShare port not available")
+ print("OnionShare port not available")
+ raise PortNotAvailable()
self.tor_control_socket = None
else:
# Linux and BSD can use unix sockets
@@ -315,10 +325,6 @@ class Onion(object):
f.write(self.settings.get("tor_bridges_use_custom_bridges"))
f.write("\nUseBridges 1")
- # Make sure the tor path is accurate
- if not os.path.exists(self.tor_path):
- raise BundledTorNotSupported(f"Cannot find tor binary: {self.tor_path}")
-
# Execute a tor subprocess
start_ts = time.time()
if self.common.platform == "Windows":
@@ -353,10 +359,8 @@ class Onion(object):
self.c = Controller.from_socket_file(path=self.tor_control_socket)
self.c.authenticate()
except Exception as e:
- raise BundledTorBroken(
- # strings._("settings_error_bundled_tor_broken").format(e.args[0])
- "OnionShare could not connect to Tor:\n{}".format(e.args[0])
- )
+ print("OnionShare could not connect to Tor:\n{}".format(e.args[0]))
+ raise BundledTorBroken(e.args[0])
while True:
try:
@@ -403,15 +407,16 @@ class Onion(object):
print("")
try:
self.tor_proc.terminate()
- raise BundledTorTimeout(
- # strings._("settings_error_bundled_tor_timeout")
+ print(
"Taking too long to connect to Tor. Maybe you aren't connected to the Internet, or have an inaccurate system clock?"
)
+ raise BundledTorTimeout()
except FileNotFoundError:
pass
elif self.settings.get("connection_type") == "automatic":
# Automatically try to guess the right way to connect to Tor Browser
+ automatic_error = "Could not connect to the Tor controller. Is Tor Browser (available from torproject.org) running in the background?"
# Try connecting to control port
found_tor = False
@@ -463,30 +468,25 @@ class Onion(object):
)
elif self.common.platform == "Windows":
# Windows doesn't support unix sockets
- raise TorErrorAutomatic(
- # strings._("settings_error_automatic")
- "Could not connect to the Tor controller. Is Tor Browser (available from torproject.org) running in the background?"
- )
+ print(automatic_error)
+ raise TorErrorAutomatic()
self.c = Controller.from_socket_file(path=socket_file_path)
except:
- raise TorErrorAutomatic(
- # strings._("settings_error_automatic")
- "Could not connect to the Tor controller. Is Tor Browser (available from torproject.org) running in the background?"
- )
+ print(automatic_error)
+ raise TorErrorAutomatic()
# Try authenticating
try:
self.c.authenticate()
except:
- raise TorErrorAutomatic(
- # strings._("settings_error_automatic")
- "Could not connect to the Tor controller. Is Tor Browser (available from torproject.org) running in the background?"
- )
+ print(automatic_error)
+ raise TorErrorAutomatic()
else:
# Use specific settings to connect to tor
+ invalid_settings_error = "Can't connect to Tor controller because your settings don't make sense."
# Try connecting
try:
@@ -500,27 +500,28 @@ class Onion(object):
path=self.settings.get("socket_file_path")
)
else:
- raise TorErrorInvalidSetting(
- # strings._("settings_error_unknown")
- "Can't connect to Tor controller because your settings don't make sense."
- )
+ print(invalid_settings_error)
+ raise TorErrorInvalidSetting()
except:
if self.settings.get("connection_type") == "control_port":
- raise TorErrorSocketPort(
- # strings._("settings_error_socket_port")
+ print(
"Can't connect to the Tor controller at {}:{}.".format(
self.settings.get("control_port_address"),
self.settings.get("control_port_port"),
)
)
+ raise TorErrorSocketPort(
+ self.settings.get("control_port_address"),
+ self.settings.get("control_port_port"),
+ )
else:
- raise TorErrorSocketFile(
- # strings._("settings_error_socket_file")
+ print(
"Can't connect to the Tor controller using socket file {}.".format(
self.settings.get("socket_file_path")
)
)
+ raise TorErrorSocketFile(self.settings.get("socket_file_path"))
# Try authenticating
try:
@@ -529,29 +530,30 @@ class Onion(object):
elif self.settings.get("auth_type") == "password":
self.c.authenticate(self.settings.get("auth_password"))
else:
- raise TorErrorInvalidSetting(
- # strings._("settings_error_unknown")
- "Can't connect to Tor controller because your settings don't make sense."
- )
+ print(invalid_settings_error)
+ raise TorErrorInvalidSetting()
except MissingPassword:
- raise TorErrorMissingPassword(
- # strings._("settings_error_missing_password")
+ print(
"Connected to Tor controller, but it requires a password to authenticate."
)
+ raise TorErrorMissingPassword()
except UnreadableCookieFile:
- raise TorErrorUnreadableCookieFile(
- # strings._("settings_error_unreadable_cookie_file")
+ print(
"Connected to the Tor controller, but password may be wrong, or your user is not permitted to read the cookie file."
)
+ raise TorErrorUnreadableCookieFile()
except AuthenticationFailure:
- raise TorErrorAuthError(
- # strings._("settings_error_auth")
+ print(
"Connected to {}:{}, but can't authenticate. Maybe this isn't a Tor controller?".format(
self.settings.get("control_port_address"),
self.settings.get("control_port_port"),
)
)
+ raise TorErrorAuthError(
+ self.settings.get("control_port_address"),
+ self.settings.get("control_port_port"),
+ )
# If we made it this far, we should be connected to Tor
self.connected_to_tor = True
@@ -606,15 +608,15 @@ class Onion(object):
self.common.log("Onion", "start_onion_service", f"port={port}")
if not self.supports_ephemeral:
- raise TorTooOld(
- # strings._("error_ephemeral_not_supported")
+ print(
"Your version of Tor is too old, ephemeral onion services are not supported"
)
+ raise TorTooOldEphemeral()
if mode_settings.get("general", "client_auth") and not self.supports_stealth:
- raise TorTooOld(
- # strings._("error_stealth_not_supported")
+ print(
"Your version of Tor is too old, stealth onion services are not supported"
)
+ raise TorTooOldStealth()
auth_cookie = None
if mode_settings.get("general", "client_auth"):
@@ -671,10 +673,8 @@ class Onion(object):
)
except ProtocolError as e:
- raise TorErrorProtocolError(
- # strings._("error_tor_protocol_error")
- "Tor error: {}".format(e.args[0])
- )
+ print("Tor error: {}".format(e.args[0]))
+ raise TorErrorProtocolError(e.args[0])
onion_host = res.service_id + ".onion"
diff --git a/cli/onionshare_cli/onionshare.py b/cli/onionshare_cli/onionshare.py
index f74672ce..513dbc34 100644
--- a/cli/onionshare_cli/onionshare.py
+++ b/cli/onionshare_cli/onionshare.py
@@ -21,7 +21,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
import os, shutil
from . import common
-from .onion import TorTooOld, TorErrorProtocolError
from .common import AutoStopTimer