pub const MESH_SUBNET: &str = "100.64.0.0/10";
pub const TAILSCALE_IFACE: &str = "tailscale0";
pub const MESH_IP_ENV_FILE: &str = "/etc/yah-cloud/mesh-ip.env";
pub fn pg_hba_snippet(mesh_subnet: &str) -> String {
format!(
"# pg_hba.conf — mesh subnet ({mesh_subnet})\n\
# Allow app connections from any mesh peer (WireGuard-encrypted on the wire).\n\
host all all {mesh_subnet} scram-sha-256\n\
# Allow replication from any mesh peer (streaming replica sync).\n\
host replication all {mesh_subnet} scram-sha-256\n",
)
}
pub fn ufw_rules_for_mesh_port(iface: &str, port: u16) -> Vec<String> {
vec![
format!("ufw allow in on {iface} to any port {port}"),
format!("ufw deny {port}"),
]
}
pub fn mesh_ip_env_runcmd() -> Vec<String> {
vec![format!(
"sh -c 'echo \"POSTGRES_LISTEN_ADDRESSES=$(tailscale ip --4)\" > {MESH_IP_ENV_FILE}'"
)]
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn pg_hba_snippet_contains_mesh_subnet() {
let s = pg_hba_snippet(MESH_SUBNET);
assert!(s.contains(MESH_SUBNET), "subnet missing from snippet");
assert!(s.contains("scram-sha-256"), "auth method missing");
assert!(s.contains("replication"), "replication row missing");
assert!(s.contains("host all"), "app-user row missing");
}
#[test]
fn pg_hba_snippet_custom_subnet() {
let s = pg_hba_snippet("10.0.0.0/8");
assert!(s.contains("10.0.0.0/8"));
assert!(!s.contains(MESH_SUBNET));
}
#[test]
fn ufw_rules_for_mesh_port_produces_two_commands() {
let rules = ufw_rules_for_mesh_port("tailscale0", 5432);
assert_eq!(rules.len(), 2);
assert_eq!(rules[0], "ufw allow in on tailscale0 to any port 5432");
assert_eq!(rules[1], "ufw deny 5432");
}
#[test]
fn ufw_rules_allow_before_deny() {
let rules = ufw_rules_for_mesh_port(TAILSCALE_IFACE, 5432);
assert!(rules[0].starts_with("ufw allow"), "allow must be first");
assert!(rules[1].starts_with("ufw deny"), "deny must be second");
}
#[test]
fn ufw_rules_for_arbitrary_port() {
let rules = ufw_rules_for_mesh_port("tailscale0", 4222);
assert!(rules[0].contains("4222"));
assert!(rules[1].contains("4222"));
}
#[test]
fn mesh_ip_env_runcmd_references_env_file_path() {
let cmds = mesh_ip_env_runcmd();
assert_eq!(cmds.len(), 1);
assert!(cmds[0].contains(MESH_IP_ENV_FILE));
assert!(cmds[0].contains("tailscale ip --4"));
}
}