diff --git a/Cargo.lock b/Cargo.lock index 7d0f3e6..967bb63 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -70,7 +70,7 @@ dependencies = [ [[package]] name = "actix-remote-ip" -version = "0.1.0-alpha" +version = "0.1.0" dependencies = [ "actix-web", "futures-util", diff --git a/Cargo.toml b/Cargo.toml index 2059ca2..e918acb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "actix-remote-ip" -version = "0.1.0-alpha" +version = "0.1.0" edition = "2021" authors = ["Pierre HUBERT "] description = "Tiny extractor to get real client IP address, parsing X-Forwarded-For header" diff --git a/README.md b/README.md index 3822334..967ec6a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,30 @@ # Actix Remote IP extractor -Tiny extractor of remote user IP address +Tiny extractor of remote user IP address, that handles reverse proxy. + +The `X-Forwarded-For` header is automatically parsed when the request comes from a defined proxy, to determine the real remote client IP Address. + +Note : regarding IPv6 addresses, the local part of the address is discarded. For example, the IPv6 client `2001:0db8:85a3:0000:0000:8a2e:0370:7334` will be returned as `2001:0db8:85a3:0000:0000:0000:0000:0000` + +## Configuration +Configure it when you configure your Actix server: + +```rust +HttpServer::new(move || { + App::new() + .app_data(web::Data::new(RemoteIPConfig { + proxy: Some("IP".to_string()) + })) + // ... +}) +``` + +## Usage +In your route, add a `RemoteIP` parameter: + +```rust +#[get("/")] +async fn home(remote_ip: RemoteIP) -> HttpResponse { + let ip: IpAddr = remote_ip.0; + // ... +} +``` \ No newline at end of file