feat: Implement a command for issuing password reset links

This commit is contained in:
Ginger
2026-03-03 11:18:48 -05:00
parent 267feb3c09
commit da8833fca4
7 changed files with 56 additions and 1 deletions
+13
View File
@@ -6,6 +6,7 @@ use conduwuit::{
config::{Config, check},
error, implement,
};
use url::Url;
use crate::registration_tokens::{ValidToken, ValidTokenSource};
@@ -23,6 +24,18 @@ impl Service {
.clone()
.map(|token| ValidToken { token, source: ValidTokenSource::Config })
}
/// Get the base domain to use for user-facing URLs.
#[must_use]
pub fn get_client_domain(&self) -> Url {
self.well_known.client.clone().unwrap_or_else(|| {
let host = self.server_name.host();
format!("https://{host}")
.as_str()
.try_into()
.expect("server name should be a valid host")
})
}
}
#[async_trait]
+6
View File
@@ -8,6 +8,8 @@ use ruma::OwnedUserId;
use crate::{Dep, globals, users};
pub const PASSWORD_RESET_PATH: &str = "/_continuwuity/password_reset";
pub const RESET_TOKEN_QUERY_PARAM: &str = "token";
const RESET_TOKEN_LENGTH: usize = 32;
pub struct Service {
@@ -52,6 +54,10 @@ impl Service {
return Err!("Cannot issue a password reset token for remote user {user}");
}
if user == self.services.globals.server_user {
return Err!("Cannot issue a password reset token for the server user");
}
if self.services.users.origin(&user).await? != "password" {
return Err!("Cannot issue a password reset token for non-internal user {user}");
}