def start(arguments): defaults = OpenBazaarContext.get_defaults() network_util.set_stun_servers() # Turn off checks that don't make sense in development mode if arguments.dev_mode: print "DEVELOPMENT MODE! (Disable STUN check and UPnP mappings)" arguments.disable_stun_check = True arguments.disable_upnp = True # Try to get NAT escape UDP port nat_status = None if not arguments.disable_stun_check: print "Checking NAT Status..." nat_status = network_util.get_NAT_status() elif not arguments.dev_mode and network_util.is_private_ip_address( arguments.server_ip): print "openbazaar: Could not start. The given/default server IP address", print arguments.server_ip, "is not a public ip address." print "(Try './openbazaar help' and read about the '--server-ip', '-i' options)" sys.exit(1) ob_ctxs = create_openbazaar_contexts(arguments, nat_status) for ob_ctx in ob_ctxs: ensure_database_setup(ob_ctx, defaults) if hasattr(sys, 'frozen'): start_node(ob_ctxs[0]) else: p = multiprocessing.Process(target=node_starter, args=(ob_ctxs, )) p.start()
def start(arguments): defaults = OpenBazaarContext.get_defaults() network_util.set_stun_servers() # Turn off checks that don't make sense in development mode if arguments.dev_mode: print "DEVELOPMENT MODE! (Disable STUN check and UPnP mappings)" arguments.disable_stun_check = True arguments.disable_upnp = True # Try to get NAT escape UDP port nat_status = None if not arguments.disable_stun_check: print "Checking NAT Status..." nat_status = network_util.get_NAT_status() elif not arguments.dev_mode and network_util.is_private_ip_address(arguments.server_ip): print "openbazaar: Could not start. The given/default server IP address", print arguments.server_ip, "is not a public ip address." print "(Try './openbazaar help' and read about the '--server-ip', '-i' options)" sys.exit(1) ob_ctxs = create_openbazaar_contexts(arguments, nat_status) for ob_ctx in ob_ctxs: ensure_database_setup(ob_ctx, defaults) if hasattr(sys, 'frozen'): start_node(ob_ctxs[0]) else: p = multiprocessing.Process(target=node_starter, args=(ob_ctxs,)) p.start()
def create_argument_parser(): defaults = OpenBazaarContext.get_defaults() default_db_path = os.path.join(defaults['db_dir'], defaults['db_file']) default_log_path = os.path.join(defaults['log_dir'], defaults['log_file']) parser = argparse.ArgumentParser( description='OpenBazaar launcher script', usage=usage(), add_help=False ) # Argument entries should have the mandatory long form first. plain_args = ( ('--bm-pass',), ('--bm-user',), ('--config-file',), ('--http-ip', '-k'), ('--log-level',), ('--market-id', '-u'), ('--server-ip', '-i') ) for switches in plain_args: key = arg_to_key(switches[0]) parser.add_argument(*switches, default=defaults[key]) int_args = ( ('--bm-port',), ('--dev-nodes', '-n'), ('--http-port', '-q'), ('--server-port', '-p') ) for switches in int_args: key = arg_to_key(switches[0]) parser.add_argument(*switches, type=int, default=defaults[key]) flags = ( ('--dev-mode', '-d'), ('--disable-open-browser',), ('--disable-sqlite-crypt',), ('--disable-stun-check',), ('--disable-upnp', '-j'), ('--enable-ip-checker',), ('--seed-mode', '-S') ) for switches in flags: key = arg_to_key(switches[0]) parser.add_argument( *switches, action='store_true', default=defaults[key] ) # Add miscellaneous flags. parser.add_argument('-s', '--seeds', nargs='*', default=defaults['seeds']) parser.add_argument('--db-path', default=default_db_path) parser.add_argument('-l', '--log', default=default_log_path) # Add valid commands. parser.add_argument('command', choices=('start', 'stop', 'help')) return parser
def create_layers(context, num_layers): layers = [] for i in range(num_layers): # dev_mode is True because otherwise the layer's ip is set to the # public ip of the node ob_ctx = OpenBazaarContext.create_default_instance() ob_ctx.dev_mode = True ob_ctx.server_ip = ip_address(i) ob_ctx.server_port = port db_path = get_db_path(i) setup_db(db_path, ob_ctx.disable_sqlite_crypt) layers.append(CryptoTransportLayer(ob_ctx, Obdb(db_path))) context.layers = layers
def create_layers(context, num_layers): layers = [] for i in range(num_layers): # dev_mode is True because otherwise the layer's ip is set to the # public ip of the node ob_ctx = OpenBazaarContext.create_default_instance() ob_ctx.dev_mode = True ob_ctx.server_ip = ip_address(i) ob_ctx.server_port = PORT db_path = get_db_path(i) setup_db(db_path, ob_ctx.disable_sqlite_crypt) layers.append(CryptoTransportLayer(ob_ctx, Obdb(db_path))) context.layers = layers
def create_argument_parser(): defaults = OpenBazaarContext.get_defaults() default_db_path = os.path.join(defaults['db_dir'], defaults['db_file']) default_log_path = os.path.join(defaults['log_dir'], defaults['log_file']) parser = argparse.ArgumentParser(description='OpenBazaar launcher script', usage=usage(), add_help=False) # Argument entries should have the mandatory long form first. plain_args = (('--bm-pass', ), ('--bm-user', ), ('--config-file', ), ('--http-ip', '-k'), ('--log-level', ), ('--market-id', '-u'), ('--server-ip', '-i')) for switches in plain_args: key = arg_to_key(switches[0]) parser.add_argument(*switches, default=defaults[key]) int_args = (('--bm-port', ), ('--dev-nodes', '-n'), ('--http-port', '-q'), ('--server-port', '-p'), ('--mediator-port', )) for switches in int_args: key = arg_to_key(switches[0]) parser.add_argument(*switches, type=int, default=defaults[key]) flags = (('--dev-mode', '-d'), ('--disable-open-browser', ), ('--disable-sqlite-crypt', ), ('--disable-stun-check', ), ('--disable-upnp', '-j'), ('--enable-ip-checker', ), ('--seed-mode', '-S'), ('--mediator', '-m')) for switches in flags: key = arg_to_key(switches[0]) parser.add_argument(*switches, action='store_true', default=defaults[key]) # Add miscellaneous flags. parser.add_argument('-s', '--seeds', nargs='*', default=defaults['seeds']) parser.add_argument('--db-path', default=default_db_path) parser.add_argument('-l', '--log', default=default_log_path) # Add valid commands. parser.add_argument('command', choices=('start', 'stop', 'help'), nargs='?', default='help') return parser
def create_openbazaar_contexts(arguments, nat_status): """ Returns List<OpenBazaarContext>. If we are on production mode, the list will contain a single OpenBazaarContext object based on the arguments passed. If a configuration file is passed, settings from the configuration file will be read first, and whatever other parameters have been passed via the command line will override the settings on the configuration file. :rtype : list of [OpenBazaarContext] """ defaults = OpenBazaarContext.get_defaults() server_ip = arguments.server_ip # "I'll purposefully leave these seemingly useless Schlemiel-styled # comments as visual separators to denote the beginning and end of # these ifs statements. They're actually nice to have when maintaining # so many ifs blocks. Feel free to remove post merge if they truly # annoy you." -Gubatron :) # market port server_port = arguments.server_port if nat_status is not None and not arguments.disable_stun_check: # unless --disable-stun-check has been passed # override the server ip and port for p2p communications with the ones # obtained from the STUN server. print nat_status server_ip = nat_status['external_ip'] server_port = nat_status['external_port'] # log path (requires log_dir to exist) if not os.path.exists(defaults['log_dir']): os.makedirs(defaults['log_dir'], 0o755) # db path if not os.path.exists(defaults['db_dir']): os.makedirs(defaults['db_dir'], 0o755) db_path = os.path.join(defaults['db_dir'], defaults['db_file']) if arguments.db_path != db_path: db_path = arguments.db_path ob_ctxs = [] if not arguments.dev_mode: log_file = defaults['log_file'] log_path = os.path.join(defaults['log_dir'], log_file) if arguments.log != log_path: log_path = arguments.log seed_tuples = [] for seed in arguments.seeds: if not isinstance(seed, tuple): seed_split = seed.split(':') seed_tuples.append((seed_split[0], seed_split[1])) else: seed_tuples.append(seed) # we return a list of a single element, a production node. ob_ctxs.append(OpenBazaarContext(nat_status, server_ip, server_port, arguments.http_ip, arguments.http_port, db_path, log_path, arguments.log_level, arguments.market_id, arguments.bm_user, arguments.bm_pass, arguments.bm_port, arguments.mediator_port, arguments.mediator, seed_tuples, arguments.seed_mode, arguments.dev_mode, arguments.dev_nodes, arguments.disable_upnp, arguments.disable_stun_check, arguments.disable_open_browser, arguments.disable_sqlite_crypt, arguments.enable_ip_checker)) else: # Create an OpenBazaarContext object for each development node. db_path = os.path.join(defaults['db_dir'], 'this_will_be_ignored') db_dirname = os.path.dirname(db_path) for i in range(arguments.dev_nodes): db_dev_filename = defaults['dev_db_file'].format(i) db_path = os.path.join(db_dirname, db_dev_filename) log_file = defaults['dev_log_file'] dev_log_file = log_file.format(i) log_path = os.path.join(defaults['log_dir'], dev_log_file) http_port = arguments.http_port if http_port != 0: http_port += i if i: seed_mode = False seeds = [(server_ip, server_port)] else: seed_mode = True seeds = [] ob_ctxs.append(OpenBazaarContext(nat_status, server_ip, server_port + i, arguments.http_ip, http_port, db_path, log_path, arguments.log_level, arguments.market_id, arguments.bm_user, arguments.bm_pass, arguments.bm_port, arguments.mediator_port + i, arguments.mediator, seeds, seed_mode, arguments.dev_mode, arguments.dev_nodes, arguments.disable_upnp, arguments.disable_stun_check, arguments.disable_open_browser, arguments.disable_sqlite_crypt, arguments.enable_ip_checker)) return ob_ctxs
def create_openbazaar_contexts(arguments, nat_status): """ Returns List<OpenBazaarContext>. If we are on production mode, the list will contain a single OpenBazaarContext object based on the arguments passed. If a configuration file is passed, settings from the configuration file will be read first, and whatever other parameters have been passed via the command line will override the settings on the configuration file. :rtype : list of [OpenBazaarContext] """ defaults = OpenBazaarContext.get_defaults() server_ip = arguments.server_ip # "I'll purposefully leave these seemingly useless Schlemiel-styled # comments as visual separators to denote the beginning and end of # these ifs statements. They're actually nice to have when maintaining # so many ifs blocks. Feel free to remove post merge if they truly # annoy you." -Gubatron :) # market port server_port = arguments.server_port if nat_status is not None and not arguments.disable_stun_check: # unless --disable-stun-check has been passed # override the server ip and port for p2p communications with the ones # obtained from the STUN server. print nat_status server_ip = nat_status['external_ip'] server_port = nat_status['external_port'] # log path (requires log_dir to exist) if not os.path.exists(defaults['log_dir']): os.makedirs(defaults['log_dir'], 0o755) # db path if not os.path.exists(defaults['db_dir']): os.makedirs(defaults['db_dir'], 0o755) db_path = os.path.join(defaults['db_dir'], defaults['db_file']) if arguments.db_path != db_path: db_path = arguments.db_path ob_ctxs = [] if not arguments.dev_mode: log_file = defaults['log_file'] log_path = os.path.join(defaults['log_dir'], log_file) if arguments.log != log_path: log_path = arguments.log seed_tuples = [] for seed in arguments.seeds: if not isinstance(seed, tuple): seed_split = seed.split(':') seed_tuples.append((seed_split[0], seed_split[1])) else: seed_tuples.append(seed) # we return a list of a single element, a production node. ob_ctxs.append( OpenBazaarContext( nat_status, server_ip, server_port, arguments.http_ip, arguments.http_port, db_path, log_path, arguments.log_level, arguments.market_id, arguments.bm_user, arguments.bm_pass, arguments.bm_port, arguments.mediator_port, arguments.mediator, seed_tuples, arguments.seed_mode, arguments.dev_mode, arguments.dev_nodes, arguments.disable_upnp, arguments.disable_stun_check, arguments.disable_open_browser, arguments.disable_sqlite_crypt, arguments.enable_ip_checker)) else: # Create an OpenBazaarContext object for each development node. db_path = os.path.join(defaults['db_dir'], 'this_will_be_ignored') db_dirname = os.path.dirname(db_path) for i in range(arguments.dev_nodes): db_dev_filename = defaults['dev_db_file'].format(i) db_path = os.path.join(db_dirname, db_dev_filename) log_file = defaults['dev_log_file'] dev_log_file = log_file.format(i) log_path = os.path.join(defaults['log_dir'], dev_log_file) http_port = arguments.http_port if http_port != 0: http_port += i if i: seed_mode = False seeds = [(server_ip, server_port)] else: seed_mode = True seeds = [] ob_ctxs.append( OpenBazaarContext( nat_status, server_ip, server_port + i, arguments.http_ip, http_port, db_path, log_path, arguments.log_level, arguments.market_id, arguments.bm_user, arguments.bm_pass, arguments.bm_port, arguments.mediator_port + i, arguments.mediator, seeds, seed_mode, arguments.dev_mode, arguments.dev_nodes, arguments.disable_upnp, arguments.disable_stun_check, arguments.disable_open_browser, arguments.disable_sqlite_crypt, arguments.enable_ip_checker)) return ob_ctxs
def get_mock_open_bazaar_context(): return OpenBazaarContext.create_default_instance()
def setUp(self): self.default_ctx = OpenBazaarContext.create_default_instance()