- main
- manifest
- deps
- main
- Install
- Run
use fastly::{Error, Request, Response};
use std::net::IpAddr;
const KEEP_IPV4_BYTES: usize = 3;
const KEEP_IPV6_BYTES: usize = 6;
#[fastly::main]
fn main(req: Request) -> Result<Response, Error> {
log_fastly::init_simple("mylogs", log::LevelFilter::Info);
if let Some(ip) = req.get_client_ip_addr() {
let anon = anonymize(&ip);
log::info!("IP {} anonymized to {}", ip, anon);
} else {
log::info!("could not find client ip");
}
Ok(Response::new())
}
fn anonymize(ip: &IpAddr) -> IpAddr {
match ip {
IpAddr::V4(ip) => {
let mut o = ip.octets();
o[KEEP_IPV4_BYTES..].copy_from_slice(&[0; 4 - KEEP_IPV4_BYTES]);
IpAddr::V4(o.into())
}
IpAddr::V6(ip) => {
let mut o = ip.octets();
o[KEEP_IPV6_BYTES..].copy_from_slice(&[0; 16 - KEEP_IPV6_BYTES]);
IpAddr::V6(o.into())
}
}
}