Skip to main content

IdentityHook

Struct IdentityHook 

Source
pub struct IdentityHook;
Expand description

Identity-resolve hook.

Payload (IdentityPayload) — unified input + accumulator. The host populates the input fields (raw_token, source, headers, …) once at request entry and never touches them again; handlers populate the output fields (subject, client, caller_workload, delegation, raw_credentials, rejected, …) on clones of the running payload. Input fields are private and read through accessors — handlers cannot mutate them even on a clone, so the wire-layer input is canonical across the whole chain.

Result (PluginResult<IdentityPayload>) — the executor’s standard envelope. modified_payload carries the updated payload. continue_processing = false halts the pipeline (set when the handler decides to reject).

Threading. Sequential-phase semantics already thread handler N’s modified_payload into handler N+1’s input, so the chain’s natural behavior is “each handler sees the prior handler’s contributions in the running payload.” No bespoke resolve_identity method on PluginManager — the standard invoke_named::<IdentityHook>(...) does the right thing.

Handler signature:

impl HookHandler<IdentityHook> for MyResolver {
    async fn handle(
        &self,
        payload: &IdentityPayload,
        _extensions: &Extensions,
        _ctx: &mut PluginContext,
    ) -> PluginResult<IdentityPayload> {
        // Validate the raw token, build the SubjectExtension.
        let claims = self.validate(payload.raw_token()).await?;
        let mut updated = payload.clone();
        updated.subject = Some(claims.into_subject());
        PluginResult::modify_payload(updated)
    }
}

Handlers that want to layer onto prior state without manually preserving every untouched field reach for IdentityPayload::merge.

Registration: manager.register_handler::<IdentityHook, _>(plugin, config) against the hook name "identity.resolve". Multiple handlers may register; the framework runs them in priority order and the Sequential-phase chain accumulates their contributions into the running payload.

Trait Implementations§

Source§

impl HookTypeDef for IdentityHook

Source§

const NAME: &'static str = "identity.resolve"

Hook name — used as the registry key and in config YAML. Read more
Source§

type Payload = IdentityPayload

The typed payload that handlers receive. Must implement PluginPayload (Clone + Send + Sync + ’static).
Source§

type Result = PluginResult<IdentityPayload>

The typed result that handlers return.

Auto Trait Implementations§

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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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