Skip to main content

WebhookSignature

Struct WebhookSignature 

Source
pub struct WebhookSignature;
Expand description

Helper for constructing signature configurations.

Use in webhook attributes like:

#[forge::webhook(
    signature = WebhookSignature::hmac_sha256("X-Stripe-Signature", "STRIPE_SECRET"),
)]

Implementations§

Source§

impl WebhookSignature

Source

pub const fn hmac_sha256( header: &'static str, secret_env: &'static str, ) -> SignatureConfig

Create HMAC-SHA256 signature config.

§Arguments
  • header - The HTTP header containing the signature (e.g., “X-Hub-Signature-256”)
  • secret_env - Environment variable containing the secret
Source

pub const fn hmac_sha1( header: &'static str, secret_env: &'static str, ) -> SignatureConfig

Create HMAC-SHA1 signature config.

§Arguments
  • header - The HTTP header containing the signature
  • secret_env - Environment variable containing the secret
Source

pub const fn hmac_sha512( header: &'static str, secret_env: &'static str, ) -> SignatureConfig

Create HMAC-SHA512 signature config.

§Arguments
  • header - The HTTP header containing the signature
  • secret_env - Environment variable containing the secret
Source

pub const fn standard_webhooks(secret_env: &'static str) -> SignatureConfig

Create a Standard Webhooks signature config (https://www.standardwebhooks.com).

Used by Polar and other services that implement the Standard Webhooks spec. The signature header is always webhook-signature; no need to specify it.

The secret may have a whsec_ or polar_whs_ prefix — both are stripped and the remainder is base64-decoded to obtain the raw HMAC key.

§Arguments
  • secret_env - Environment variable containing the webhook secret
Source

pub const fn stripe_webhooks(secret_env: &'static str) -> SignatureConfig

Create a Stripe webhook signature config.

Signs {timestamp}.{body} with HMAC-SHA256. The Stripe-Signature header carries both the timestamp (t=) and one or more signatures (v1=). Requests older than 5 minutes are rejected to guard against replay attacks.

§Arguments
  • secret_env - Environment variable containing the Stripe webhook signing secret
Source

pub const fn shopify_webhooks(secret_env: &'static str) -> SignatureConfig

Create a Shopify webhook signature config.

HMAC-SHA256 over the raw body, base64-encoded. The signature arrives in the X-Shopify-Hmac-Sha256 header.

§Arguments
  • secret_env - Environment variable containing the Shopify webhook secret
Source

pub const fn ed25519( header: &'static str, public_key_env: &'static str, ) -> SignatureConfig

Create an Ed25519 asymmetric signature config.

The service signs the request body with an Ed25519 private key and publishes the matching public key for you to verify with. The public_key_env variable should hold the base64-encoded 32-byte Ed25519 public key.

§Arguments
  • header - The HTTP header containing the base64-encoded signature
  • public_key_env - Environment variable containing the base64-encoded public key

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: 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: 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 = 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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