allowlist-rs 0.1.0

Validate requests against a list of known IPv4 host addresses
Documentation
use std::{collections::HashMap, sync::{Mutex}};
use once_cell::sync::Lazy;
use allowlist_rs::sources::{is_src_valid, SourceAddresses};

static GLOBAL_DATA: Lazy<Mutex<HashMap<String, String>>> = Lazy::new(|| {
    let mut m = HashMap::new();
    m.insert("local".to_string(), "0.0.0.0".to_string());
    m.insert("dev".to_string(), "localhost".to_string());
    m.insert("stripe_hook".to_string(), "3.130.192.231".to_string());
    m.insert("stripe_global".to_string(), "198.202.176.173".to_string());
    Mutex::new(m)
});

#[test]
fn test_lib_webhook_sources() {
    let local = GLOBAL_DATA.lock().unwrap().get("local").unwrap().to_string();
    let hook = GLOBAL_DATA.lock().unwrap().get("stripe_hook").unwrap().to_string();

    let addresses = match SourceAddresses::new("data/stripe_webhook_sources.txt") {
        Some(addrs) => addrs,
        None => panic!("error loading source addresses from path")
    };
    let invalid_src = is_src_valid(&addresses, &local);
    let valid_src = is_src_valid(&addresses, &hook);
    assert_eq!(valid_src, true);
    assert_eq!(invalid_src, false);
}

#[test]
fn test_lib_global_sources() {
    let local = GLOBAL_DATA.lock().unwrap().get("local").unwrap().to_string();
    let global = GLOBAL_DATA.lock().unwrap().get("stripe_global").unwrap().to_string();

    let addresses = match SourceAddresses::new("data/stripe_global_sources.txt") {
        Some(addrs) => addrs,
        None => panic!("error loading source addresses from path")
    };
    let invalid_src = is_src_valid(&addresses, &local);
    let valid_src = is_src_valid(&addresses, &global);
    assert_eq!(valid_src, true);
    assert_eq!(invalid_src, false);
}

#[test]
fn test_lib_dev_sources() {
    let dev = GLOBAL_DATA.lock().unwrap().get("dev").unwrap().to_string();
    let global = GLOBAL_DATA.lock().unwrap().get("stripe_global").unwrap().to_string();

    let addresses = match SourceAddresses::new("data/dev_sources.txt") {
        Some(addrs) => addrs,
        None => panic!("error loading source addresses from path")
    };
    let invalid_src = is_src_valid(&addresses, &global);
    let valid_src = is_src_valid(&addresses, &dev);
    assert_eq!(valid_src, true);
    assert_eq!(invalid_src, false);
}