mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-30 09:38:33 +08:00
feat(users): invite user without email (#3328)
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
@ -1,7 +1,5 @@
|
||||
use api_models::user as user_api;
|
||||
#[cfg(feature = "email")]
|
||||
use diesel_models::user_role::UserRoleNew;
|
||||
use diesel_models::{enums::UserStatus, user as storage_user};
|
||||
use diesel_models::{enums::UserStatus, user as storage_user, user_role::UserRoleNew};
|
||||
#[cfg(feature = "email")]
|
||||
use error_stack::IntoReport;
|
||||
use error_stack::ResultExt;
|
||||
@ -342,7 +340,6 @@ pub async fn reset_password(
|
||||
Ok(ApplicationResponse::StatusOk)
|
||||
}
|
||||
|
||||
#[cfg(feature = "email")]
|
||||
pub async fn invite_user(
|
||||
state: AppState,
|
||||
request: user_api::InviteUserRequest,
|
||||
@ -395,6 +392,7 @@ pub async fn invite_user(
|
||||
|
||||
Ok(ApplicationResponse::Json(user_api::InviteUserResponse {
|
||||
is_email_sent: false,
|
||||
password: None,
|
||||
}))
|
||||
} else if invitee_user
|
||||
.as_ref()
|
||||
@ -432,25 +430,37 @@ pub async fn invite_user(
|
||||
}
|
||||
})?;
|
||||
|
||||
let email_contents = email_types::InviteUser {
|
||||
recipient_email: invitee_email,
|
||||
user_name: domain::UserName::new(new_user.get_name())?,
|
||||
settings: state.conf.clone(),
|
||||
subject: "You have been invited to join Hyperswitch Community!",
|
||||
};
|
||||
|
||||
let send_email_result = state
|
||||
.email_client
|
||||
.compose_and_send_email(
|
||||
Box::new(email_contents),
|
||||
state.conf.proxy.https_url.as_ref(),
|
||||
)
|
||||
.await;
|
||||
|
||||
logger::info!(?send_email_result);
|
||||
let is_email_sent;
|
||||
#[cfg(feature = "email")]
|
||||
{
|
||||
let email_contents = email_types::InviteUser {
|
||||
recipient_email: invitee_email,
|
||||
user_name: domain::UserName::new(new_user.get_name())?,
|
||||
settings: state.conf.clone(),
|
||||
subject: "You have been invited to join Hyperswitch Community!",
|
||||
};
|
||||
let send_email_result = state
|
||||
.email_client
|
||||
.compose_and_send_email(
|
||||
Box::new(email_contents),
|
||||
state.conf.proxy.https_url.as_ref(),
|
||||
)
|
||||
.await;
|
||||
logger::info!(?send_email_result);
|
||||
is_email_sent = send_email_result.is_ok();
|
||||
}
|
||||
#[cfg(not(feature = "email"))]
|
||||
{
|
||||
is_email_sent = false;
|
||||
}
|
||||
|
||||
Ok(ApplicationResponse::Json(user_api::InviteUserResponse {
|
||||
is_email_sent: send_email_result.is_ok(),
|
||||
is_email_sent,
|
||||
password: if cfg!(not(feature = "email")) {
|
||||
Some(new_user.get_password().get_secret())
|
||||
} else {
|
||||
None
|
||||
},
|
||||
}))
|
||||
} else {
|
||||
Err(UserErrors::InternalServerError.into())
|
||||
|
||||
@ -879,6 +879,7 @@ impl User {
|
||||
.service(web::resource("/user/update_role").route(web::post().to(update_user_role)))
|
||||
.service(web::resource("/role/list").route(web::get().to(list_roles)))
|
||||
.service(web::resource("/role/{role_id}").route(web::get().to(get_role)))
|
||||
.service(web::resource("/user/invite").route(web::post().to(invite_user)))
|
||||
.service(
|
||||
web::resource("/data")
|
||||
.route(web::get().to(get_multiple_dashboard_metadata))
|
||||
@ -901,7 +902,6 @@ impl User {
|
||||
)
|
||||
.service(web::resource("/forgot_password").route(web::post().to(forgot_password)))
|
||||
.service(web::resource("/reset_password").route(web::post().to(reset_password)))
|
||||
.service(web::resource("/user/invite").route(web::post().to(invite_user)))
|
||||
.service(
|
||||
web::resource("/signup_with_merchant_id")
|
||||
.route(web::post().to(user_signup_with_merchant_id)),
|
||||
|
||||
@ -333,7 +333,6 @@ pub async fn reset_password(
|
||||
.await
|
||||
}
|
||||
|
||||
#[cfg(feature = "email")]
|
||||
pub async fn invite_user(
|
||||
state: web::Data<AppState>,
|
||||
req: HttpRequest,
|
||||
|
||||
@ -489,6 +489,10 @@ impl NewUser {
|
||||
self.new_merchant.clone()
|
||||
}
|
||||
|
||||
pub fn get_password(&self) -> UserPassword {
|
||||
self.password.clone()
|
||||
}
|
||||
|
||||
pub async fn insert_user_in_db(
|
||||
&self,
|
||||
db: &dyn StorageInterface,
|
||||
@ -683,8 +687,7 @@ impl TryFrom<InviteeUserRequestWithInvitedUserToken> for NewUser {
|
||||
let user_id = uuid::Uuid::new_v4().to_string();
|
||||
let email = value.0.email.clone().try_into()?;
|
||||
let name = UserName::new(value.0.name.clone())?;
|
||||
let password = password::generate_password_hash(uuid::Uuid::new_v4().to_string().into())?;
|
||||
let password = UserPassword::new(password)?;
|
||||
let password = UserPassword::new(uuid::Uuid::new_v4().to_string().into())?;
|
||||
let new_merchant = NewUserMerchant::try_from(value)?;
|
||||
|
||||
Ok(Self {
|
||||
|
||||
Reference in New Issue
Block a user