mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2025-07-05 19:55:49 +02:00
Add revoke_admin to service.
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
parent
36e81ba185
commit
3c7c641d2d
1 changed files with 53 additions and 0 deletions
|
@ -170,3 +170,56 @@ async fn set_room_tag(&self, room_id: &RoomId, user_id: &UserId, tag: &str) -> R
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Demote an admin, removing its rights.
|
||||||
|
#[implement(super::Service)]
|
||||||
|
pub async fn revoke_admin(&self, user_id: &UserId) -> Result {
|
||||||
|
use MembershipState::{Invite, Join, Knock, Leave};
|
||||||
|
|
||||||
|
let Ok(room_id) = self.get_admin_room().await else {
|
||||||
|
return Err!(error!("No admin room available or created."));
|
||||||
|
};
|
||||||
|
|
||||||
|
let state_lock = self.services.state.mutex.lock(&room_id).await;
|
||||||
|
|
||||||
|
let event = match self
|
||||||
|
.services
|
||||||
|
.state_accessor
|
||||||
|
.get_member(&room_id, user_id)
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
| Err(e) if e.is_not_found() => return Err!("{user_id} was never an admin."),
|
||||||
|
|
||||||
|
| Err(e) => return Err!(error!(?e, "Failure occurred while attempting revoke.")),
|
||||||
|
|
||||||
|
| Ok(event) if !matches!(event.membership, Invite | Knock | Join) =>
|
||||||
|
return Err!("Cannot revoke {user_id} in membership state {:?}.", event.membership),
|
||||||
|
|
||||||
|
| Ok(event) => {
|
||||||
|
assert!(
|
||||||
|
matches!(event.membership, Invite | Knock | Join),
|
||||||
|
"Incorrect membership state to remove user."
|
||||||
|
);
|
||||||
|
|
||||||
|
event
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
self.services
|
||||||
|
.timeline
|
||||||
|
.build_and_append_pdu(
|
||||||
|
PduBuilder::state(user_id.to_string(), &RoomMemberEventContent {
|
||||||
|
membership: Leave,
|
||||||
|
reason: Some("Admin Revoked".into()),
|
||||||
|
is_direct: None,
|
||||||
|
join_authorized_via_users_server: None,
|
||||||
|
third_party_invite: None,
|
||||||
|
..event
|
||||||
|
}),
|
||||||
|
self.services.globals.server_user.as_ref(),
|
||||||
|
&room_id,
|
||||||
|
&state_lock,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.map(|_| ())
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue