mirror of
https://github.com/actix/actix-extras.git
synced 2025-02-08 21:06:07 +01:00
* Add IdentityError to actix-identity crate. In order to let crates in the actix web ecosystem interact correctly with `actix_web::Error`, this commit introduces its own error type, replacing the previous usage of `anyhow::Error`. * Mend some clippy warnings on IdentityError. * Split identity error into more granular versions. - `MissingIdentityError` occurs whenever we attempt to gather information about an identity from a session, and fail. - `LoginError` occurs whenever we attempt to login via an identity, and fail. * Feedback for identity error implementation. - `IdentityError` -> `GetIdentityError` - Move error messages into Display impl where appropriate - Split `id` and `get_identity` errors into two types - Implement `source` on custom errors * Expand identity error types with struct markers. In order to get a little more future compatibility and reduce abstraction leaking, this commit introduces some contextual structs to our identity errors package. * Improve doc message for SessionExpiryError. Co-authored-by: Luca Palmieri <20745048+LukeMathWalker@users.noreply.github.com> * Improve identity error docs and messaging. Co-authored-by: Luca Palmieri <20745048+LukeMathWalker@users.noreply.github.com> * Expand LostIdentityError with placeholder. Adds a placeholder unit struct to the LostIdentityError variant of GetIdentityError, which should let us expand on that variant with extra context later if we like. * Add From coercion for LostIdentityError. Improve the ergonomics of using the LostIdentityError unit struct. * Update Cargo.toml * Update CHANGES.md * expose identity error module * fix error impl Co-authored-by: Luca Palmieri <20745048+LukeMathWalker@users.noreply.github.com> Co-authored-by: Rob Ede <robjtede@icloud.com>
28 lines
873 B
Rust
28 lines
873 B
Rust
use actix_web::{dev::ServiceRequest, guard::GuardContext, HttpMessage, HttpRequest};
|
|
|
|
use crate::{error::GetIdentityError, Identity};
|
|
|
|
/// Helper trait to retrieve an [`Identity`] instance from various `actix-web`'s types.
|
|
pub trait IdentityExt {
|
|
/// Retrieve the identity attached to the current session, if available.
|
|
fn get_identity(&self) -> Result<Identity, GetIdentityError>;
|
|
}
|
|
|
|
impl IdentityExt for HttpRequest {
|
|
fn get_identity(&self) -> Result<Identity, GetIdentityError> {
|
|
Identity::extract(&self.extensions())
|
|
}
|
|
}
|
|
|
|
impl IdentityExt for ServiceRequest {
|
|
fn get_identity(&self) -> Result<Identity, GetIdentityError> {
|
|
Identity::extract(&self.extensions())
|
|
}
|
|
}
|
|
|
|
impl<'a> IdentityExt for GuardContext<'a> {
|
|
fn get_identity(&self) -> Result<Identity, GetIdentityError> {
|
|
Identity::extract(&self.req_data())
|
|
}
|
|
}
|