mirror of
https://github.com/onionshare/onionshare.git
synced 2025-06-29 00:37:12 -04:00
randomize the name of hidden service directories (fixes #28)
This commit is contained in:
parent
48ab1387c5
commit
e00a888b9d
2 changed files with 17 additions and 40 deletions
|
@ -99,20 +99,6 @@ def get_platform():
|
||||||
def is_root():
|
def is_root():
|
||||||
return os.geteuid() == 0
|
return os.geteuid() == 0
|
||||||
|
|
||||||
def get_hidden_service_dir(port):
|
|
||||||
if get_platform() == "Windows":
|
|
||||||
if 'Temp' in os.environ:
|
|
||||||
temp = os.environ['Temp'].replace('\\', '/')
|
|
||||||
else:
|
|
||||||
temp = 'C:/tmp'
|
|
||||||
return "{0}/onionshare_hidden_service_{1}".format(temp, port)
|
|
||||||
|
|
||||||
return "/tmp/onionshare_hidden_service_{0}".format(port)
|
|
||||||
|
|
||||||
def get_hidden_service_hostname(port):
|
|
||||||
hostname_file = '{0}/hostname'.format(get_hidden_service_dir(port))
|
|
||||||
return open(hostname_file, 'r').read().strip()
|
|
||||||
|
|
||||||
def tails_open_port(port):
|
def tails_open_port(port):
|
||||||
if get_platform() == 'Tails':
|
if get_platform() == 'Tails':
|
||||||
print strings["punching_a_hole"]
|
print strings["punching_a_hole"]
|
||||||
|
@ -162,28 +148,39 @@ def choose_port():
|
||||||
return port
|
return port
|
||||||
|
|
||||||
def start_hidden_service(port):
|
def start_hidden_service(port):
|
||||||
|
# come up with a hidden service directory name
|
||||||
|
hidserv_dir_rand = os.urandom(8).encode('hex')
|
||||||
|
if get_platform() == "Windows":
|
||||||
|
if 'Temp' in os.environ:
|
||||||
|
temp = os.environ['Temp'].replace('\\', '/')
|
||||||
|
else:
|
||||||
|
temp = 'C:/tmp'
|
||||||
|
hidserv_dir = "{0}/onionshare_{1}".format(temp, hidserv_dir_rand)
|
||||||
|
else:
|
||||||
|
hidserv_dir = "/tmp/onionshare_{0}".format(hidserv_dir_rand)
|
||||||
|
|
||||||
# connect to the tor controlport
|
# connect to the tor controlport
|
||||||
controlports = [9051, 9151]
|
controlports = [9051, 9151]
|
||||||
controller = False
|
controller = False
|
||||||
|
|
||||||
for controlport in controlports:
|
for controlport in controlports:
|
||||||
try:
|
try:
|
||||||
controller = Controller.from_port(port=controlport)
|
controller = Controller.from_port(port=controlport)
|
||||||
except SocketError:
|
except SocketError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if not controller:
|
if not controller:
|
||||||
raise NoTor(strings["cant_connect_ctrlport"].format(controlports))
|
raise NoTor(strings["cant_connect_ctrlport"].format(controlports))
|
||||||
|
|
||||||
controller.authenticate()
|
controller.authenticate()
|
||||||
|
|
||||||
# set up hidden service
|
# set up hidden service
|
||||||
controller.set_options([
|
controller.set_options([
|
||||||
('HiddenServiceDir', get_hidden_service_dir(port)),
|
('HiddenServiceDir', hidserv_dir),
|
||||||
('HiddenServicePort', '80 127.0.0.1:{0}'.format(port))
|
('HiddenServicePort', '80 127.0.0.1:{0}'.format(port))
|
||||||
])
|
])
|
||||||
|
|
||||||
onion_host = get_hidden_service_hostname(port)
|
# figure out the .onion hostname
|
||||||
|
hostname_file = '{0}/hostname'.format(hidserv_dir)
|
||||||
|
onion_host = open(hostname_file, 'r').read().strip()
|
||||||
|
|
||||||
return onion_host
|
return onion_host
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
|
@ -11,26 +11,6 @@ def test_get_platform_returns_platform_system():
|
||||||
onionshare.platform.system = lambda: 'Sega Saturn'
|
onionshare.platform.system = lambda: 'Sega Saturn'
|
||||||
assert get_platform() == 'Sega Saturn'
|
assert get_platform() == 'Sega Saturn'
|
||||||
|
|
||||||
def test_get_hidden_service_dir_windows_with_temp():
|
|
||||||
"get_hidden_service_dir() uses a directory from the Windows environment when defined"
|
|
||||||
onionshare.platform.system = lambda: 'Windows'
|
|
||||||
os.environ['Temp'] = "C:\Internet Explorer\Secrets"
|
|
||||||
expected_path = "C:/Internet Explorer/Secrets/onionshare_hidden_service_port"
|
|
||||||
assert get_hidden_service_dir('port') == expected_path
|
|
||||||
|
|
||||||
def test_get_hidden_service_dir_windows_default():
|
|
||||||
"get_hidden_service_dir() uses C:/tmp by default on Windows"
|
|
||||||
onionshare.get_platform = lambda: 'Windows'
|
|
||||||
os.environ.pop('Temp', None)
|
|
||||||
expected_path = "C:/tmp/onionshare_hidden_service_port"
|
|
||||||
assert get_hidden_service_dir('port') == expected_path
|
|
||||||
|
|
||||||
def test_get_hidden_service_dir_posix():
|
|
||||||
"get_hidden_service_dir() uses /tmp by default on POSIX"
|
|
||||||
onionshare.get_platform = lambda: 'Not Windows'
|
|
||||||
expected_path = "/tmp/onionshare_hidden_service_port"
|
|
||||||
assert get_hidden_service_dir('port') == expected_path
|
|
||||||
|
|
||||||
class MockSubprocess():
|
class MockSubprocess():
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.last_call = None
|
self.last_call = None
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue