mirror of
https://github.com/onionshare/onionshare.git
synced 2025-12-16 00:34:09 -05:00
in Tails, root stuff is launched in separate process in GUI (#96)
This commit is contained in:
parent
2ac25e2995
commit
6617063143
1 changed files with 33 additions and 23 deletions
|
|
@ -17,7 +17,7 @@ from onionshare import translated
|
||||||
app = None
|
app = None
|
||||||
window_icon = None
|
window_icon = None
|
||||||
onion_host = None
|
onion_host = None
|
||||||
onionshare_port = None
|
port = None
|
||||||
progress = None
|
progress = None
|
||||||
|
|
||||||
# request types
|
# request types
|
||||||
|
|
@ -152,7 +152,7 @@ class OnionShareGui(QtGui.QWidget):
|
||||||
onionshare.filesize = filesize
|
onionshare.filesize = filesize
|
||||||
|
|
||||||
# start onionshare service in new thread
|
# 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.daemon = True
|
||||||
t.start()
|
t.start()
|
||||||
|
|
||||||
|
|
@ -290,11 +290,7 @@ def alert(msg, icon=QtGui.QMessageBox.NoIcon):
|
||||||
def select_file(strings, filename=None):
|
def select_file(strings, filename=None):
|
||||||
# get filename, either from argument or file chooser dialog
|
# get filename, either from argument or file chooser dialog
|
||||||
if not filename:
|
if not filename:
|
||||||
args = {}
|
filename = QtGui.QFileDialog.getOpenFileName(caption=translated('choose_file'), options=QtGui.QFileDialog.ReadOnly)
|
||||||
if onionshare.get_platform() == 'Tails':
|
|
||||||
args['directory'] = '/home/amnesia'
|
|
||||||
|
|
||||||
filename = QtGui.QFileDialog.getOpenFileName(caption=translated('choose_file'), options=QtGui.QFileDialog.ReadOnly, **args)
|
|
||||||
if not filename:
|
if not filename:
|
||||||
return False, False
|
return False, False
|
||||||
|
|
||||||
|
|
@ -310,18 +306,13 @@ def select_file(strings, filename=None):
|
||||||
return filename, basename
|
return filename, basename
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
global onionshare_port
|
global port
|
||||||
onionshare.strings = onionshare.load_strings()
|
onionshare.strings = onionshare.load_strings()
|
||||||
|
|
||||||
# start the Qt app
|
# start the Qt app
|
||||||
global app
|
global app
|
||||||
app = Application()
|
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
|
# parse arguments
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument('--local-only', action='store_true', dest='local_only', help='Do not attempt to use tor: for development only')
|
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)
|
stay_open = bool(args.stay_open)
|
||||||
debug = bool(args.debug)
|
debug = bool(args.debug)
|
||||||
|
|
||||||
|
if debug:
|
||||||
|
onionshare.debug_mode()
|
||||||
|
|
||||||
onionshare.set_stay_open(stay_open)
|
onionshare.set_stay_open(stay_open)
|
||||||
|
|
||||||
# create the onionshare icon
|
# create the onionshare icon
|
||||||
|
|
@ -343,15 +337,31 @@ def main():
|
||||||
|
|
||||||
# try starting hidden service
|
# try starting hidden service
|
||||||
global onion_host
|
global onion_host
|
||||||
onionshare_port = onionshare.choose_port()
|
port = onionshare.choose_port()
|
||||||
local_host = "127.0.0.1:{0}".format(onionshare_port)
|
local_host = "127.0.0.1:{0}".format(port)
|
||||||
if not local_only:
|
|
||||||
try:
|
if onionshare.get_platform() == 'Tails':
|
||||||
onion_host = onionshare.start_hidden_service(onionshare_port)
|
# if this is tails, start the root process
|
||||||
except onionshare.NoTor as e:
|
root_p = subprocess.Popen(['/usr/bin/gksudo', '-D', 'OnionShare', '--', '/usr/bin/onionshare', str(port)], stderr=subprocess.PIPE, stdout=subprocess.PIPE)
|
||||||
alert(e.args[0], QtGui.QMessageBox.Warning)
|
stdout = root_p.stdout.read(22) # .onion URLs are 22 chars long
|
||||||
return
|
|
||||||
onionshare.tails_open_port(onionshare_port)
|
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
|
# select file to share
|
||||||
filename, basename = select_file(onionshare.strings, filename)
|
filename, basename = select_file(onionshare.strings, filename)
|
||||||
|
|
@ -360,7 +370,7 @@ def main():
|
||||||
|
|
||||||
# clean up when app quits
|
# clean up when app quits
|
||||||
def shutdown():
|
def shutdown():
|
||||||
onionshare.tails_close_port(onionshare_port)
|
pass
|
||||||
app.connect(app, QtCore.SIGNAL("aboutToQuit()"), shutdown)
|
app.connect(app, QtCore.SIGNAL("aboutToQuit()"), shutdown)
|
||||||
|
|
||||||
# launch the gui
|
# launch the gui
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue