use std::net::SocketAddr;
use crate::config::types::ServerConfig;
pub(super) fn validate_open_mode(config: &ServerConfig, errors: &mut Vec<String>) {
if config.auth.is_some() {
return;
}
refuse_off_loopback("listen_address", config.listen_address, errors);
for (index, address) in config.extra_listen_addresses.iter().enumerate() {
refuse_off_loopback(
&format!("extra_listen_addresses[{index}]"),
*address,
errors,
);
}
if let Some(websocket) = config.websocket.as_ref() {
refuse_off_loopback("websocket.listen_address", websocket.listen_address, errors);
}
}
fn refuse_off_loopback(field: &str, address: SocketAddr, errors: &mut Vec<String>) {
if address.ip().is_loopback() {
return;
}
errors.push(format!(
"open mode (no [auth]): {field} {address} is not loopback; an exchange with no [auth] \
listens on loopback only, give [auth] to listen elsewhere"
));
}