nullnet-wallguard-server 0.2.0

A centralized management system for network firewalls
Documentation
use axum::{http::StatusCode, Json};
use if_addrs::get_if_addrs;
use serde::Serialize;
use std::net::IpAddr;

#[derive(Serialize)]
pub(crate) struct AddrInfo {
    pub address: String,
    pub version: u8,
}

#[derive(Serialize)]
pub(crate) struct GetAddrResponse {
    pub values: Vec<AddrInfo>,
}

pub async fn get_addr() -> (StatusCode, Json<GetAddrResponse>) {
    let mut response = GetAddrResponse { values: vec![] };

    if let Ok(interfaces) = get_if_addrs() {
        for iface in interfaces {
            if iface.is_loopback() {
                continue;
            }

            match iface.ip() {
                IpAddr::V4(ipv4_addr) => response.values.push(AddrInfo {
                    address: ipv4_addr.to_string(),
                    version: 4,
                }),
                IpAddr::V6(ipv6_addr) => response.values.push(AddrInfo {
                    address: ipv6_addr.to_string(),
                    version: 6,
                }),
            };
        }
    }

    (StatusCode::OK, Json(response))
}