def select_file(strings): # get filename, either from argument or file chooser dialog if len(sys.argv) == 2: filename = sys.argv[1] else: canceled = False chooser = gtk.FileChooserDialog( title="Choose a file to share", action=gtk.FILE_CHOOSER_ACTION_OPEN, buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)) if onionshare.get_platform() == 'Tails': chooser.set_current_folder('/home/amnesia/') response = chooser.run() if response == gtk.RESPONSE_OK: filename = chooser.get_filename() elif response == gtk.RESPONSE_CANCEL: canceled = True chooser.destroy() if canceled: return False, False # validate filename if not os.path.isfile(filename): alert(strings["not_a_file"].format(filename), gtk.MESSAGE_ERROR) return False, False filename = os.path.abspath(filename) basename = os.path.basename(filename) return filename, basename
def main(): onionshare.strings = onionshare.load_strings() # start the Qt 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 # create the onionshare icon global window_icon, onionshare_gui_dir window_icon = QIcon("{0}/onionshare-icon.png".format(onionshare_gui_dir)) # try starting hidden service onionshare_port = onionshare.choose_port() try: onion_host = onionshare.start_hidden_service(onionshare_port) except onionshare.NoTor as e: alert(e.args[0], QMessageBox.Warning) return onionshare.tails_open_port(onionshare_port) # select file to share filename, basename = select_file(onionshare.strings) if not filename: return # initialize the web app webapp.onionshare = onionshare webapp.onionshare_port = onionshare_port webapp.filename = filename webapp.onion_host = onion_host webapp.qtapp = app webapp.clipboard = app.clipboard() # run the web app in a new thread webapp_port = onionshare.choose_port() onionshare.tails_open_port(webapp_port) webapp_thread = WebAppThread(webapp_port) webapp_thread.start() # clean up when app quits def shutdown(): onionshare.tails_close_port(onionshare_port) onionshare.tails_close_port(webapp_port) app.connect(app, SIGNAL("aboutToQuit()"), shutdown) # launch the window web = Window(basename, webapp_port) web.show() # all done sys.exit(app.exec_())
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 = QFileDialog.getOpenFileName(caption=strings['choose_file'], options=QFileDialog.ReadOnly, **args) if not filename: return False, False filename = str(filename) # validate filename if not os.path.isfile(filename): alert(strings["not_a_file"].format(filename), QMessageBox.Warning) return False, False filename = os.path.abspath(filename) basename = os.path.basename(filename) return filename, basename
def main(): onionshare.strings = onionshare.load_strings() # check for root in Tails if onionshare.get_platform() == 'Tails' and not onionshare.is_root(): subprocess.call(['/usr/bin/gksudo']+sys.argv) return # try starting hidden service onionshare_port = onionshare.choose_port() try: onion_host = onionshare.start_hidden_service(onionshare_port) except onionshare.NoTor as e: alert(e.args[0], gtk.MESSAGE_ERROR) return onionshare.tails_open_port(onionshare_port) # select file to share filename, basename = select_file(onionshare.strings) if not filename: return # start the gui web server webapp_port = onionshare.choose_port() t = threading.Thread(target=start_webapp, kwargs={ 'webapp_port': webapp_port, 'onionshare_port': onionshare_port, 'filename': filename, 'onion_host': onion_host }) t.daemon = True t.start() onionshare.tails_open_port(webapp_port) # launch the window launch_window(webapp_port, onionshare_port, basename)
def main(): onionshare.strings = onionshare.load_strings() # start the Qt 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') parser.add_argument('--stay-open', action='store_true', dest='stay_open', help='Keep hidden service running after download has finished') parser.add_argument('--debug', action='store_true', dest='debug', help='Log errors to disk') parser.add_argument('filename', nargs='?', help='File to share') args = parser.parse_args() filename = args.filename local_only = args.local_only stay_open = bool(args.stay_open) debug = args.debug onionshare.set_stay_open(stay_open) # create the onionshare icon global window_icon, onionshare_gui_dir window_icon = QIcon("{0}/onionshare-icon.png".format(onionshare_gui_dir)) # try starting hidden service 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], QMessageBox.Warning) return onionshare.tails_open_port(onionshare_port) # select file to share filename, basename = select_file(onionshare.strings, filename) if not filename: return # initialize the web app webapp.onionshare = onionshare webapp.onionshare_port = onionshare_port webapp.filename = filename if not local_only: webapp.onion_host = onion_host else: webapp.onion_host = local_host webapp.qtapp = app webapp.clipboard = app.clipboard() webapp.stay_open = stay_open webapp.debug = debug # run the web app in a new thread webapp_port = onionshare.choose_port() onionshare.tails_open_port(webapp_port) webapp_thread = WebAppThread(webapp_port) webapp_thread.start() # clean up when app quits def shutdown(): onionshare.tails_close_port(onionshare_port) onionshare.tails_close_port(webapp_port) app.connect(app, SIGNAL("aboutToQuit()"), shutdown) # launch the window web = Window(basename, webapp_port) web.show() # all done sys.exit(app.exec_())
def __init__(self): platform = onionshare.get_platform() if platform == 'Tails' or platform == 'Linux': self.setAttribute(Qt.AA_X11InitThreads, True) QApplication.__init__(self, sys.argv)