mirror of
https://github.com/onionshare/onionshare.git
synced 2024-10-01 01:35:40 -04:00
Fix linux tor paths, make event handler properly quit thread
This commit is contained in:
parent
dea6de67d0
commit
c07eda330d
@ -28,6 +28,7 @@ import sys
|
|||||||
import tempfile
|
import tempfile
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
|
import shutil
|
||||||
|
|
||||||
from .settings import Settings
|
from .settings import Settings
|
||||||
|
|
||||||
@ -100,7 +101,9 @@ class Common:
|
|||||||
# Look for resources relative to the binary, so if the binary is /usr/bin/onionshare-gui and
|
# Look for resources relative to the binary, so if the binary is /usr/bin/onionshare-gui and
|
||||||
# the resource dir is /usr/share/onionshare, then the resource dir relative to the binary dir
|
# the resource dir is /usr/share/onionshare, then the resource dir relative to the binary dir
|
||||||
# is ../share/onionshare
|
# is ../share/onionshare
|
||||||
prefix = os.path.join(os.path.dirname(os.path.dirname(sys.argv[0])), "share/onionshare")
|
prefix = os.path.join(
|
||||||
|
os.path.dirname(os.path.dirname(sys.argv[0])), "share/onionshare"
|
||||||
|
)
|
||||||
|
|
||||||
elif getattr(sys, "frozen", False):
|
elif getattr(sys, "frozen", False):
|
||||||
# Check if app is "frozen"
|
# Check if app is "frozen"
|
||||||
@ -114,11 +117,11 @@ class Common:
|
|||||||
|
|
||||||
def get_tor_paths(self):
|
def get_tor_paths(self):
|
||||||
if self.platform == "Linux":
|
if self.platform == "Linux":
|
||||||
prefix = os.path.dirname(os.path.dirname(sys.argv[0]))
|
tor_path = shutil.which("tor")
|
||||||
tor_path = os.path.join(prefix, "bin/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_ip_file_path = os.path.join(prefix, "share/tor/geoip")
|
||||||
tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6")
|
tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6")
|
||||||
obfs4proxy_file_path = os.path.join(prefix, "bin/obfs4proxy")
|
|
||||||
elif self.platform == "Windows":
|
elif self.platform == "Windows":
|
||||||
base_path = os.path.join(
|
base_path = os.path.join(
|
||||||
os.path.dirname(os.path.dirname(self.get_resource_path(""))), "tor"
|
os.path.dirname(os.path.dirname(self.get_resource_path(""))), "tor"
|
||||||
|
@ -142,7 +142,9 @@ class SettingsDialog(QtWidgets.QDialog):
|
|||||||
self.tor_geo_ipv6_file_path,
|
self.tor_geo_ipv6_file_path,
|
||||||
self.obfs4proxy_file_path,
|
self.obfs4proxy_file_path,
|
||||||
) = self.common.get_tor_paths()
|
) = self.common.get_tor_paths()
|
||||||
if not os.path.isfile(self.obfs4proxy_file_path):
|
if not self.obfs4proxy_file_path or not os.path.isfile(
|
||||||
|
self.obfs4proxy_file_path
|
||||||
|
):
|
||||||
self.tor_bridges_use_obfs4_radio = QtWidgets.QRadioButton(
|
self.tor_bridges_use_obfs4_radio = QtWidgets.QRadioButton(
|
||||||
strings._("gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy")
|
strings._("gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy")
|
||||||
)
|
)
|
||||||
@ -163,7 +165,9 @@ class SettingsDialog(QtWidgets.QDialog):
|
|||||||
self.tor_geo_ipv6_file_path,
|
self.tor_geo_ipv6_file_path,
|
||||||
self.obfs4proxy_file_path,
|
self.obfs4proxy_file_path,
|
||||||
) = self.common.get_tor_paths()
|
) = self.common.get_tor_paths()
|
||||||
if not os.path.isfile(self.obfs4proxy_file_path):
|
if not self.obfs4proxy_file_path or not os.path.isfile(
|
||||||
|
self.obfs4proxy_file_path
|
||||||
|
):
|
||||||
self.tor_bridges_use_meek_lite_azure_radio = QtWidgets.QRadioButton(
|
self.tor_bridges_use_meek_lite_azure_radio = QtWidgets.QRadioButton(
|
||||||
strings._(
|
strings._(
|
||||||
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy"
|
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy"
|
||||||
@ -662,8 +666,7 @@ class SettingsDialog(QtWidgets.QDialog):
|
|||||||
|
|
||||||
onion = Onion(self.common, use_tmp_dir=True)
|
onion = Onion(self.common, use_tmp_dir=True)
|
||||||
onion.connect(
|
onion.connect(
|
||||||
custom_settings=settings,
|
custom_settings=settings, tor_status_update_func=tor_status_update_func,
|
||||||
tor_status_update_func=tor_status_update_func,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# If an exception hasn't been raised yet, the Tor settings work
|
# If an exception hasn't been raised yet, the Tor settings work
|
||||||
@ -750,9 +753,7 @@ class SettingsDialog(QtWidgets.QDialog):
|
|||||||
)
|
)
|
||||||
close_forced_update_thread()
|
close_forced_update_thread()
|
||||||
|
|
||||||
forced_update_thread = UpdateThread(
|
forced_update_thread = UpdateThread(self.common, self.onion, force=True)
|
||||||
self.common, self.onion, force=True
|
|
||||||
)
|
|
||||||
forced_update_thread.update_available.connect(update_available)
|
forced_update_thread.update_available.connect(update_available)
|
||||||
forced_update_thread.update_not_available.connect(update_not_available)
|
forced_update_thread.update_not_available.connect(update_not_available)
|
||||||
forced_update_thread.update_error.connect(update_error)
|
forced_update_thread.update_error.connect(update_error)
|
||||||
@ -850,7 +851,10 @@ class SettingsDialog(QtWidgets.QDialog):
|
|||||||
f"Onion done rebooting, connected to Tor: {self.common.gui.onion.connected_to_tor}",
|
f"Onion done rebooting, connected to Tor: {self.common.gui.onion.connected_to_tor}",
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.common.gui.onion.is_authenticated() and not tor_con.wasCanceled():
|
if (
|
||||||
|
self.common.gui.onion.is_authenticated()
|
||||||
|
and not tor_con.wasCanceled()
|
||||||
|
):
|
||||||
self.settings_saved.emit()
|
self.settings_saved.emit()
|
||||||
self.close()
|
self.close()
|
||||||
|
|
||||||
@ -866,7 +870,10 @@ class SettingsDialog(QtWidgets.QDialog):
|
|||||||
Cancel button clicked.
|
Cancel button clicked.
|
||||||
"""
|
"""
|
||||||
self.common.log("SettingsDialog", "cancel_clicked")
|
self.common.log("SettingsDialog", "cancel_clicked")
|
||||||
if not self.common.gui.local_only and not self.common.gui.onion.is_authenticated():
|
if (
|
||||||
|
not self.common.gui.local_only
|
||||||
|
and not self.common.gui.onion.is_authenticated()
|
||||||
|
):
|
||||||
Alert(
|
Alert(
|
||||||
self.common,
|
self.common,
|
||||||
strings._("gui_tor_connection_canceled"),
|
strings._("gui_tor_connection_canceled"),
|
||||||
|
@ -78,8 +78,9 @@ class TabWidget(QtWidgets.QTabWidget):
|
|||||||
|
|
||||||
def cleanup(self):
|
def cleanup(self):
|
||||||
# Stop the event thread
|
# Stop the event thread
|
||||||
self.event_handler_t.stop()
|
self.event_handler_t.should_quit = True
|
||||||
self.event_handler_t.join()
|
self.event_handler_t.quit()
|
||||||
|
self.event_handler_t.wait(50)
|
||||||
|
|
||||||
# Clean up each tab
|
# Clean up each tab
|
||||||
for index in range(self.count()):
|
for index in range(self.count()):
|
||||||
|
@ -185,6 +185,7 @@ class EventHandlerThread(QtCore.QThread):
|
|||||||
super(EventHandlerThread, self).__init__()
|
super(EventHandlerThread, self).__init__()
|
||||||
self.common = common
|
self.common = common
|
||||||
self.common.log("EventHandlerThread", "__init__")
|
self.common.log("EventHandlerThread", "__init__")
|
||||||
|
self.should_quit = False
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.common.log("EventHandlerThread", "run")
|
self.common.log("EventHandlerThread", "run")
|
||||||
@ -246,4 +247,6 @@ class EventHandlerThread(QtCore.QThread):
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
if self.should_quit:
|
||||||
|
break
|
||||||
time.sleep(0.2)
|
time.sleep(0.2)
|
||||||
|
@ -157,10 +157,8 @@ class TorConnectionThread(QtCore.QThread):
|
|||||||
self.canceled_connecting_to_tor.emit()
|
self.canceled_connecting_to_tor.emit()
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.common.log(
|
self.common.log("TorConnectionThread", "run", f"caught exception: {e}")
|
||||||
"TorConnectionThread", "run", f"caught exception: {e.args[0]}"
|
self.error_connecting_to_tor.emit(str(e))
|
||||||
)
|
|
||||||
self.error_connecting_to_tor.emit(str(e.args[0]))
|
|
||||||
|
|
||||||
def _tor_status_update(self, progress, summary):
|
def _tor_status_update(self, progress, summary):
|
||||||
self.tor_status_update.emit(progress, summary)
|
self.tor_status_update.emit(progress, summary)
|
||||||
|
Loading…
Reference in New Issue
Block a user