mirror of
https://gitlab.com/famedly/conduit.git
synced 2024-12-27 13:03:47 +03:00
Merge branch 'fix-unrejectable-invites' into 'next'
Fix unrejectable invites Closes #418 See merge request famedly/conduit!623
This commit is contained in:
commit
624654a88b
2 changed files with 46 additions and 6 deletions
|
@ -1399,8 +1399,10 @@ pub async fn leave_all_rooms(user_id: &UserId) -> Result<()> {
|
||||||
|
|
||||||
pub async fn leave_room(user_id: &UserId, room_id: &RoomId, reason: Option<String>) -> Result<()> {
|
pub async fn leave_room(user_id: &UserId, room_id: &RoomId, reason: Option<String>) -> Result<()> {
|
||||||
// Ask a remote server if we don't have this room
|
// Ask a remote server if we don't have this room
|
||||||
if !services().rooms.metadata.exists(room_id)?
|
if !services()
|
||||||
&& room_id.server_name() != Some(services().globals.server_name())
|
.rooms
|
||||||
|
.state_cache
|
||||||
|
.server_in_room(services().globals.server_name(), room_id)?
|
||||||
{
|
{
|
||||||
if let Err(e) = remote_leave_room(user_id, room_id).await {
|
if let Err(e) = remote_leave_room(user_id, room_id).await {
|
||||||
warn!("Failed to leave room {} remotely: {}", user_id, e);
|
warn!("Failed to leave room {} remotely: {}", user_id, e);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
service::rooms::timeline::PduCount, services, Error, PduEvent, Result, Ruma, RumaResponse,
|
service::{pdu::EventHash, rooms::timeline::PduCount},
|
||||||
|
services, utils, Error, PduEvent, Result, Ruma, RumaResponse,
|
||||||
};
|
};
|
||||||
|
|
||||||
use ruma::{
|
use ruma::{
|
||||||
|
@ -21,7 +22,7 @@ use ruma::{
|
||||||
StateEventType, TimelineEventType,
|
StateEventType, TimelineEventType,
|
||||||
},
|
},
|
||||||
serde::Raw,
|
serde::Raw,
|
||||||
uint, DeviceId, JsOption, OwnedDeviceId, OwnedUserId, RoomId, UInt, UserId,
|
uint, DeviceId, EventId, JsOption, OwnedDeviceId, OwnedUserId, RoomId, UInt, UserId,
|
||||||
};
|
};
|
||||||
use std::{
|
use std::{
|
||||||
collections::{hash_map::Entry, BTreeMap, BTreeSet, HashMap, HashSet},
|
collections::{hash_map::Entry, BTreeMap, BTreeSet, HashMap, HashSet},
|
||||||
|
@ -296,8 +297,6 @@ async fn sync_helper(
|
||||||
for result in all_left_rooms {
|
for result in all_left_rooms {
|
||||||
let (room_id, _) = result?;
|
let (room_id, _) = result?;
|
||||||
|
|
||||||
let mut left_state_events = Vec::new();
|
|
||||||
|
|
||||||
{
|
{
|
||||||
// Get and drop the lock to wait for remaining operations to finish
|
// Get and drop the lock to wait for remaining operations to finish
|
||||||
let mutex_insert = Arc::clone(
|
let mutex_insert = Arc::clone(
|
||||||
|
@ -325,9 +324,48 @@ async fn sync_helper(
|
||||||
|
|
||||||
if !services().rooms.metadata.exists(&room_id)? {
|
if !services().rooms.metadata.exists(&room_id)? {
|
||||||
// This is just a rejected invite, not a room we know
|
// This is just a rejected invite, not a room we know
|
||||||
|
let event = PduEvent {
|
||||||
|
event_id: EventId::new(services().globals.server_name()).into(),
|
||||||
|
sender: sender_user.clone(),
|
||||||
|
origin_server_ts: utils::millis_since_unix_epoch()
|
||||||
|
.try_into()
|
||||||
|
.expect("Timestamp is valid js_int value"),
|
||||||
|
kind: TimelineEventType::RoomMember,
|
||||||
|
content: serde_json::from_str(r#"{ "membership": "leave"}"#).unwrap(),
|
||||||
|
state_key: Some(sender_user.to_string()),
|
||||||
|
unsigned: None,
|
||||||
|
// The following keys are dropped on conversion
|
||||||
|
room_id: room_id.clone(),
|
||||||
|
prev_events: vec![],
|
||||||
|
depth: uint!(1),
|
||||||
|
auth_events: vec![],
|
||||||
|
redacts: None,
|
||||||
|
hashes: EventHash {
|
||||||
|
sha256: String::new(),
|
||||||
|
},
|
||||||
|
signatures: None,
|
||||||
|
};
|
||||||
|
|
||||||
|
left_rooms.insert(
|
||||||
|
room_id,
|
||||||
|
LeftRoom {
|
||||||
|
account_data: RoomAccountData { events: Vec::new() },
|
||||||
|
timeline: Timeline {
|
||||||
|
limited: false,
|
||||||
|
prev_batch: Some(next_batch_string.clone()),
|
||||||
|
events: Vec::new(),
|
||||||
|
},
|
||||||
|
state: State {
|
||||||
|
events: vec![event.to_sync_state_event()],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mut left_state_events = Vec::new();
|
||||||
|
|
||||||
let since_shortstatehash = services()
|
let since_shortstatehash = services()
|
||||||
.rooms
|
.rooms
|
||||||
.user
|
.user
|
||||||
|
|
Loading…
Reference in a new issue