tuwunel_api_client/account/3pid/
request_registration_token_via_email.rs1use axum::extract::State;
2use ruma::api::client::account::request_registration_token_via_email::{self, v3::Response};
3use tuwunel_core::{Err, Result};
4use tuwunel_service::threepid::canonicalize_email;
5
6use super::email_token::send_email_token;
7use crate::{ClientIp, Ruma, utils::check_email_domain};
8
9pub(crate) async fn request_registration_token_via_email_route(
13 State(services): State<crate::State>,
14 ClientIp(client): ClientIp,
15 body: Ruma<request_registration_token_via_email::v3::Request>,
16) -> Result<Response> {
17 if !services.sendmail.is_enabled() {
18 return Err!(Request(ThreepidDenied("Email verification is not configured")));
19 }
20
21 let email_canon = canonicalize_email(&body.email)?;
22
23 check_email_domain(&services, &email_canon)?;
24
25 if services
26 .threepid
27 .address_in_use(&email_canon)
28 .await
29 {
30 return Err!(Request(ThreepidInUse("That email address is already in use")));
31 }
32
33 let sid = send_email_token(
34 &services,
35 client,
36 body.client_secret.as_str(),
37 &email_canon,
38 body.send_attempt.into(),
39 )
40 .await?;
41
42 Ok(Response::new(sid))
43}