mirror of
https://gitlab.com/famedly/conduit.git
synced 2024-11-16 14:10:50 +01:00
Merge branch 'user_can_membership' into 'next'
refactor(state_accessor): add method to check if a user can invite another user See merge request famedly/conduit!621
This commit is contained in:
commit
f16bff2466
1 changed files with 38 additions and 2 deletions
|
@ -18,9 +18,10 @@ use ruma::{
|
||||||
},
|
},
|
||||||
EventId, JsOption, OwnedServerName, OwnedUserId, RoomId, ServerName, UserId,
|
EventId, JsOption, OwnedServerName, OwnedUserId, RoomId, ServerName, UserId,
|
||||||
};
|
};
|
||||||
use tracing::error;
|
use serde_json::value::to_raw_value;
|
||||||
|
use tracing::{error, warn};
|
||||||
|
|
||||||
use crate::{services, Error, PduEvent, Result};
|
use crate::{service::pdu::PduBuilder, services, Error, PduEvent, Result};
|
||||||
|
|
||||||
pub struct Service {
|
pub struct Service {
|
||||||
pub db: &'static dyn Data,
|
pub db: &'static dyn Data,
|
||||||
|
@ -301,6 +302,41 @@ impl Service {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn user_can_invite(
|
||||||
|
&self,
|
||||||
|
room_id: &RoomId,
|
||||||
|
sender: &UserId,
|
||||||
|
target_user: &UserId,
|
||||||
|
) -> Result<bool> {
|
||||||
|
let content = to_raw_value(&RoomMemberEventContent::new(MembershipState::Invite))
|
||||||
|
.expect("Event content always serializes");
|
||||||
|
|
||||||
|
let new_event = PduBuilder {
|
||||||
|
event_type: ruma::events::TimelineEventType::RoomMember,
|
||||||
|
content,
|
||||||
|
unsigned: None,
|
||||||
|
state_key: Some(target_user.into()),
|
||||||
|
redacts: None,
|
||||||
|
};
|
||||||
|
|
||||||
|
let mutex_state = Arc::clone(
|
||||||
|
services()
|
||||||
|
.globals
|
||||||
|
.roomid_mutex_state
|
||||||
|
.write()
|
||||||
|
.await
|
||||||
|
.entry(room_id.to_owned())
|
||||||
|
.or_default(),
|
||||||
|
);
|
||||||
|
let state_lock = mutex_state.lock().await;
|
||||||
|
|
||||||
|
Ok(services()
|
||||||
|
.rooms
|
||||||
|
.timeline
|
||||||
|
.create_hash_and_sign_event(new_event, sender, room_id, &state_lock)
|
||||||
|
.is_ok())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_member(
|
pub fn get_member(
|
||||||
&self,
|
&self,
|
||||||
room_id: &RoomId,
|
room_id: &RoomId,
|
||||||
|
|
Loading…
Reference in a new issue