summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorMicah Lee <micah@micahflee.com>2020-11-29 11:08:46 -0800
committerMicah Lee <micah@micahflee.com>2020-11-29 11:08:46 -0800
commitaecaae896d36b98ee745148f1efe7aa74497b945 (patch)
tree67cbed7e358b8d4919a871f48bc958386f39658c /cli
parent7bcfe6cad11036feeb52b199a9f0736ff35e21d6 (diff)
downloadonionshare-aecaae896d36b98ee745148f1efe7aa74497b945.tar.gz
onionshare-aecaae896d36b98ee745148f1efe7aa74497b945.zip
Make CLI throw an error if it cannot find tor binary
Diffstat (limited to 'cli')
-rw-r--r--cli/onionshare_cli/__init__.py12
-rw-r--r--cli/onionshare_cli/common.py10
-rw-r--r--cli/onionshare_cli/onion.py19
3 files changed, 20 insertions, 21 deletions
diff --git a/cli/onionshare_cli/__init__.py b/cli/onionshare_cli/__init__.py
index 7361ac9e..34627deb 100644
--- a/cli/onionshare_cli/__init__.py
+++ b/cli/onionshare_cli/__init__.py
@@ -22,7 +22,7 @@ import os, sys, time, argparse, threading
from datetime import datetime
from datetime import timedelta
-from .common import Common
+from .common import Common, CannotFindTor
from .web import Web
from .onion import *
from .onionshare import OnionShare
@@ -320,7 +320,15 @@ def main(cwd=None):
web = Web(common, False, mode_settings, mode)
# Start the Onion object
- onion = Onion(common, use_tmp_dir=True)
+ try:
+ onion = Onion(common, use_tmp_dir=True)
+ except CannotFindTor:
+ print("You must install tor to use OnionShare from the command line")
+ if common.platform == "Darwin":
+ print("In macOS, you can do this with Homebrew (https://brew.sh):")
+ print(" brew install tor")
+ sys.exit()
+
try:
onion.connect(
custom_settings=False,
diff --git a/cli/onionshare_cli/common.py b/cli/onionshare_cli/common.py
index a1213387..e8b174b6 100644
--- a/cli/onionshare_cli/common.py
+++ b/cli/onionshare_cli/common.py
@@ -34,6 +34,12 @@ from pkg_resources import resource_filename
from .settings import Settings
+class CannotFindTor(Exception):
+ """
+ OnionShare can't find a tor binary
+ """
+
+
class Common:
"""
The Common object is shared amongst all parts of OnionShare.
@@ -82,6 +88,8 @@ class Common:
def get_tor_paths(self):
if self.platform == "Linux":
tor_path = shutil.which("tor")
+ if not tor_path:
+ raise CannotFindTor()
obfs4proxy_file_path = shutil.which("obfs4proxy")
prefix = os.path.dirname(os.path.dirname(tor_path))
tor_geo_ip_file_path = os.path.join(prefix, "share/tor/geoip")
@@ -94,6 +102,8 @@ class Common:
tor_geo_ipv6_file_path = os.path.join(base_path, "Data", "Tor", "geoip6")
elif self.platform == "Darwin":
tor_path = shutil.which("tor")
+ if not tor_path:
+ raise CannotFindTor()
obfs4proxy_file_path = shutil.which("obfs4proxy")
prefix = os.path.dirname(os.path.dirname(tor_path))
tor_geo_ip_file_path = os.path.join(prefix, "share/tor/geoip")
diff --git a/cli/onionshare_cli/onion.py b/cli/onionshare_cli/onion.py
index 1b025bf8..d6f59a59 100644
--- a/cli/onionshare_cli/onion.py
+++ b/cli/onionshare_cli/onion.py
@@ -32,7 +32,6 @@ import getpass
import psutil
from distutils.version import LooseVersion as Version
-from . import common
from .settings import Settings
# TODO: Figure out how to localize this for the GUI
@@ -44,40 +43,30 @@ class TorErrorAutomatic(Exception):
using automatic settings that should work with Tor Browser.
"""
- pass
-
class TorErrorInvalidSetting(Exception):
"""
This exception is raised if the settings just don't make sense.
"""
- pass
-
class TorErrorSocketPort(Exception):
"""
OnionShare can't connect to the Tor controller using the supplied address and port.
"""
- pass
-
class TorErrorSocketFile(Exception):
"""
OnionShare can't connect to the Tor controller using the supplied socket file.
"""
- pass
-
class TorErrorMissingPassword(Exception):
"""
OnionShare connected to the Tor controller, but it requires a password.
"""
- pass
-
class TorErrorUnreadableCookieFile(Exception):
"""
@@ -85,8 +74,6 @@ class TorErrorUnreadableCookieFile(Exception):
to access the cookie file.
"""
- pass
-
class TorErrorAuthError(Exception):
"""
@@ -94,8 +81,6 @@ class TorErrorAuthError(Exception):
that a Tor controller isn't listening on this port.
"""
- pass
-
class TorErrorProtocolError(Exception):
"""
@@ -103,8 +88,6 @@ class TorErrorProtocolError(Exception):
isn't acting like a Tor controller (such as in Whonix).
"""
- pass
-
class TorTooOld(Exception):
"""
@@ -113,8 +96,6 @@ class TorTooOld(Exception):
is too old.
"""
- pass
-
class BundledTorTimeout(Exception):
"""