pub struct ClientIpConfig { /* private fields */ }Expand description
Settings that decide how a client IP is resolved from a request.
A config uses exactly one trust model, picked as the first step of ClientIpConfig::builder.
- Trust no proxy: no header is read, and every request resolves to the socket peer IP.
- Trusted proxies: headers are read only when the socket peer IP is inside one of the trusted CIDRs.
- Trust all proxies: every socket peer is treated as a trusted proxy.
The default config trusts no proxy.
The crate::ClientIp request guard reads this config out of Rocket’s managed state, so a built config has to be passed to rocket::build().manage(config).
Implementations§
Source§impl ClientIpConfig
impl ClientIpConfig
Sourcepub const fn builder() -> ClientIpConfigBuilder
pub const fn builder() -> ClientIpConfigBuilder
Start building a config by choosing a trust model.
Sourcepub fn trusted_proxy_rules(&self) -> &[TrustedProxyRule]
pub fn trusted_proxy_rules(&self) -> &[TrustedProxyRule]
Return the trusted proxy rules, as they look after build-time merging.
This is empty unless the config was built with trusted proxy CIDRs.
Sourcepub fn chain_header_order(&self) -> &[ChainHeader]
pub fn chain_header_order(&self) -> &[ChainHeader]
Return the chain headers in the order they are tried.
This is empty when the config trusts no proxy, because no header is read at all.
Sourcepub const fn trust_all_proxy_mode(&self) -> Option<&TrustAllProxyMode>
pub const fn trust_all_proxy_mode(&self) -> Option<&TrustAllProxyMode>
Return the trust-all proxy settings, if that trust model is in use.
Sourcepub const fn trusts_all_proxies(&self) -> bool
pub const fn trusts_all_proxies(&self) -> bool
Check whether this config treats every socket peer as a trusted proxy.
Sourcepub const fn trusts_no_proxy(&self) -> bool
pub const fn trusts_no_proxy(&self) -> bool
Check whether this config reads no header at all and always answers with the socket peer IP.
Sourcepub fn is_trusted_proxy(&self, ip: IpAddr) -> bool
pub fn is_trusted_proxy(&self, ip: IpAddr) -> bool
Check whether an address is treated as a trusted proxy.
An IPv4-mapped IPv6 address is matched by its IPv4 form, on both sides of the comparison. A trusted proxy CIDR written as ::ffff:10.0.0.0/120 is rewritten to 10.0.0.0/24 while the config is built, so it matches the same addresses an IPv4 CIDR would. For the same reason an IPv6 CIDR such as ::/0 never matches an IPv4 peer, so both address families need their own CIDR.
This is always true in trust-all proxy mode, and always false when no proxy is trusted.
Source§impl ClientIpConfig
impl ClientIpConfig
Sourcepub fn resolve_client_ip(
&self,
headers: &HeaderMap<'_>,
peer_ip: IpAddr,
) -> ClientIp
pub fn resolve_client_ip( &self, headers: &HeaderMap<'_>, peer_ip: IpAddr, ) -> ClientIp
Resolve the client IP of a request from its headers and its socket peer IP.
Use this when the request does not come from Rocket, or when the ClientIp request guard is not convenient. The crate-level docs describe the full order in which the answer is chosen.
Trait Implementations§
Source§impl Clone for ClientIpConfig
impl Clone for ClientIpConfig
Source§fn clone(&self) -> ClientIpConfig
fn clone(&self) -> ClientIpConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ClientIpConfig
impl Debug for ClientIpConfig
Source§impl Default for ClientIpConfig
impl Default for ClientIpConfig
impl Eq for ClientIpConfig
Source§impl Hash for ClientIpConfig
impl Hash for ClientIpConfig
Source§impl PartialEq for ClientIpConfig
impl PartialEq for ClientIpConfig
impl StructuralPartialEq for ClientIpConfig
Auto Trait Implementations§
impl Freeze for ClientIpConfig
impl RefUnwindSafe for ClientIpConfig
impl Send for ClientIpConfig
impl Sync for ClientIpConfig
impl Unpin for ClientIpConfig
impl UnsafeUnpin for ClientIpConfig
impl UnwindSafe for ClientIpConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoCollection<T> for T
impl<T> IntoCollection<T> for T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);