Skip to main content

tuwunel_api/client/account/3pid/
request_registration_token_via_email.rs

1use 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};
8
9/// # `POST /_matrix/client/v3/register/email/requestToken`
10///
11/// Request a validation token to verify an email address during registration.
12pub(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	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}