Skip to main content

RequestParts

Struct RequestParts 

Source
#[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
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§method: &'a Method

Request method (the original method on the /verify path, recovered from the fronting proxy’s forwarding headers).

§path: &'a str

Request path, query stripped.

§query: Option<&'a str>

Raw query string, if any (without the leading ?).

§headers: &'a HeaderMap

Request 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 ClientAddress

The 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§

Source§

impl<'a> RequestParts<'a>

Source

pub fn new( method: &'a Method, path: &'a str, query: Option<&'a str>, headers: &'a HeaderMap, client: &'a ClientAddress, ) -> Self

The view of a request: what the proxy hands a decider, and what a decider’s own tests build.

Trait Implementations§

Source§

impl<'a> Debug for RequestParts<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more