aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMicah Lee <micah@micahflee.com>2014-08-20 21:30:28 +0000
committerMicah Lee <micah@micahflee.com>2014-08-20 21:30:28 +0000
commit661706314345ab60b75e3ed0457d586a0dc6f166 (patch)
treea5ce6b4226a81f1562af7787238617f27b39eb41
parent2ac25e2995839b8bd45b5259feabf5dc365b8f23 (diff)
downloadonionshare-661706314345ab60b75e3ed0457d586a0dc6f166.tar.gz
onionshare-661706314345ab60b75e3ed0457d586a0dc6f166.zip
in Tails, root stuff is launched in separate process in GUI (#96)
-rw-r--r--onionshare_gui/onionshare_gui.py56
1 files changed, 33 insertions, 23 deletions
diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py
index 61822d67..999e4f4c 100644
--- a/onionshare_gui/onionshare_gui.py
+++ b/onionshare_gui/onionshare_gui.py
@@ -17,7 +17,7 @@ from onionshare import translated
app = None
window_icon = None
onion_host = None
-onionshare_port = None
+port = None
progress = None
# request types
@@ -152,7 +152,7 @@ class OnionShareGui(QtGui.QWidget):
onionshare.filesize = filesize
# start onionshare service in new thread
- t = threading.Thread(target=onionshare.app.run, kwargs={'port': onionshare_port})
+ t = threading.Thread(target=onionshare.app.run, kwargs={'port': port})
t.daemon = True
t.start()
@@ -290,11 +290,7 @@ def alert(msg, icon=QtGui.QMessageBox.NoIcon):
def select_file(strings, filename=None):
# get filename, either from argument or file chooser dialog
if not filename:
- args = {}
- if onionshare.get_platform() == 'Tails':
- args['directory'] = '/home/amnesia'
-
- filename = QtGui.QFileDialog.getOpenFileName(caption=translated('choose_file'), options=QtGui.QFileDialog.ReadOnly, **args)
+ filename = QtGui.QFileDialog.getOpenFileName(caption=translated('choose_file'), options=QtGui.QFileDialog.ReadOnly)
if not filename:
return False, False
@@ -310,18 +306,13 @@ def select_file(strings, filename=None):
return filename, basename
def main():
- global onionshare_port
+ global port
onionshare.strings = onionshare.load_strings()
# start the Qt app
global app
app = Application()
- # check for root in Tails
- if onionshare.get_platform() == 'Tails' and not onionshare.is_root():
- subprocess.call(['/usr/bin/gksudo']+sys.argv)
- return
-
# parse arguments
parser = argparse.ArgumentParser()
parser.add_argument('--local-only', action='store_true', dest='local_only', help='Do not attempt to use tor: for development only')
@@ -335,6 +326,9 @@ def main():
stay_open = bool(args.stay_open)
debug = bool(args.debug)
+ if debug:
+ onionshare.debug_mode()
+
onionshare.set_stay_open(stay_open)
# create the onionshare icon
@@ -343,15 +337,31 @@ def main():
# try starting hidden service
global onion_host
- onionshare_port = onionshare.choose_port()
- local_host = "127.0.0.1:{0}".format(onionshare_port)
- if not local_only:
- try:
- onion_host = onionshare.start_hidden_service(onionshare_port)
- except onionshare.NoTor as e:
- alert(e.args[0], QtGui.QMessageBox.Warning)
- return
- onionshare.tails_open_port(onionshare_port)
+ port = onionshare.choose_port()
+ local_host = "127.0.0.1:{0}".format(port)
+
+ if onionshare.get_platform() == 'Tails':
+ # if this is tails, start the root process
+ root_p = subprocess.Popen(['/usr/bin/gksudo', '-D', 'OnionShare', '--', '/usr/bin/onionshare', str(port)], stderr=subprocess.PIPE, stdout=subprocess.PIPE)
+ stdout = root_p.stdout.read(22) # .onion URLs are 22 chars long
+
+ if stdout:
+ onion_host = stdout
+ else:
+ if root_p.poll() == -1:
+ alert(root_p.stderr.read())
+ return
+ else:
+ alert('Unknown error with Tails root process')
+ return
+ else:
+ # if not tails, start hidden service normally
+ if not local_only:
+ try:
+ onion_host = onionshare.start_hidden_service(port)
+ except onionshare.NoTor as e:
+ alert(e.args[0], QtGui.QMessageBox.Warning)
+ return
# select file to share
filename, basename = select_file(onionshare.strings, filename)
@@ -360,7 +370,7 @@ def main():
# clean up when app quits
def shutdown():
- onionshare.tails_close_port(onionshare_port)
+ pass
app.connect(app, QtCore.SIGNAL("aboutToQuit()"), shutdown)
# launch the gui