mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-11-03 21:37:41 +08:00
feat: Add decision starter API for email flows (#4533)
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
@ -183,21 +183,7 @@ pub async fn signin_token_only_flow(
|
||||
let next_flow =
|
||||
domain::NextFlow::from_origin(domain::Origin::SignIn, user_from_db.clone(), &state).await?;
|
||||
|
||||
let token = match next_flow.get_flow() {
|
||||
domain::UserFlow::SPTFlow(spt_flow) => spt_flow.generate_spt(&state, &next_flow).await,
|
||||
domain::UserFlow::JWTFlow(jwt_flow) => {
|
||||
#[cfg(feature = "email")]
|
||||
{
|
||||
user_from_db.get_verification_days_left(&state)?;
|
||||
}
|
||||
|
||||
let user_role = user_from_db
|
||||
.get_preferred_or_active_user_role_from_db(&state)
|
||||
.await
|
||||
.to_not_found_response(UserErrors::InternalServerError)?;
|
||||
jwt_flow.generate_jwt(&state, &next_flow, &user_role).await
|
||||
}
|
||||
}?;
|
||||
let token = next_flow.get_token(&state).await?;
|
||||
|
||||
let response = user_api::SignInWithTokenResponse::Token(user_api::TokenResponse {
|
||||
token: token.clone(),
|
||||
@ -1323,3 +1309,38 @@ pub async fn update_user_details(
|
||||
|
||||
Ok(ApplicationResponse::StatusOk)
|
||||
}
|
||||
|
||||
#[cfg(feature = "email")]
|
||||
pub async fn user_from_email(
|
||||
state: AppState,
|
||||
req: user_api::UserFromEmailRequest,
|
||||
) -> UserResponse<user_api::TokenResponse> {
|
||||
let token = req.token.expose();
|
||||
let email_token = auth::decode_jwt::<email_types::EmailToken>(&token, &state)
|
||||
.await
|
||||
.change_context(UserErrors::LinkInvalid)?;
|
||||
|
||||
auth::blacklist::check_email_token_in_blacklist(&state, &token).await?;
|
||||
|
||||
let user_from_db: domain::UserFromStorage = state
|
||||
.store
|
||||
.find_user_by_email(
|
||||
&email_token
|
||||
.get_email()
|
||||
.change_context(UserErrors::InternalServerError)?,
|
||||
)
|
||||
.await
|
||||
.change_context(UserErrors::InternalServerError)?
|
||||
.into();
|
||||
|
||||
let next_flow =
|
||||
domain::NextFlow::from_origin(email_token.get_flow(), user_from_db.clone(), &state).await?;
|
||||
|
||||
let token = next_flow.get_token(&state).await?;
|
||||
|
||||
let response = user_api::TokenResponse {
|
||||
token: token.clone(),
|
||||
token_type: next_flow.get_flow().into(),
|
||||
};
|
||||
auth::cookies::set_cookie_response(response, token)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user