127 const descriptors arg{};
131 if (!
config.bind_ip.empty())
134 boost::system::error_code ec{};
135 const auto parsed_ip = boost::asio::ip::address::from_string(
config.bind_ip, ec);
138 LOG_ERROR(
tr(
"Invalid IP address given for --") << arg.rpc_bind_ip.name);
145 "--" << arg.rpc_bind_ip.name <<
146 tr(
" permits inbound unencrypted external connections. Consider SSH tunnel or SSL proxy instead. Override with --") <<
147 arg.confirm_external_bind.name
153 const char *env_rpc_login =
nullptr;
155 const bool use_rpc_env = !has_rpc_arg && (env_rpc_login = getenv(
"RPC_LOGIN")) !=
nullptr && strlen(env_rpc_login) > 0;
156 boost::optional<tools::login>
login{};
157 if (has_rpc_arg || use_rpc_env)
161 return tools::password_container::prompt(verify,
"RPC server password");
167 if (
config.login->username.empty())
169 LOG_ERROR(
tr(
"Username specified with --") << arg.rpc_login.name <<
tr(
" cannot be empty"));
175 if (!access_control_origins_input.empty())
179 LOG_ERROR(arg.rpc_access_control_origins.name <<
tr(
" requires RPC server password --") << arg.rpc_login.name <<
tr(
" cannot be empty"));
189 auto ssl_options = do_process_ssl(vm, arg, any_cert_option);
std::vector< std::string > access_control_origins
static const char * tr(const char *str)
std::enable_if<!std::is_same< T, bool >::value, bool >::type has_arg(const boost::program_options::variables_map &vm, const arg_descriptor< T, required, dependent, NUM_DEPS > &arg)
epee::net_utils::ssl_options_t ssl_options
const T & move(const T &t)
boost::optional< tools::login > login
T get_arg(const boost::program_options::variables_map &vm, const arg_descriptor< T, false, true > &arg)