summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMicah Lee <micah@micahflee.com>2020-10-15 19:09:46 -0700
committerMicah Lee <micah@micahflee.com>2020-10-15 19:09:46 -0700
commit7ece466d823ed876589071b4f652c4e6f89b1483 (patch)
tree0cc9a99ca59a0bd3bac181d31c18ed1d48ee9576
parent5b2fe2019cdcfa6cedb844b5796133d3776dcf47 (diff)
downloadonionshare-7ece466d823ed876589071b4f652c4e6f89b1483.tar.gz
onionshare-7ece466d823ed876589071b4f652c4e6f89b1483.zip
Put tor binaries in desktop app resources, not cli resources, and fix Windows packaging
-rw-r--r--.gitignore7
-rw-r--r--cli/onionshare_cli/onion.py6
-rw-r--r--desktop/README.md49
-rw-r--r--desktop/scripts/get-tor-osx.py (renamed from cli/scripts/get-tor-osx.py)0
-rw-r--r--desktop/scripts/get-tor-windows.py (renamed from cli/scripts/get-tor-windows.py)2
-rw-r--r--desktop/src/onionshare/gui_common.py40
-rw-r--r--desktop/src/onionshare/settings_dialog.py2
7 files changed, 87 insertions, 19 deletions
diff --git a/.gitignore b/.gitignore
index 97ba1380..3c8d103d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -56,8 +56,7 @@ venv
# other
.vscode
onionshare.dist-info
-
-# Tor binaries
-cli/onionshare_cli/resources/tor
+desktop/src/onionshare/resources/tor
+desktop/*.whl
desktop/linux
-desktop/windows \ No newline at end of file
+desktop/windows
diff --git a/cli/onionshare_cli/onion.py b/cli/onionshare_cli/onion.py
index 5d08c1ed..02fd3263 100644
--- a/cli/onionshare_cli/onion.py
+++ b/cli/onionshare_cli/onion.py
@@ -152,7 +152,7 @@ class Onion(object):
is necessary for status updates to reach the GUI.
"""
- def __init__(self, common, use_tmp_dir=False):
+ def __init__(self, common, use_tmp_dir=False, get_tor_paths=None):
self.common = common
self.common.log("Onion", "__init__")
@@ -167,12 +167,14 @@ class Onion(object):
self.bundle_tor_supported = True
# Set the path of the tor binary, for bundled tor
+ if not get_tor_paths:
+ get_tor_paths = self.common.get_tor_paths
(
self.tor_path,
self.tor_geo_ip_file_path,
self.tor_geo_ipv6_file_path,
self.obfs4proxy_file_path,
- ) = self.common.get_tor_paths()
+ ) = get_tor_paths()
# The tor process
self.tor_proc = None
diff --git a/desktop/README.md b/desktop/README.md
index 91977fda..b1b36956 100644
--- a/desktop/README.md
+++ b/desktop/README.md
@@ -25,39 +25,39 @@ Download Python 3.8.6, 32-bit (x86) from https://www.python.org/downloads/releas
Download and install 7-Zip from http://www.7-zip.org/download.html. I downloaded `7z1900.exe`. Add `C:\Program Files (x86)\7-Zip` to your path.
-Install dependencies:
-
-```
-pip install requests
-```
-
Download Tor Browser and extract the binaries by running:
```
-cd ..\cli
+pip install requests
python scripts\get-tor-windows.py
```
### Prepare the code
+#### All platforms
+
OnionShare uses [Briefcase](https://briefcase.readthedocs.io/en/latest/).
Install Briefcase dependencies by following [these instructions](https://docs.beeware.org/en/latest/tutorial/tutorial-0.html#install-dependencies).
Now create and/or activate a virtual environment.
+#### Linux and macOS
+
```
python3 -m venv venv
. venv/bin/activate
```
-Or in Windows:
+#### Windows
```
python -m venv venv
venv\Scripts\activate.bat
```
+#### All platforms
+
While your virtual environment is active, install briefcase from pip.
```
@@ -92,7 +92,9 @@ xvfb-run ./tests/run.sh
## Making a release
-First, build a wheel package for OnionShare CLI:
+### Linux
+
+Build a wheel package for OnionShare CLI:
```sh
cd onionshare/cli
@@ -115,4 +117,31 @@ Make sure the virtual environment is active, and then run `briefcase create` and
. venv/bin/activate
briefcase create
briefcase build
-``` \ No newline at end of file
+```
+
+### Windows
+
+Build a wheel package for OnionShare CLI (including Tor binaries, from Tor Browser):
+
+```sh
+cd onionshare\cli
+poetry install
+poetry build
+```
+
+This will make a file like `dist\onionshare_cli-$VERSION-py3-none-any.whl` (except with your specific version number). Move it into `..\desktop`:
+
+```
+move dist\onionshare_cli-*-py3-none-any.whl ..\desktop
+cd ..\desktop
+```
+
+Make sure the virtual environment is active, and then run `briefcase create`:
+
+```sh
+venv\Scripts\activate.bat
+briefcase create
+briefcase package
+```
+
+TODO: Codesign \ No newline at end of file
diff --git a/cli/scripts/get-tor-osx.py b/desktop/scripts/get-tor-osx.py
index a05870f2..a05870f2 100644
--- a/cli/scripts/get-tor-osx.py
+++ b/desktop/scripts/get-tor-osx.py
diff --git a/cli/scripts/get-tor-windows.py b/desktop/scripts/get-tor-windows.py
index a5c4ebb1..33de056b 100644
--- a/cli/scripts/get-tor-windows.py
+++ b/desktop/scripts/get-tor-windows.py
@@ -45,7 +45,7 @@ def main():
)
working_path = os.path.join(root_path, "build", "tor")
exe_path = os.path.join(working_path, exe_filename)
- dist_path = os.path.join(root_path, "onionshare_cli", "resources", "tor")
+ dist_path = os.path.join(root_path, "src", "onionshare", "resources", "tor")
# Make sure the working folder exists
if not os.path.exists(working_path):
diff --git a/desktop/src/onionshare/gui_common.py b/desktop/src/onionshare/gui_common.py
index 1de82b3d..56e86067 100644
--- a/desktop/src/onionshare/gui_common.py
+++ b/desktop/src/onionshare/gui_common.py
@@ -50,7 +50,7 @@ class GuiCommon:
strings.load_strings(self.common, self.get_resource_path("locale"))
# Start the Onion
- self.onion = Onion(common)
+ self.onion = Onion(common, get_tor_paths=self.get_tor_paths)
# Lock filename
self.lock_filename = os.path.join(self.common.build_data_dir(), "lock")
@@ -328,6 +328,44 @@ class GuiCommon:
font-style: italic;
}""",
}
+
+ def get_tor_paths(self):
+ if self.common.platform == "Linux":
+ tor_path = shutil.which("tor")
+ 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")
+ tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6")
+ elif self.common.platform == "Windows":
+ base_path = self.get_resource_path("tor")
+ tor_path = os.path.join(base_path, "Tor", "tor.exe")
+ obfs4proxy_file_path = os.path.join(base_path, "Tor", "obfs4proxy.exe")
+ tor_geo_ip_file_path = os.path.join(base_path, "Data", "Tor", "geoip")
+ tor_geo_ipv6_file_path = os.path.join(base_path, "Data", "Tor", "geoip6")
+ elif self.common.platform == "Darwin":
+ base_path = os.path.dirname(
+ os.path.dirname(os.path.dirname(self.get_resource_path("")))
+ )
+ tor_path = os.path.join(base_path, "Resources", "Tor", "tor")
+ tor_geo_ip_file_path = os.path.join(base_path, "Resources", "Tor", "geoip")
+ tor_geo_ipv6_file_path = os.path.join(
+ base_path, "Resources", "Tor", "geoip6"
+ )
+ obfs4proxy_file_path = os.path.join(
+ base_path, "Resources", "Tor", "obfs4proxy"
+ )
+ elif self.common.platform == "BSD":
+ tor_path = "/usr/local/bin/tor"
+ tor_geo_ip_file_path = "/usr/local/share/tor/geoip"
+ tor_geo_ipv6_file_path = "/usr/local/share/tor/geoip6"
+ obfs4proxy_file_path = "/usr/local/bin/obfs4proxy"
+
+ return (
+ tor_path,
+ tor_geo_ip_file_path,
+ tor_geo_ipv6_file_path,
+ obfs4proxy_file_path,
+ )
@staticmethod
def get_resource_path(filename):
diff --git a/desktop/src/onionshare/settings_dialog.py b/desktop/src/onionshare/settings_dialog.py
index cb4033f5..e1027323 100644
--- a/desktop/src/onionshare/settings_dialog.py
+++ b/desktop/src/onionshare/settings_dialog.py
@@ -665,7 +665,7 @@ class SettingsDialog(QtWidgets.QDialog):
else:
tor_status_update_func = None
- onion = Onion(self.common, use_tmp_dir=True)
+ onion = Onion(self.common, use_tmp_dir=True, get_tor_paths=self.common.gui.get_tor_paths)
onion.connect(
custom_settings=settings, tor_status_update_func=tor_status_update_func,
)