Update ProvisionRequest with locked flag

This commit is contained in:
Olivier 'reivilibre
2026-03-13 15:46:44 +00:00
parent 784acfe4e1
commit e12eed8f33
10 changed files with 30 additions and 14 deletions

View File

@@ -166,7 +166,7 @@ pub async fn handler(
let user = repo.user().add(&mut rng, &clock, params.username).await?;
homeserver
.provision_user(&ProvisionRequest::new(&user.username, &user.sub))
.provision_user(&ProvisionRequest::new(&user.username, &user.sub, false))
.await
.map_err(RouteError::Homeserver)?;

View File

@@ -129,7 +129,7 @@ mod tests {
// because this endpoint will try to reactivate it
state
.homeserver_connection
.provision_user(&ProvisionRequest::new(&user.username, &user.sub))
.provision_user(&ProvisionRequest::new(&user.username, &user.sub, false))
.await
.unwrap();
state
@@ -181,7 +181,7 @@ mod tests {
// Provision the user on the homeserver
state
.homeserver_connection
.provision_user(&ProvisionRequest::new(&user.username, &user.sub))
.provision_user(&ProvisionRequest::new(&user.username, &user.sub, false))
.await
.unwrap();

View File

@@ -935,7 +935,7 @@ mod tests {
.unwrap();
state
.homeserver_connection
.provision_user(&ProvisionRequest::new(&user.username, &user.sub))
.provision_user(&ProvisionRequest::new(&user.username, &user.sub, locked))
.await
.unwrap();
@@ -1238,7 +1238,7 @@ mod tests {
state
.homeserver_connection
.provision_user(&ProvisionRequest::new(&user.username, &user.sub))
.provision_user(&ProvisionRequest::new(&user.username, &user.sub, false))
.await
.unwrap();
@@ -1343,7 +1343,7 @@ mod tests {
state
.homeserver_connection
.provision_user(&ProvisionRequest::new(&user.username, &user.sub))
.provision_user(&ProvisionRequest::new(&user.username, &user.sub, false))
.await
.unwrap();

View File

@@ -223,7 +223,7 @@ async fn create_test_user(state: &TestState, username: &str) -> mas_data_model::
// Provision the user on the homeserver
state
.homeserver_connection
.provision_user(&ProvisionRequest::new(&user.username, &user.sub))
.provision_user(&ProvisionRequest::new(&user.username, &user.sub, false))
.await
.unwrap();

View File

@@ -530,7 +530,7 @@ async fn test_oauth2_client_credentials(pool: PgPool) {
// so we need to do it manually
state
.homeserver_connection
.provision_user(&ProvisionRequest::new("alice", user_id))
.provision_user(&ProvisionRequest::new("alice", user_id, false))
.await
.unwrap();

View File

@@ -805,7 +805,7 @@ mod tests {
state
.homeserver_connection
.provision_user(&ProvisionRequest::new(&user.username, &user.sub))
.provision_user(&ProvisionRequest::new(&user.username, &user.sub, false))
.await
.unwrap();
@@ -1005,7 +1005,7 @@ mod tests {
state
.homeserver_connection
.provision_user(&ProvisionRequest::new(&user.username, &user.sub))
.provision_user(&ProvisionRequest::new(&user.username, &user.sub, false))
.await
.unwrap();

View File

@@ -141,6 +141,8 @@ impl HomeserverConnection for SynapseConnection {
set_emails: Option<Vec<String>>,
#[serde(skip_serializing_if = "std::ops::Not::not")]
unset_emails: bool,
#[serde(skip_serializing_if = "Option::is_none")]
locked: Option<bool>,
}
let mut body = Request {
@@ -151,6 +153,7 @@ impl HomeserverConnection for SynapseConnection {
unset_avatar_url: false,
set_emails: None,
unset_emails: false,
locked: Some(request.locked()),
};
request.on_displayname(|displayname| match displayname {

View File

@@ -33,6 +33,7 @@ enum FieldAction<T> {
pub struct ProvisionRequest {
localpart: String,
sub: String,
locked: bool,
displayname: FieldAction<String>,
avatar_url: FieldAction<String>,
emails: FieldAction<Vec<String>>,
@@ -45,11 +46,13 @@ impl ProvisionRequest {
///
/// * `localpart` - The localpart of the user to provision.
/// * `sub` - The `sub` of the user, aka the internal ID.
/// * `locked` - Whether the user is locked.
#[must_use]
pub fn new(localpart: impl Into<String>, sub: impl Into<String>) -> Self {
pub fn new(localpart: impl Into<String>, sub: impl Into<String>, locked: bool) -> Self {
Self {
localpart: localpart.into(),
sub: sub.into(),
locked,
displayname: FieldAction::DoNothing,
avatar_url: FieldAction::DoNothing,
emails: FieldAction::DoNothing,
@@ -68,6 +71,12 @@ impl ProvisionRequest {
&self.localpart
}
/// Get the locked flag of the user to provision
#[must_use]
pub fn locked(&self) -> bool {
self.locked
}
/// Ask to set the displayname of the user.
///
/// # Parameters

View File

@@ -234,7 +234,7 @@ mod tests {
assert!(conn.upsert_device("test", device, None).await.is_err());
assert!(conn.delete_device("test", device).await.is_err());
let request = ProvisionRequest::new("test", "test")
let request = ProvisionRequest::new("test", "test", false)
.set_displayname("Test User".into())
.set_avatar_url("mxc://example.org/1234567890".into())
.set_emails(vec!["test@example.org".to_owned()]);

View File

@@ -60,8 +60,12 @@ impl RunnableJob for ProvisionUserJob {
.into_iter()
.map(|email| email.email)
.collect();
let mut request =
ProvisionRequest::new(user.username.clone(), user.sub.clone()).set_emails(emails);
let mut request = ProvisionRequest::new(
user.username.clone(),
user.sub.clone(),
user.locked_at.is_some(),
)
.set_emails(emails);
if let Some(display_name) = self.display_name_to_set() {
request = request.set_displayname(display_name.to_owned());