mirror of
https://github.com/onionshare/onionshare.git
synced 2024-10-01 01:35:40 -04:00
If running from onionshare CLI, use a new temporary tor data dir, and if running onionshare-gui, always use the same tor data dir
This commit is contained in:
parent
e316af0e11
commit
3fe6d43d9d
@ -266,7 +266,7 @@ def main(cwd=None):
|
||||
web = Web(common, False, mode_settings, mode)
|
||||
|
||||
# Start the Onion object
|
||||
onion = Onion(common)
|
||||
onion = Onion(common, use_tmp_dir=True)
|
||||
try:
|
||||
onion.connect(
|
||||
custom_settings=False,
|
||||
|
@ -181,15 +181,30 @@ class Common:
|
||||
os.makedirs(onionshare_data_dir, 0o700, True)
|
||||
return onionshare_data_dir
|
||||
|
||||
def build_tmp_dir(self):
|
||||
"""
|
||||
Returns path to a folder that can hold temporary files
|
||||
"""
|
||||
tmp_dir = os.path.join(self.build_data_dir(), "tmp")
|
||||
os.makedirs(tmp_dir, 0o700, True)
|
||||
return tmp_dir
|
||||
|
||||
def build_persistent_dir(self):
|
||||
"""
|
||||
Returns the path to the folder that holds persistent files
|
||||
"""
|
||||
onionshare_data_dir = self.build_data_dir()
|
||||
persistent_dir = os.path.join(onionshare_data_dir, "persistent")
|
||||
persistent_dir = os.path.join(self.build_data_dir(), "persistent")
|
||||
os.makedirs(persistent_dir, 0o700, True)
|
||||
return persistent_dir
|
||||
|
||||
def build_tor_dir(self):
|
||||
"""
|
||||
Returns path to the tor data directory
|
||||
"""
|
||||
tor_dir = os.path.join(self.build_data_dir(), "tor_data")
|
||||
os.makedirs(tor_dir, 0o700, True)
|
||||
return tor_dir
|
||||
|
||||
def build_password(self, word_count=2):
|
||||
"""
|
||||
Returns a random string made of words from the wordlist, such as "deter-trig".
|
||||
|
@ -150,10 +150,12 @@ class Onion(object):
|
||||
is necessary for status updates to reach the GUI.
|
||||
"""
|
||||
|
||||
def __init__(self, common):
|
||||
def __init__(self, common, use_tmp_dir=False):
|
||||
self.common = common
|
||||
self.common.log("Onion", "__init__")
|
||||
|
||||
self.use_tmp_dir = use_tmp_dir
|
||||
|
||||
# Is bundled tor supported?
|
||||
if (
|
||||
self.common.platform == "Windows" or self.common.platform == "Darwin"
|
||||
@ -217,24 +219,28 @@ class Onion(object):
|
||||
)
|
||||
|
||||
# Create a torrc for this session
|
||||
self.tor_data_directory = tempfile.TemporaryDirectory(
|
||||
dir=self.common.build_data_dir()
|
||||
)
|
||||
if self.use_tmp_dir:
|
||||
self.tor_data_directory = tempfile.TemporaryDirectory(
|
||||
dir=self.common.build_tmp_dir()
|
||||
)
|
||||
self.tor_data_directory_name = self.tor_data_directory.name
|
||||
else:
|
||||
self.tor_data_directory_name = self.common.build_tor_dir()
|
||||
self.common.log(
|
||||
"Onion", "connect", f"tor_data_directory={self.tor_data_directory.name}"
|
||||
"Onion", "connect", f"tor_data_directory_name={self.tor_data_directory_name}"
|
||||
)
|
||||
|
||||
# Create the torrc
|
||||
with open(self.common.get_resource_path("torrc_template")) as f:
|
||||
torrc_template = f.read()
|
||||
self.tor_cookie_auth_file = os.path.join(
|
||||
self.tor_data_directory.name, "cookie"
|
||||
self.tor_data_directory_name, "cookie"
|
||||
)
|
||||
try:
|
||||
self.tor_socks_port = self.common.get_available_port(1000, 65535)
|
||||
except:
|
||||
raise OSError(strings._("no_available_port"))
|
||||
self.tor_torrc = os.path.join(self.tor_data_directory.name, "torrc")
|
||||
self.tor_torrc = os.path.join(self.tor_data_directory_name, "torrc")
|
||||
|
||||
if self.common.platform == "Windows" or self.common.platform == "Darwin":
|
||||
# Windows doesn't support unix sockets, so it must use a network port.
|
||||
@ -252,11 +258,11 @@ class Onion(object):
|
||||
torrc_template += "ControlSocket {{control_socket}}\n"
|
||||
self.tor_control_port = None
|
||||
self.tor_control_socket = os.path.join(
|
||||
self.tor_data_directory.name, "control_socket"
|
||||
self.tor_data_directory_name, "control_socket"
|
||||
)
|
||||
|
||||
torrc_template = torrc_template.replace(
|
||||
"{{data_directory}}", self.tor_data_directory.name
|
||||
"{{data_directory}}", self.tor_data_directory_name
|
||||
)
|
||||
torrc_template = torrc_template.replace(
|
||||
"{{control_port}}", str(self.tor_control_port)
|
||||
|
Loading…
Reference in New Issue
Block a user