#[non_exhaustive]pub struct RequestParts<'a> {
pub method: &'a Method,
pub path: &'a str,
pub query: Option<&'a str>,
pub headers: &'a HeaderMap,
pub client: &'a ClientAddress,
}Expand description
Borrowed view of an incoming request, passed to an AuthDecider.
All fields borrow from the live request: building this is allocation-free, so the per-request gate stays cheap. The body is intentionally absent: an auth decision is taken from method, path, query, headers, and client alone.
§Examples
use structured_proxy::hooks::RequestParts;
use structured_proxy::ClientAddress;
// The view a decider's own tests build.
let client = ClientAddress::from_peer(Some("203.0.113.7:51234".parse().unwrap()));
let headers = http::HeaderMap::new();
let parts = RequestParts::new(&http::Method::GET, "/v1/things", None, &headers, &client);
assert_eq!(parts.client.ip(), Some("203.0.113.7".parse().unwrap()));Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.method: &'a MethodRequest method (the original method on the /verify path, recovered
from the fronting proxy’s forwarding headers).
path: &'a strRequest path, query stripped.
query: Option<&'a str>Raw query string, if any (without the leading ?).
headers: &'a HeaderMapRequest headers, with the forwarding headers as the
client_address.forward policy wrote them for the upstream. With the
default policy they hold only verified data; with append or
preserve, X-Forwarded-For (and with preserve, X-Real-IP) still
carries what the client sent. Decide on client, never
on these headers.
client: &'a ClientAddressThe client address the proxy resolved, with the connection’s peer (the client, or the fronting proxy): the one to authorize on, whatever the forwarding policy.
Implementations§
Trait Implementations§
Auto Trait Implementations§
impl<'a> Freeze for RequestParts<'a>
impl<'a> RefUnwindSafe for RequestParts<'a>
impl<'a> Send for RequestParts<'a>
impl<'a> Sync for RequestParts<'a>
impl<'a> Unpin for RequestParts<'a>
impl<'a> UnsafeUnpin for RequestParts<'a>
impl<'a> UnwindSafe for RequestParts<'a>
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> 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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request