def main(): strings.load_strings() tails_root() # parse arguments parser = argparse.ArgumentParser() parser.add_argument('--local-only', action='store_true', dest='local_only', help=strings._("help_local_only")) parser.add_argument('--stay-open', action='store_true', dest='stay_open', help=strings._("help_stay_open")) parser.add_argument('--debug', action='store_true', dest='debug', help=strings._("help_debug")) parser.add_argument('filename', metavar='filename', nargs='+', help=strings._('help_filename')) args = parser.parse_args() filenames = args.filename for i in range(len(filenames)): filenames[i] = os.path.abspath(filenames[i]) local_only = bool(args.local_only) debug = bool(args.debug) stay_open = bool(args.stay_open) # validation valid = True for filename in filenames: if not os.path.exists(filename): print(strings._("not_a_file").format(filename)) valid = False if not valid: sys.exit() # 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: sys.exit(e.args[0]) except TailsError as e: sys.exit(e.args[0]) # prepare files to share print strings._("preparing_files") web.set_file_info(filenames) app.cleanup_filenames.append(web.zip_filename) # start onionshare service in new thread t = threading.Thread(target=web.start, args=(app.port, app.stay_open)) t.daemon = True t.start() # 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 '' print strings._("ctrlc_to_stop") # wait for app to close running = True while running: try: time.sleep(0.5) except KeyboardInterrupt: running = False web.stop() # shutdown app.cleanup()
def main(cwd=None): """ The main() function implements all of the logic that the command-line version of onionshare uses. """ strings.load_strings() # onionshare CLI in OSX needs to change current working directory (#132) if helpers.get_platform() == 'Darwin': if cwd: os.chdir(cwd) # parse arguments parser = argparse.ArgumentParser() parser.add_argument('--local-only', action='store_true', dest='local_only', help=strings._("help_local_only")) parser.add_argument('--stay-open', action='store_true', dest='stay_open', help=strings._("help_stay_open")) parser.add_argument('--transparent', action='store_true', dest='transparent_torification', help=strings._("help_transparent_torification")) parser.add_argument('--debug', action='store_true', dest='debug', help=strings._("help_debug")) parser.add_argument('filename', metavar='filename', nargs='+', help=strings._('help_filename')) args = parser.parse_args() filenames = args.filename for i in range(len(filenames)): filenames[i] = os.path.abspath(filenames[i]) local_only = bool(args.local_only) debug = bool(args.debug) stay_open = bool(args.stay_open) transparent_torification = bool(args.transparent_torification) # validation valid = True for filename in filenames: if not os.path.exists(filename): print(strings._("not_a_file").format(filename)) valid = False if not valid: sys.exit() # start the onionshare app try: app = OnionShare(debug, local_only, stay_open, transparent_torification) app.choose_port() app.start_hidden_service() except hs.NoTor as e: sys.exit(e.args[0]) except hs.HSDirError as e: sys.exit(e.args[0]) # prepare files to share print strings._("preparing_files") web.set_file_info(filenames) app.cleanup_filenames.append(web.zip_filename) # warn about sending large files over Tor if web.zip_filesize >= 157286400: # 150mb print '' print strings._("large_filesize") print '' # start onionshare service in new thread t = threading.Thread(target=web.start, args=(app.port, app.stay_open, app.transparent_torification)) t.daemon = True t.start() try: # Trap Ctrl-C # wait for hs, only if using old version of tor if not app.local_only: ready = app.hs.wait_for_hs(app.onion_host) if not ready: sys.exit() print strings._("give_this_url") print 'http://{0:s}/{1:s}'.format(app.onion_host, web.slug) print '' print strings._("ctrlc_to_stop") # wait for app to close while t.is_alive(): # t.join() can't catch KeyboardInterrupt in such as Ubuntu t.join(0.5) except KeyboardInterrupt: web.stop(app.port) finally: # shutdown app.cleanup()
def main(): strings.load_strings() tails_root() # parse arguments parser = argparse.ArgumentParser() parser.add_argument('--local-only', action='store_true', dest='local_only', help=strings._("help_local_only")) parser.add_argument('--stay-open', action='store_true', dest='stay_open', help=strings._("help_stay_open")) parser.add_argument('--debug', action='store_true', dest='debug', help=strings._("help_debug")) parser.add_argument('filename', metavar='filename', nargs='+', help=strings._('help_filename')) args = parser.parse_args() filenames = args.filename for i in range(len(filenames)): filenames[i] = os.path.abspath(filenames[i]) local_only = bool(args.local_only) debug = bool(args.debug) stay_open = bool(args.stay_open) # validation valid = True for filename in filenames: if not os.path.exists(filename): print(strings._("not_a_file").format(filename)) valid = False if not valid: sys.exit() # 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: sys.exit(e.args[0]) except TailsError as e: sys.exit(e.args[0]) # prepare files to share print strings._("preparing_files") web.set_file_info(filenames) app.cleanup_filenames.append(web.zip_filename) # warn about sending large files over Tor if web.zip_filesize >= 157286400: # 150mb print '' print strings._("large_filesize") print '' # start onionshare service in new thread t = threading.Thread(target=web.start, args=(app.port, app.stay_open)) t.daemon = True t.start() try: # Trap Ctrl-C # 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 '' print strings._("ctrlc_to_stop") # wait for app to close while t.is_alive(): # t.join() can't catch KeyboardInterrupt in such as Ubuntu t.join(0.5) except KeyboardInterrupt: web.stop(app.port) finally: # shutdown app.cleanup()
def main(cwd=None): """ The main() function implements all of the logic that the command-line version of onionshare uses. """ strings.load_strings() # onionshare CLI in OSX needs to change current working directory (#132) if helpers.get_platform() == 'Darwin': if cwd: os.chdir(cwd) # parse arguments parser = argparse.ArgumentParser() parser.add_argument('--local-only', action='store_true', dest='local_only', help=strings._("help_local_only")) parser.add_argument('--stay-open', action='store_true', dest='stay_open', help=strings._("help_stay_open")) parser.add_argument('--transparent', action='store_true', dest='transparent_torification', help=strings._("help_transparent_torification")) parser.add_argument('--debug', action='store_true', dest='debug', help=strings._("help_debug")) parser.add_argument('filename', metavar='filename', nargs='+', help=strings._('help_filename')) args = parser.parse_args() filenames = args.filename for i in range(len(filenames)): filenames[i] = os.path.abspath(filenames[i]) local_only = bool(args.local_only) debug = bool(args.debug) stay_open = bool(args.stay_open) transparent_torification = bool(args.transparent_torification) # validation valid = True for filename in filenames: if not os.path.exists(filename): print(strings._("not_a_file").format(filename)) valid = False if not valid: sys.exit() # start the onionshare app try: app = OnionShare(debug, local_only, stay_open, transparent_torification) app.choose_port() app.start_hidden_service() except hs.NoTor as e: sys.exit(e.args[0]) except hs.HSDirError as e: sys.exit(e.args[0]) # prepare files to share print strings._("preparing_files") web.set_file_info(filenames) app.cleanup_filenames.append(web.zip_filename) # warn about sending large files over Tor if web.zip_filesize >= 157286400: # 150mb print '' print strings._("large_filesize") print '' # start onionshare service in new thread t = threading.Thread(target=web.start, args=(app.port, app.stay_open, app.transparent_torification)) t.daemon = True t.start() try: # Trap Ctrl-C # wait for hs, only if using old version of tor if not app.hs.supports_ephemeral: if not app.local_only: ready = app.hs.wait_for_hs(app.onion_host) if not ready: sys.exit() print strings._("give_this_url") print 'http://{0:s}/{1:s}'.format(app.onion_host, web.slug) print '' print strings._("ctrlc_to_stop") # wait for app to close while t.is_alive(): # t.join() can't catch KeyboardInterrupt in such as Ubuntu t.join(0.5) except KeyboardInterrupt: web.stop(app.port) finally: # shutdown app.cleanup()
def main(): strings.load_strings(common.supercipher_dir) # parse arguments parser = argparse.ArgumentParser() parser.add_argument('-e', '--encrypt', metavar='filename', nargs='+', help=strings._('arg_help_encrypt')) parser.add_argument('-d', '--decrypt', metavar='filename', dest='decrypt', help=strings._('arg_help_decrypt')) parser.add_argument('-p', '--pubkey', metavar='public_key', dest='pubkey', help=strings._('arg_help_pubkey')) parser.add_argument('-o', '--output', metavar='filename', dest='output', required=True, help=strings._('arg_help_output')) args = parser.parse_args() encrypt_filenames = args.encrypt decrypt_filename = args.decrypt pubkey = args.pubkey output_filename = args.output # convert filenames to absolute paths if encrypt_filenames: for i in range(len(encrypt_filenames)): encrypt_filenames[i] = os.path.abspath(encrypt_filenames[i]) if decrypt_filename: decrypt_filename = os.path.abspath(decrypt_filename) output_filename = os.path.abspath(output_filename) # validation if not encrypt_filenames and not decrypt_filename: parser.print_help() print '' print strings._('validation_choose_one') sys.exit(0) if encrypt_filenames and decrypt_filename: print strings._('validation_dont_choose_two') sys.exit(0) if encrypt_filenames: action = 'encrypt' else: action = 'decrypt' # encrypt validation if action == 'encrypt': # make sure encrypt_filenames is a list of valid files/folders valid = True for filename in encrypt_filenames: if not os.path.exists(filename): print strings._('validation_doesnt_exist').format(filename) valid = False if not valid: print strings._('validation_invalid_file') sys.exit(0) # if pubkey is passed, make sure the fingerprint is valid if pubkey: try: common.gpg.valid_pubkey(pubkey) except InvalidPubkeyLength: print strings._('validation_pubkey_length') sys.exit(0) except InvalidPubkeyNotHex: print strings._('validation_pubkey_not_hex') sys.exit(0) except MissingPubkey: print strings._('validation_missing_pubkey') sys.exit(0) # make sure output_filename doesn't already exist if os.path.exists(output_filename): print strings._('validation_output_exists').format(output_filename) sys.exit(0) elif action == 'decrypt': # make sure decrypt_filename is a valid file if not os.path.isfile(decrypt_filename): print strings._('validation_not_file').format(decrypt_filename) sys.exit(0) # make sure output_filename either doesn't exist or is a writable folder if os.path.exists(output_filename): if os.path.isdir(output_filename): if not os.access(output_filename, os.W_OK): print strings._('validation_not_writable').format(output_filename) sys.exit(0) else: print strings._('validation_already_exists').format(output_filename) sys.exit(0) # execute the action if action == 'encrypt': encrypt(encrypt_filenames, output_filename, pubkey) else: decrypt(decrypt_filename, output_filename)