mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-11-02 12:06:56 +08:00
feat(users): Create Decision manager for User Flows (#4518)
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
@ -123,7 +123,7 @@ pub async fn signup(
|
||||
pub async fn signin(
|
||||
state: AppState,
|
||||
request: user_api::SignInRequest,
|
||||
) -> UserResponse<user_api::SignInResponse> {
|
||||
) -> UserResponse<user_api::SignInWithTokenResponse> {
|
||||
let user_from_db: domain::UserFromStorage = state
|
||||
.store
|
||||
.find_user_by_email(&request.email)
|
||||
@ -161,6 +161,48 @@ pub async fn signin(
|
||||
|
||||
let response = signin_strategy.get_signin_response(&state).await?;
|
||||
let token = utils::user::get_token_from_signin_response(&response);
|
||||
auth::cookies::set_cookie_response(
|
||||
user_api::SignInWithTokenResponse::SignInResponse(response),
|
||||
token,
|
||||
)
|
||||
}
|
||||
|
||||
pub async fn signin_token_only_flow(
|
||||
state: AppState,
|
||||
request: user_api::SignInRequest,
|
||||
) -> UserResponse<user_api::SignInWithTokenResponse> {
|
||||
let user_from_db: domain::UserFromStorage = state
|
||||
.store
|
||||
.find_user_by_email(&request.email)
|
||||
.await
|
||||
.to_not_found_response(UserErrors::InvalidCredentials)?
|
||||
.into();
|
||||
|
||||
user_from_db.compare_password(request.password)?;
|
||||
|
||||
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 response = user_api::SignInWithTokenResponse::Token(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