- main
- manifest
- deps
- main
- Install
- Run
use fastly::{Error, Request, Response};
use std::net::{IpAddr, Ipv4Addr};
const BACKEND_NAME: &str = "origin_0";
#[fastly::main]
fn main(mut req: Request) -> Result<Response, Error> {
let client_ip_opt = Request::get_client_ip_addr(&req);
if let Some(ip) = client_ip_opt {
let ip_v4 = get_ipv4(&ip);
req.set_header("x-ipv4", ip_v4.to_string());
}
Ok(req.send(BACKEND_NAME)?)
}
fn get_ipv4(ip: &IpAddr) -> IpAddr {
match ip {
IpAddr::V4(ip) => IpAddr::V4(*ip),
IpAddr::V6(ip) => {
let digest = md5::compute(ip.octets());
IpAddr::V4(Ipv4Addr::new(
0xf0 | digest[0],
digest[1],
digest[2],
digest[3],
))
}
}
}