tuwunel_api/client/account/3pid/
request_3pid_management_token_via_email.rs1use axum::extract::State;
2use ruma::api::client::account::request_3pid_management_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};
8
9pub(crate) async fn request_3pid_management_token_via_email_route(
13 State(services): State<crate::State>,
14 ClientIp(client): ClientIp,
15 body: Ruma<request_3pid_management_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 if services
24 .threepid
25 .address_in_use(&email_canon)
26 .await
27 {
28 return Err!(Request(ThreepidInUse("That email address is already in use")));
29 }
30
31 let sid = send_email_token(
32 &services,
33 client,
34 body.client_secret.as_str(),
35 &email_canon,
36 body.send_attempt.into(),
37 )
38 .await?;
39
40 Ok(Response::new(sid))
41}