From 1e42208e6b7ac54dac39b609dac241b591223a65 Mon Sep 17 00:00:00 2001 From: Philippe Loctaux Date: Mon, 1 May 2023 11:58:02 +0200 Subject: [PATCH] guards: added TotpRequest guard --- crates/ezidam/src/guards.rs | 4 +++- crates/ezidam/src/guards/totp_request.rs | 25 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 crates/ezidam/src/guards/totp_request.rs diff --git a/crates/ezidam/src/guards.rs b/crates/ezidam/src/guards.rs index 340d42e..0947f06 100644 --- a/crates/ezidam/src/guards.rs +++ b/crates/ezidam/src/guards.rs @@ -5,6 +5,7 @@ mod jwt; mod need_setup; mod refresh_token; mod reset_password_token; +mod totp_request; pub use self::jwt::*; pub use access_token::AccessToken; @@ -12,4 +13,5 @@ pub use basic_auth::BasicAuth; pub use completed_setup::CompletedSetup; pub use need_setup::NeedSetup; pub use refresh_token::RefreshToken; -pub use reset_password_token::RocketResetPasswordToken; \ No newline at end of file +pub use reset_password_token::RocketResetPasswordToken; +pub use totp_request::TotpRequest; diff --git a/crates/ezidam/src/guards/totp_request.rs b/crates/ezidam/src/guards/totp_request.rs new file mode 100644 index 0000000..16cd50f --- /dev/null +++ b/crates/ezidam/src/guards/totp_request.rs @@ -0,0 +1,25 @@ +use rocket::request::{FromRequest, Outcome}; +use rocket::Request; +use users::totp_login_request::{TOTP_REQUEST_COOKIE_NAME, TOTP_REQUEST_LEN}; + +pub struct TotpRequest(pub String); + +#[rocket::async_trait] +impl<'r> FromRequest<'r> for TotpRequest { + type Error = std::convert::Infallible; + + async fn from_request(request: &'r Request<'_>) -> Outcome { + match request.cookies().get(TOTP_REQUEST_COOKIE_NAME) { + Some(cookie) => { + let value = cookie.value(); + + if value.len() == TOTP_REQUEST_LEN { + Outcome::Success(Self(value.to_string())) + } else { + Outcome::Forward(()) + } + } + None => Outcome::Forward(()), + } + } +}