[Pkg-anonymity-tools] [onionshare] 59/140: fixed Tails bug where if you stopped server in GUI, you could not start a new server again
Ulrike Uhlig
u-guest at moszumanska.debian.org
Mon Sep 29 20:33:47 UTC 2014
This is an automated email from the git hooks/post-receive script.
u-guest pushed a commit to branch master
in repository onionshare.
commit c49cc75a556bd6b8ccbfeddeaec60153329e6200
Author: Micah Lee <micah at micahflee.com>
Date: Sat Aug 30 01:42:17 2014 +0000
fixed Tails bug where if you stopped server in GUI, you could not start a new server again
---
onionshare/onionshare.py | 24 ++++++++++++++++++------
onionshare/web.py | 10 +++++++++-
onionshare_gui/onionshare_gui.py | 1 +
3 files changed, 28 insertions(+), 7 deletions(-)
diff --git a/onionshare/onionshare.py b/onionshare/onionshare.py
index f102133..998753b 100644
--- a/onionshare/onionshare.py
+++ b/onionshare/onionshare.py
@@ -11,6 +11,8 @@ class TailsError(Exception): pass
class OnionShare(object):
def __init__(self, debug=False, local_only=False, stay_open=False):
+ self.port = None
+
# debug mode
if debug:
web.debug_mode()
@@ -24,10 +26,6 @@ class OnionShare(object):
# files and dirs to delete on shutdown
self.cleanup_filenames = []
- # choose a random port
- self.choose_port()
- self.local_host = "127.0.0.1:{0}".format(self.port)
-
def cleanup(self):
for filename in self.cleanup_filenames:
if os.path.isfile(filename):
@@ -44,6 +42,9 @@ class OnionShare(object):
tmpsock.close()
def start_hidden_service(self, gui=False, tails_root=False):
+ if not self.port:
+ self.choose_port()
+
if helpers.get_platform() == 'Tails' and not tails_root:
# in Tails, start the hidden service in a root process
if gui:
@@ -115,9 +116,15 @@ class OnionShare(object):
ready = True
sys.stdout.write('{0}\n'.format(strings._('wait_for_hs_yup')))
- except:
+ except TypeError: # non-Tails error
sys.stdout.write('{0}\n'.format(strings._('wait_for_hs_nope')))
sys.stdout.flush()
+ except urllib2.HTTPError: # Tails error
+ sys.stdout.write('{0}\n'.format(strings._('wait_for_hs_nope')))
+ sys.stdout.flush()
+ except KeyboardInterrupt:
+ return False
+ return True
def tails_root():
# if running in Tails and as root, do only the things that require root
@@ -137,6 +144,7 @@ def tails_root():
# start hidden service
app = OnionShare()
+ app.choose_port()
app.port = port
app.start_hidden_service(False, True)
sys.stdout.write(app.onion_host)
@@ -186,6 +194,7 @@ def main():
# start the onionshare app
try:
app = OnionShare(debug, local_only, stay_open)
+ app.choose_port()
print strings._("connecting_ctrlport").format(app.port)
app.start_hidden_service()
except NoTor as e:
@@ -204,7 +213,10 @@ def main():
t.start()
# wait for hs
- app.wait_for_hs()
+ ready = app.wait_for_hs()
+ if not ready:
+ sys.exit()
+
print strings._("give_this_url")
print 'http://{0}/{1}'.format(app.onion_host, web.slug)
print ''
diff --git a/onionshare/web.py b/onionshare/web.py
index c7363c5..501e8da 100644
--- a/onionshare/web.py
+++ b/onionshare/web.py
@@ -179,6 +179,14 @@ def start(port, stay_open=False):
def stop():
# to stop flask, load http://127.0.0.1:<port>/<shutdown_slug>/shutdown
try:
- urllib2.urlopen('http://127.0.0.1:{0}/{1}/shutdown'.format(app.port, shutdown_slug)).read()
+ if helpers.get_platform() == 'Tails':
+ # in Tails everything is proxies over Tor, so we need to get lower level
+ # to connect not over the proxy
+ import socket
+ s = socket.socket()
+ s.connect(('127.0.0.1', app.port))
+ s.sendall('GET /{0}/shutdown HTTP/1.1\r\n\r\n'.format(shutdown_slug))
+ else:
+ urllib2.urlopen('http://127.0.0.1:{0}/{1}/shutdown'.format(app.port, shutdown_slug)).read()
except:
pass
diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py
index 8e2b827..5ef2918 100644
--- a/onionshare_gui/onionshare_gui.py
+++ b/onionshare_gui/onionshare_gui.py
@@ -83,6 +83,7 @@ class OnionShareGui(QtGui.QWidget):
# start the hidden service
self.status_bar.showMessage(strings._('gui_starting_server').format(self.app.port))
try:
+ self.app.choose_port()
print strings._("connecting_ctrlport").format(self.app.port)
self.app.start_hidden_service(gui=True)
except onionshare.NoTor as e:
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/collab-maint/onionshare.git
More information about the Pkg-anonymity-tools
mailing list