126 {
128 rpc_args config{};
129
131 if (!config.bind_ip.empty())
132 {
133
134 boost::system::error_code ec{};
135 const auto parsed_ip = boost::asio::ip::address::from_string(config.bind_ip, ec);
136 if (ec)
137 {
138 LOG_ERROR(
tr(
"Invalid IP address given for --") << arg.rpc_bind_ip.name);
139 return boost::none;
140 }
141
143 {
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
148 );
149 return boost::none;
150 }
151 }
152
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)
158 {
160 has_rpc_arg ?
command_line::get_arg(vm, arg.rpc_login) : std::string(env_rpc_login),
true, [](
bool verify) {
161 return tools::password_container::prompt(verify, "RPC server password");
162 });
163
164 if (!config.login)
165 return boost::none;
166
167 if (config.login->username.empty())
168 {
169 LOG_ERROR(
tr(
"Username specified with --") << arg.rpc_login.name <<
tr(
" cannot be empty"));
170 return boost::none;
171 }
172 }
173
175 if (!access_control_origins_input.empty())
176 {
177 if (!config.login)
178 {
179 LOG_ERROR(arg.rpc_access_control_origins.name <<
tr(
" requires RPC server password --") << arg.rpc_login.name <<
tr(
" cannot be empty"));
180 return boost::none;
181 }
182
187 }
188
189 auto ssl_options = do_process_ssl(vm, arg, any_cert_option);
191 return boost::none;
193
194 return {std::move(config)};
195 }
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)
T get_arg(const boost::program_options::variables_map &vm, const arg_descriptor< T, false, true > &arg)
epee::net_utils::ssl_options_t ssl_options
std::vector< std::string > access_control_origins
static const char * tr(const char *str)
boost::optional< tools::login > login