summaryrefslogtreecommitdiff
path: root/src/token/extract
diff options
context:
space:
mode:
authorKit La Touche <kit@transneptune.net>2025-02-21 22:18:56 -0500
committerKit La Touche <kit@transneptune.net>2025-02-21 22:53:49 -0500
commit9d1dbac74866a6175c65a25bbd8a3ccbe8cf87e4 (patch)
treef15b3f0695b948e335774aa4d92a5b064a1c0f10 /src/token/extract
parent743b59b69857da81b214970ec9252bc918ad243d (diff)
parent36cadfe00cacc6a6523f9862d3f7a08a9d0ce611 (diff)
Merge branch 'main' into prop/preserve-state
Diffstat (limited to 'src/token/extract')
-rw-r--r--src/token/extract/cookie.rs3
-rw-r--r--src/token/extract/identity.rs18
2 files changed, 17 insertions, 4 deletions
diff --git a/src/token/extract/cookie.rs b/src/token/extract/cookie.rs
index af5787d..a8e15d4 100644
--- a/src/token/extract/cookie.rs
+++ b/src/token/extract/cookie.rs
@@ -25,7 +25,7 @@ impl fmt::Debug for Identity {
}
impl Identity {
- const COOKIE_NAME: &str = "identity";
+ const COOKIE_NAME: &'static str = "identity";
// Creates a new, unpopulated identity token store.
#[cfg(test)]
@@ -71,7 +71,6 @@ impl Identity {
}
}
-#[async_trait::async_trait]
impl<S> FromRequestParts<S> for Identity
where
S: Send + Sync,
diff --git a/src/token/extract/identity.rs b/src/token/extract/identity.rs
index a69f509..acfd7ae 100644
--- a/src/token/extract/identity.rs
+++ b/src/token/extract/identity.rs
@@ -1,5 +1,5 @@
use axum::{
- extract::{FromRequestParts, State},
+ extract::{FromRequestParts, OptionalFromRequestParts, State},
http::request::Parts,
response::{IntoResponse, Response},
};
@@ -20,7 +20,6 @@ pub struct Identity {
pub login: Login,
}
-#[async_trait::async_trait]
impl FromRequestParts<App> for Identity {
type Rejection = LoginError<Internal>;
@@ -39,6 +38,21 @@ impl FromRequestParts<App> for Identity {
}
}
+impl OptionalFromRequestParts<App> for Identity {
+ type Rejection = LoginError<Internal>;
+
+ async fn from_request_parts(
+ parts: &mut Parts,
+ state: &App,
+ ) -> Result<Option<Self>, Self::Rejection> {
+ match <Self as FromRequestParts<App>>::from_request_parts(parts, state).await {
+ Ok(identity) => Ok(Some(identity)),
+ Err(LoginError::Unauthorized) => Ok(None),
+ Err(other) => Err(other),
+ }
+ }
+}
+
pub enum LoginError<E> {
Failure(E),
Unauthorized,