Skip to main content

XMatrix

Struct XMatrix 

Source
#[non_exhaustive]
pub struct XMatrix { pub origin: OwnedServerName, pub destination: Option<OwnedServerName>, pub key: OwnedServerSigningKeyId, pub sig: Base64, }
Available on crate features client or server only.
Expand description

Typed representation of an X-Matrix authentication scheme, as defined in the Matrix Server-Server API.

This is a scheme used in an Authorization HTTP header, as defined in RFC 7235.

It can be extracted from an incoming HTTP request using XMatrix::parse() or XMatrix::extract_from_http_headers(). The HTTP request should then be verified with XMatrix::verify_http_request().

It can also be generated by signing an outgoing request with XMatrix::sign_http_request().

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.
§origin: OwnedServerName

The server name of the sending server.

§destination: Option<OwnedServerName>

The server name of the receiving sender.

For compatibility with older servers, recipients should accept requests without this parameter, but MUST always send it. If this property is included, but the value does not match the receiving server’s name, the receiving server must deny the request with a 401 Unauthorized HTTP status code.

§key: OwnedServerSigningKeyId

The ID - including the algorithm name - of the sending server’s key that was used to sign the request.

§sig: Base64

The signature of the canonical JSON request object.

Implementations§

Source§

impl XMatrix

Source

pub const AUTH_SCHEME: &'static str = "X-Matrix"

The auth-scheme token used to identify the X-Matrix authentication scheme in the Authorization HTTP header.

Source

pub fn new( origin: OwnedServerName, destination: OwnedServerName, key: OwnedServerSigningKeyId, sig: Base64, ) -> Self

Construct a new X-Matrix authentication scheme from its parts.

Source

pub fn parse(s: impl AsRef<str>) -> Result<Self, XMatrixParseError>

Parse an X-Matrix authentication scheme from the given string.

The string should be the value of an Authorization HTTP header.

§Errors

Returns an error if the scheme could not be parsed.

Source

pub fn extract_from_http_headers( headers: &HeaderMap, ) -> Result<Self, XMatrixExtractError>

Try to extract an X-Matrix authentication scheme from the given HTTP headers.

§Errors

Returns an error if the Authorization header is not found in the map, or if the scheme could not be parsed.

Source

pub fn request_object<T: AsRef<[u8]>>( request: &Request<T>, origin: &ServerName, destination: &ServerName, ) -> Result<CanonicalJsonObject, Error>

Construct the canonical JSON object representation to sign to generate or verify the X-Matrix authentication scheme for the given request, with the given origin and destination.

§Errors

Returns an error if the body of the request could not be serialized to canonical JSON.

Source

pub fn sign_http_request<T: AsRef<[u8]>>( request: &Request<T>, input: XMatrixSigningInput<'_>, ) -> Result<Self, XMatrixFromRequestError>

Try to generate an X-Matrix authentication scheme by signing the given HTTP request with the given signing input.

The returned scheme should be added as the value of the Authorization header of the request.

§Errors

Returns an error if the body of the request could not be serialized to canonical JSON or if the ID of the signing key pair is invalid.

Source

pub fn verify_http_request<T: AsRef<[u8]>>( &self, request: &Request<T>, destination: &ServerName, public_key_map: &PublicKeyMap, ) -> Result<(), XMatrixVerificationError>

Verify that the signature in the sig field of this X-Matrix authentication scheme is valid for the given incoming HTTP request and destination, with the given public keys map from the origin.

§Errors

Returns an error if the given destination doesn’t match the one present in the scheme, if the body of the request could not be serialized to canonical JSON, or it the verification of the signature failed.

Trait Implementations§

Source§

impl Clone for XMatrix

Source§

fn clone(&self) -> XMatrix

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for XMatrix

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Display for XMatrix

Source§

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

Formats the value using the given formatter. Read more
Source§

impl From<&XMatrix> for HeaderValue

Source§

fn from(value: &XMatrix) -> Self

Converts to this type from the input type.
Source§

impl FromStr for XMatrix

Source§

type Err = XMatrixParseError

The associated error which can be returned from parsing.
Source§

fn from_str(s: &str) -> Result<Self, Self::Err>

Parses a string s to return a value of this type. Read more
Source§

impl TryFrom<&HeaderValue> for XMatrix

Source§

type Error = XMatrixParseError

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

fn try_from(value: &HeaderValue) -> Result<Self, Self::Error>

Performs the conversion.

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DropFlavorWrapper<T> for T

Source§

type Flavor = MayDrop

The DropFlavor that wraps T into Self
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, UT> HandleAlloc<UT> for T
where T: Send + Sync,

§

fn new_handle(value: Arc<T>) -> Handle

Create a new handle for an Arc value Read more
§

unsafe fn clone_handle(handle: Handle) -> Handle

Clone a handle Read more
§

unsafe fn consume_handle(handle: Handle) -> Arc<T>

Consume a handle, getting back the initial Arc<> Read more
§

unsafe fn get_arc(handle: Handle) -> Arc<Self>

Get a clone of the Arc<> using a “borrowed” handle. Read more
Source§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

Source§

const WITNESS: W = W::MAKE

A constant of the type witness
Source§

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

Source§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
Source§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
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> JsonCastable<CanonicalJsonValue> for T

Source§

impl<T> JsonCastable<Value> for T

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
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