lemmy/crates/api/src/local_user/verify_email.rs

39 lines
1.2 KiB
Rust
Raw Normal View History

use actix_web::web::{Data, Json};
2022-04-13 18:12:25 +00:00
use lemmy_api_common::{
context::LemmyContext,
2022-04-13 18:12:25 +00:00
person::{VerifyEmail, VerifyEmailResponse},
};
use lemmy_db_schema::{
source::{
email_verification::EmailVerification,
local_user::{LocalUser, LocalUserUpdateForm},
2022-04-13 18:12:25 +00:00
},
traits::Crud,
};
use lemmy_utils::error::{LemmyError, LemmyErrorExt, LemmyErrorType};
2022-04-13 18:12:25 +00:00
pub async fn verify_email(
data: Json<VerifyEmail>,
context: Data<LemmyContext>,
) -> Result<Json<VerifyEmailResponse>, LemmyError> {
let token = data.token.clone();
let verification = EmailVerification::read_for_token(&mut context.pool(), &token)
.await
.with_lemmy_type(LemmyErrorType::TokenNotFound)?;
2022-04-13 18:12:25 +00:00
let form = LocalUserUpdateForm {
// necessary in case this is a new signup
email_verified: Some(true),
// necessary in case email of an existing user was changed
email: Some(Some(verification.email)),
..Default::default()
};
let local_user_id = verification.local_user_id;
2022-04-13 18:12:25 +00:00
LocalUser::update(&mut context.pool(), local_user_id, &form).await?;
2022-04-13 18:12:25 +00:00
EmailVerification::delete_old_tokens_for_local_user(&mut context.pool(), local_user_id).await?;
2022-11-09 10:05:00 +00:00
Ok(Json(VerifyEmailResponse {}))
2022-04-13 18:12:25 +00:00
}