mirror of
https://gitlab.com/famedly/conduit.git
synced 2024-12-27 04:53:50 +03:00
Fix review issues, move state-res to spec-comp branch
This commit is contained in:
parent
d9a29e3e5c
commit
f46c2d1eec
8 changed files with 106 additions and 138 deletions
79
Cargo.lock
generated
79
Cargo.lock
generated
|
@ -157,7 +157,7 @@ dependencies = [
|
|||
"addr2line",
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"miniz_oxide 0.4.0",
|
||||
"miniz_oxide 0.4.1",
|
||||
"object",
|
||||
"rustc-demangle",
|
||||
]
|
||||
|
@ -168,12 +168,6 @@ version = "0.2.6"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1b20b618342cf9891c292c4f5ac2cde7287cc5c87e87e9c769d617793607dec1"
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.12.3"
|
||||
|
@ -265,7 +259,7 @@ checksum = "942f72db697d8767c22d46a598e01f2d3b475501ea43d0db4f16d90259182d0b"
|
|||
dependencies = [
|
||||
"num-integer",
|
||||
"num-traits",
|
||||
"time 0.1.43",
|
||||
"time 0.1.44",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -287,7 +281,7 @@ checksum = "0dbbb57365263e881e805dc77d94697c9118fd94d8da011240555aa7b23445bd"
|
|||
name = "conduit"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"base64 0.12.3",
|
||||
"base64",
|
||||
"directories",
|
||||
"http",
|
||||
"image",
|
||||
|
@ -298,7 +292,7 @@ dependencies = [
|
|||
"ring",
|
||||
"rocket",
|
||||
"ruma",
|
||||
"rust-argon2 0.8.2",
|
||||
"rust-argon2",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sled",
|
||||
|
@ -320,7 +314,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "1373a16a4937bc34efec7b391f9c1500c30b8478a701a4f44c9165cc0475a6e0"
|
||||
dependencies = [
|
||||
"aes-gcm",
|
||||
"base64 0.12.3",
|
||||
"base64",
|
||||
"hkdf",
|
||||
"percent-encoding",
|
||||
"rand",
|
||||
|
@ -486,9 +480,9 @@ checksum = "cd56b59865bce947ac5958779cfa508f6c3b9497cc762b7e24a12d11ccde2c4f"
|
|||
|
||||
[[package]]
|
||||
name = "encoding_rs"
|
||||
version = "0.8.23"
|
||||
version = "0.8.24"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e8ac63f94732332f44fe654443c46f6375d1939684c17b0afb6cb56b0456e171"
|
||||
checksum = "a51b8cf747471cb9499b6d59e59b0444f4c90eba8968c4e44874e92b5b64ace2"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
@ -672,7 +666,7 @@ checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
|
|||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"wasi",
|
||||
"wasi 0.9.0+wasi-snapshot-preview1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -816,7 +810,7 @@ dependencies = [
|
|||
"itoa",
|
||||
"pin-project",
|
||||
"socket2",
|
||||
"time 0.1.43",
|
||||
"time 0.1.44",
|
||||
"tokio",
|
||||
"tower-service",
|
||||
"tracing",
|
||||
|
@ -1057,9 +1051,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "miniz_oxide"
|
||||
version = "0.4.0"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "be0f75932c1f6cfae3c04000e40114adf955636e19040f9c0a2c380702aa1c7f"
|
||||
checksum = "4d7559a8a40d0f97e1edea3220f698f78b1c5ab67532e49f68fde3910323b722"
|
||||
dependencies = [
|
||||
"adler",
|
||||
]
|
||||
|
@ -1462,13 +1456,13 @@ checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
|
|||
|
||||
[[package]]
|
||||
name = "redox_users"
|
||||
version = "0.3.4"
|
||||
version = "0.3.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431"
|
||||
checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
"redox_syscall",
|
||||
"rust-argon2 0.7.0",
|
||||
"rust-argon2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -1527,11 +1521,11 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "reqwest"
|
||||
version = "0.10.7"
|
||||
version = "0.10.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "12427a5577082c24419c9c417db35cfeb65962efc7675bb6b0d5f1f9d315bfe6"
|
||||
checksum = "e9eaa17ac5d7b838b7503d118fa16ad88f440498bf9ffe5424e621f93190d61e"
|
||||
dependencies = [
|
||||
"base64 0.12.3",
|
||||
"base64",
|
||||
"bytes",
|
||||
"encoding_rs",
|
||||
"futures-core",
|
||||
|
@ -1813,31 +1807,19 @@ name = "ruma-signatures"
|
|||
version = "0.6.0-dev.1"
|
||||
source = "git+https://github.com/ruma/ruma?rev=aff914050eb297bd82b8aafb12158c88a9e480e1#aff914050eb297bd82b8aafb12158c88a9e480e1"
|
||||
dependencies = [
|
||||
"base64 0.12.3",
|
||||
"base64",
|
||||
"ring",
|
||||
"serde_json",
|
||||
"untrusted",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rust-argon2"
|
||||
version = "0.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017"
|
||||
dependencies = [
|
||||
"base64 0.11.0",
|
||||
"blake2b_simd",
|
||||
"constant_time_eq",
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rust-argon2"
|
||||
version = "0.8.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9dab61250775933275e84053ac235621dfb739556d5c54a2f2e9313b7cf43a19"
|
||||
dependencies = [
|
||||
"base64 0.12.3",
|
||||
"base64",
|
||||
"blake2b_simd",
|
||||
"constant_time_eq",
|
||||
"crossbeam-utils",
|
||||
|
@ -1864,7 +1846,7 @@ version = "0.18.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5d1126dcf58e93cee7d098dbda643b5f92ed724f1f6a63007c1116eed6700c81"
|
||||
dependencies = [
|
||||
"base64 0.12.3",
|
||||
"base64",
|
||||
"log",
|
||||
"ring",
|
||||
"sct",
|
||||
|
@ -2072,9 +2054,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
|
|||
|
||||
[[package]]
|
||||
name = "standback"
|
||||
version = "0.2.9"
|
||||
version = "0.2.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b0437cfb83762844799a60e1e3b489d5ceb6a650fbacb86437badc1b6d87b246"
|
||||
checksum = "33a71ea1ea5f8747d1af1979bfb7e65c3a025a70609f04ceb78425bc5adad8e6"
|
||||
dependencies = [
|
||||
"version_check",
|
||||
]
|
||||
|
@ -2088,7 +2070,7 @@ checksum = "7345c971d1ef21ffdbd103a75990a15eb03604fc8b8852ca8cb418ee1a099028"
|
|||
[[package]]
|
||||
name = "state-res"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/ruma/state-res#d93a965ad17781fa9554bb3cea71673c054b9f3f"
|
||||
source = "git+https://github.com/ruma/state-res?branch=spec-comp#17958665f6592af3ef478024fd1d75c384a30e7f"
|
||||
dependencies = [
|
||||
"itertools",
|
||||
"js_int",
|
||||
|
@ -2233,11 +2215,12 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "time"
|
||||
version = "0.1.43"
|
||||
version = "0.1.44"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
|
||||
checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"wasi 0.10.0+wasi-snapshot-preview1",
|
||||
"winapi 0.3.9",
|
||||
]
|
||||
|
||||
|
@ -2395,9 +2378,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "tracing-core"
|
||||
version = "0.1.14"
|
||||
version = "0.1.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "db63662723c316b43ca36d833707cc93dff82a02ba3d7e354f342682cc8b3545"
|
||||
checksum = "4f0e00789804e99b20f12bc7003ca416309d28a6f495d6af58d1e2c2842461b5"
|
||||
dependencies = [
|
||||
"lazy_static",
|
||||
]
|
||||
|
@ -2550,6 +2533,12 @@ version = "0.9.0+wasi-snapshot-preview1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.10.0+wasi-snapshot-preview1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen"
|
||||
version = "0.2.67"
|
||||
|
|
|
@ -32,7 +32,7 @@ thiserror = "1.0.19" # Used for conduit::Error type
|
|||
image = { version = "0.23.4", default-features = false, features = ["jpeg", "png", "gif"] } # Used to generate thumbnails for images
|
||||
base64 = "0.12.3" # Used to encode server public key
|
||||
# state-res = { path = "../../state-res" }
|
||||
state-res = { git = "https://github.com/ruma/state-res", version = "0.1.0" }
|
||||
state-res = { git = "https://github.com/ruma/state-res", version = "0.1.0", branch = "spec-comp" }
|
||||
ring = "0.16.15"
|
||||
|
||||
[features]
|
||||
|
|
|
@ -63,26 +63,11 @@ pub async fn get_public_rooms_route(
|
|||
db: State<'_, Database>,
|
||||
body: Ruma<get_public_rooms::IncomingRequest>,
|
||||
) -> ConduitResult<get_public_rooms::Response> {
|
||||
let Ruma {
|
||||
body:
|
||||
get_public_rooms::IncomingRequest {
|
||||
limit,
|
||||
server,
|
||||
since,
|
||||
},
|
||||
..
|
||||
} = body;
|
||||
|
||||
let get_public_rooms_filtered::Response {
|
||||
chunk,
|
||||
prev_batch,
|
||||
next_batch,
|
||||
total_room_count_estimate,
|
||||
} = get_public_rooms_filtered_helper(
|
||||
let response = get_public_rooms_filtered_helper(
|
||||
&db,
|
||||
server.as_deref(),
|
||||
limit,
|
||||
since.as_deref(),
|
||||
body.body.server.as_deref(),
|
||||
body.body.limit,
|
||||
body.body.since.as_deref(),
|
||||
None, // This is not used
|
||||
None, // This is not used
|
||||
)
|
||||
|
@ -90,10 +75,10 @@ pub async fn get_public_rooms_route(
|
|||
.0;
|
||||
|
||||
Ok(get_public_rooms::Response {
|
||||
chunk,
|
||||
prev_batch,
|
||||
next_batch,
|
||||
total_room_count_estimate,
|
||||
chunk: response.chunk,
|
||||
prev_batch: response.prev_batch,
|
||||
next_batch: response.next_batch,
|
||||
total_room_count_estimate: response.total_room_count_estimate,
|
||||
}
|
||||
.into())
|
||||
}
|
||||
|
|
|
@ -483,12 +483,12 @@ async fn join_room_by_id_helper(
|
|||
.await?;
|
||||
|
||||
dbg!(&send_join_response);
|
||||
// todo!("Take send_join_response and 'create' the room using that data");
|
||||
|
||||
let mut event_map = send_join_response
|
||||
.room_state
|
||||
.state
|
||||
.iter()
|
||||
.chain(send_join_response.room_state.auth_chain.iter())
|
||||
.map(|pdu| {
|
||||
pdu.deserialize()
|
||||
.map(StateEvent::Full)
|
||||
|
@ -497,14 +497,6 @@ async fn join_room_by_id_helper(
|
|||
.collect::<Result<BTreeMap<EventId, StateEvent>, _>>()
|
||||
.map_err(|_| Error::bad_database("Invalid PDU found in db."))?;
|
||||
|
||||
let auth_chain = send_join_response
|
||||
.room_state
|
||||
.auth_chain
|
||||
.iter()
|
||||
.flat_map(|pdu| pdu.deserialize().ok())
|
||||
.map(StateEvent::Full)
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
let power_events = event_map
|
||||
.values()
|
||||
.filter(|pdu| pdu.is_power_event())
|
||||
|
@ -518,9 +510,11 @@ async fn join_room_by_id_helper(
|
|||
&power_events,
|
||||
&mut event_map,
|
||||
&db.rooms,
|
||||
&auth_chain // if we only use it here just build this list in the first place
|
||||
&send_join_response
|
||||
.room_state
|
||||
.auth_chain
|
||||
.iter()
|
||||
.map(|pdu| pdu.event_id())
|
||||
.filter_map(|pdu| Some(StateEvent::Full(pdu.deserialize().ok()?).event_id()))
|
||||
.collect::<Vec<_>>(),
|
||||
);
|
||||
|
||||
|
|
|
@ -195,7 +195,6 @@ pub fn create_room_route(
|
|||
content: match preset {
|
||||
create_room::RoomPreset::PublicChat => {
|
||||
serde_json::to_value(guest_access::GuestAccessEventContent::new(
|
||||
// In a public room, joining is the only way to access
|
||||
guest_access::GuestAccess::Forbidden,
|
||||
))
|
||||
.expect("event is valid, we just created it")
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use super::State;
|
||||
use crate::{pdu::PduBuilder, ConduitResult, Database, Error, Ruma};
|
||||
use crate::{pdu::PduBuilder, ConduitResult, Database, Error, Result, Ruma};
|
||||
use ruma::{
|
||||
api::client::{
|
||||
error::ErrorKind,
|
||||
|
@ -9,7 +9,7 @@ use ruma::{
|
|||
},
|
||||
},
|
||||
events::{AnyStateEventContent, EventContent},
|
||||
RoomId, UserId,
|
||||
EventId, RoomId, UserId,
|
||||
};
|
||||
|
||||
#[cfg(feature = "conduit_bin")]
|
||||
|
@ -33,13 +33,16 @@ pub fn send_state_event_for_key_route(
|
|||
)
|
||||
.map_err(|_| Error::BadRequest(ErrorKind::BadJson, "Invalid JSON body."))?;
|
||||
|
||||
send_state_event_for_key_helper(
|
||||
&db,
|
||||
sender_id,
|
||||
&body.content,
|
||||
content,
|
||||
&body.room_id,
|
||||
Some(body.state_key.clone()),
|
||||
Ok(
|
||||
send_state_event_for_key::Response::new(send_state_event_for_key_helper(
|
||||
&db,
|
||||
sender_id,
|
||||
&body.content,
|
||||
content,
|
||||
&body.room_id,
|
||||
Some(body.state_key.clone()),
|
||||
)?)
|
||||
.into(),
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -67,8 +70,8 @@ pub fn send_state_event_for_empty_key_route(
|
|||
)
|
||||
.map_err(|_| Error::BadRequest(ErrorKind::BadJson, "Invalid JSON body."))?;
|
||||
|
||||
Ok(send_state_event_for_empty_key::Response::new(
|
||||
send_state_event_for_key_helper(
|
||||
Ok(
|
||||
send_state_event_for_empty_key::Response::new(send_state_event_for_key_helper(
|
||||
&db,
|
||||
sender_id
|
||||
.as_ref()
|
||||
|
@ -77,11 +80,9 @@ pub fn send_state_event_for_empty_key_route(
|
|||
json,
|
||||
&body.room_id,
|
||||
Some("".into()),
|
||||
)?
|
||||
.0
|
||||
.event_id,
|
||||
)?)
|
||||
.into(),
|
||||
)
|
||||
.into())
|
||||
}
|
||||
|
||||
#[cfg_attr(
|
||||
|
@ -183,7 +184,7 @@ pub fn send_state_event_for_key_helper(
|
|||
json: serde_json::Value,
|
||||
room_id: &RoomId,
|
||||
state_key: Option<String>,
|
||||
) -> ConduitResult<send_state_event_for_key::Response> {
|
||||
) -> Result<EventId> {
|
||||
let sender_id = sender;
|
||||
|
||||
if let AnyStateEventContent::RoomCanonicalAlias(canonical_alias) = content {
|
||||
|
@ -224,5 +225,5 @@ pub fn send_state_event_for_key_helper(
|
|||
&db.account_data,
|
||||
)?;
|
||||
|
||||
Ok(send_state_event_for_key::Response::new(event_id).into())
|
||||
Ok(event_id)
|
||||
}
|
||||
|
|
|
@ -475,7 +475,7 @@ pub async fn sync_events_route(
|
|||
}
|
||||
|
||||
for user_id in left_encrypted_users {
|
||||
let user_target_encrypted = db
|
||||
let still_share_encrypted_room = db
|
||||
.rooms
|
||||
.get_shared_rooms(vec![sender_id.clone(), user_id.clone()])
|
||||
.filter_map(|r| r.ok())
|
||||
|
@ -490,7 +490,7 @@ pub async fn sync_events_route(
|
|||
.all(|encrypted| !encrypted);
|
||||
// If the user doesn't share an encrypted room with the target anymore, we need to tell
|
||||
// them
|
||||
if user_target_encrypted {
|
||||
if still_share_encrypted_room {
|
||||
device_list_left.insert(user_id);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@ pub use edus::RoomEdus;
|
|||
|
||||
use crate::{pdu::PduBuilder, utils, Error, PduEvent, Result};
|
||||
use log::error;
|
||||
// TODO if ruma-signatures re-exports `use ruma::signatures::digest;`
|
||||
use ring::digest;
|
||||
use ruma::{
|
||||
api::client::error::ErrorKind,
|
||||
|
@ -96,9 +95,9 @@ impl StateStore for Rooms {
|
|||
}
|
||||
|
||||
impl Rooms {
|
||||
/// Builds a `StateMap` by iterating over all keys that start
|
||||
/// with `state_hash`, this gives the full state at event "x".
|
||||
pub fn get_statemap_by_hash(&self, state_hash: StateHashId) -> Result<StateMap<EventId>> {
|
||||
/// Builds a StateMap by iterating over all keys that start
|
||||
/// with state_hash, this gives the full state for the given state_hash.
|
||||
pub fn state_full(&self, state_hash: StateHashId) -> Result<StateMap<EventId>> {
|
||||
self.stateid_pduid
|
||||
.scan_prefix(&state_hash)
|
||||
.values()
|
||||
|
@ -242,8 +241,6 @@ impl Rooms {
|
|||
/// Generate a new StateHash.
|
||||
///
|
||||
/// A unique hash made from hashing the current states pduid's.
|
||||
/// Because `append_state_pdu` handles the empty state db case it does not
|
||||
/// have to be here.
|
||||
fn new_state_hash_id(&self, room_id: &RoomId) -> Result<StateHashId> {
|
||||
// Use hashed roomId as the first StateHash key for first state event in room
|
||||
if self
|
||||
|
@ -281,7 +278,7 @@ impl Rooms {
|
|||
|
||||
/// Checks if a room exists.
|
||||
pub fn exists(&self, room_id: &RoomId) -> Result<bool> {
|
||||
let mut prefix = room_id.to_string().as_bytes().to_vec();
|
||||
let mut prefix = room_id.as_bytes().to_vec();
|
||||
prefix.push(0xff);
|
||||
|
||||
// Look for PDUs in that room.
|
||||
|
@ -300,7 +297,7 @@ impl Rooms {
|
|||
let mut hashmap = HashMap::new();
|
||||
for pdu in
|
||||
self.roomstateid_pduid
|
||||
.scan_prefix(&room_id.to_string().as_bytes())
|
||||
.scan_prefix(&room_id.as_bytes())
|
||||
.values()
|
||||
.map(|value| {
|
||||
Ok::<_, Error>(
|
||||
|
@ -322,13 +319,13 @@ impl Rooms {
|
|||
Ok(hashmap)
|
||||
}
|
||||
|
||||
/// Returns the all state entries for this type.
|
||||
/// Returns all state entries for this type.
|
||||
pub fn room_state_type(
|
||||
&self,
|
||||
room_id: &RoomId,
|
||||
event_type: &EventType,
|
||||
) -> Result<HashMap<String, PduEvent>> {
|
||||
let mut prefix = room_id.to_string().as_bytes().to_vec();
|
||||
let mut prefix = room_id.as_bytes().to_vec();
|
||||
prefix.push(0xff);
|
||||
prefix.extend_from_slice(&event_type.to_string().as_bytes());
|
||||
|
||||
|
@ -357,7 +354,7 @@ impl Rooms {
|
|||
Ok(hashmap)
|
||||
}
|
||||
|
||||
/// Returns a single PDU in `room_id` with key (`event_type`, `state_key`).
|
||||
/// Returns a single PDU from `room_id` with key (`event_type`, `state_key`).
|
||||
pub fn room_state_get(
|
||||
&self,
|
||||
room_id: &RoomId,
|
||||
|
@ -459,7 +456,7 @@ impl Rooms {
|
|||
|
||||
/// Returns the leaf pdus of a room.
|
||||
pub fn get_pdu_leaves(&self, room_id: &RoomId) -> Result<Vec<EventId>> {
|
||||
let mut prefix = room_id.to_string().as_bytes().to_vec();
|
||||
let mut prefix = room_id.as_bytes().to_vec();
|
||||
prefix.push(0xff);
|
||||
|
||||
let mut events = Vec::new();
|
||||
|
@ -582,7 +579,7 @@ impl Rooms {
|
|||
.split_terminator(|c: char| !c.is_alphanumeric())
|
||||
.map(str::to_lowercase)
|
||||
{
|
||||
let mut key = pdu.room_id.to_string().as_bytes().to_vec();
|
||||
let mut key = pdu.room_id.as_bytes().to_vec();
|
||||
key.push(0xff);
|
||||
key.extend_from_slice(word.as_bytes());
|
||||
key.push(0xff);
|
||||
|
@ -752,7 +749,10 @@ impl Rooms {
|
|||
})
|
||||
.collect::<Result<StateMap<_>>>()?,
|
||||
)
|
||||
.ok_or(Error::Conflict("Found incoming PDU with invalid data."))?,
|
||||
.map_err(|e| {
|
||||
log::error!("{}", e);
|
||||
Error::Conflict("Found incoming PDU with invalid data.")
|
||||
})?,
|
||||
EventType::RoomCreate => prev_events.is_empty(),
|
||||
// Not allow any of the following events if the sender is not joined.
|
||||
_ if sender_membership != member::MembershipState::Join => false,
|
||||
|
@ -982,13 +982,13 @@ impl Rooms {
|
|||
globals: &super::globals::Globals,
|
||||
) -> Result<()> {
|
||||
let membership = member_content.membership;
|
||||
let mut userroom_id = user_id.to_string().as_bytes().to_vec();
|
||||
let mut userroom_id = user_id.as_bytes().to_vec();
|
||||
userroom_id.push(0xff);
|
||||
userroom_id.extend_from_slice(room_id.to_string().as_bytes());
|
||||
userroom_id.extend_from_slice(room_id.as_bytes());
|
||||
|
||||
let mut roomuser_id = room_id.to_string().as_bytes().to_vec();
|
||||
let mut roomuser_id = room_id.as_bytes().to_vec();
|
||||
roomuser_id.push(0xff);
|
||||
roomuser_id.extend_from_slice(user_id.to_string().as_bytes());
|
||||
roomuser_id.extend_from_slice(user_id.as_bytes());
|
||||
|
||||
match &membership {
|
||||
member::MembershipState::Join => {
|
||||
|
@ -1051,9 +1051,9 @@ impl Rooms {
|
|||
|
||||
/// Makes a user forget a room.
|
||||
pub fn forget(&self, room_id: &RoomId, user_id: &UserId) -> Result<()> {
|
||||
let mut userroom_id = user_id.to_string().as_bytes().to_vec();
|
||||
let mut userroom_id = user_id.as_bytes().to_vec();
|
||||
userroom_id.push(0xff);
|
||||
userroom_id.extend_from_slice(room_id.to_string().as_bytes());
|
||||
userroom_id.extend_from_slice(room_id.as_bytes());
|
||||
|
||||
self.userroomid_left.remove(userroom_id)?;
|
||||
|
||||
|
@ -1069,8 +1069,8 @@ impl Rooms {
|
|||
if let Some(room_id) = room_id {
|
||||
// New alias
|
||||
self.alias_roomid
|
||||
.insert(alias.alias(), &*room_id.to_string())?;
|
||||
let mut aliasid = room_id.to_string().as_bytes().to_vec();
|
||||
.insert(alias.alias(), room_id.as_bytes())?;
|
||||
let mut aliasid = room_id.as_bytes().to_vec();
|
||||
aliasid.extend_from_slice(&globals.next_count()?.to_be_bytes());
|
||||
self.aliasid_alias.insert(aliasid, &*alias.alias())?;
|
||||
} else {
|
||||
|
@ -1105,7 +1105,7 @@ impl Rooms {
|
|||
}
|
||||
|
||||
pub fn room_aliases(&self, room_id: &RoomId) -> impl Iterator<Item = Result<RoomAliasId>> {
|
||||
let mut prefix = room_id.to_string().as_bytes().to_vec();
|
||||
let mut prefix = room_id.as_bytes().to_vec();
|
||||
prefix.push(0xff);
|
||||
|
||||
self.aliasid_alias
|
||||
|
@ -1119,16 +1119,16 @@ impl Rooms {
|
|||
|
||||
pub fn set_public(&self, room_id: &RoomId, public: bool) -> Result<()> {
|
||||
if public {
|
||||
self.publicroomids.insert(room_id.to_string(), &[])?;
|
||||
self.publicroomids.insert(room_id.as_bytes(), &[])?;
|
||||
} else {
|
||||
self.publicroomids.remove(room_id.to_string())?;
|
||||
self.publicroomids.remove(room_id.as_bytes())?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn is_public_room(&self, room_id: &RoomId) -> Result<bool> {
|
||||
Ok(self.publicroomids.contains_key(room_id.to_string())?)
|
||||
Ok(self.publicroomids.contains_key(room_id.as_bytes())?)
|
||||
}
|
||||
|
||||
pub fn public_rooms(&self) -> impl Iterator<Item = Result<RoomId>> {
|
||||
|
@ -1147,7 +1147,7 @@ impl Rooms {
|
|||
room_id: &RoomId,
|
||||
search_string: &str,
|
||||
) -> Result<(impl Iterator<Item = IVec> + 'a, Vec<String>)> {
|
||||
let mut prefix = room_id.to_string().as_bytes().to_vec();
|
||||
let mut prefix = room_id.as_bytes().to_vec();
|
||||
prefix.push(0xff);
|
||||
|
||||
let words = search_string
|
||||
|
@ -1233,7 +1233,7 @@ impl Rooms {
|
|||
/// Returns an iterator over all joined members of a room.
|
||||
pub fn room_members(&self, room_id: &RoomId) -> impl Iterator<Item = Result<UserId>> {
|
||||
self.roomuserid_joined
|
||||
.scan_prefix(room_id.to_string())
|
||||
.scan_prefix(room_id.as_bytes())
|
||||
.keys()
|
||||
.map(|key| {
|
||||
Ok(UserId::try_from(
|
||||
|
@ -1254,7 +1254,7 @@ impl Rooms {
|
|||
/// Returns an iterator over all invited members of a room.
|
||||
pub fn room_members_invited(&self, room_id: &RoomId) -> impl Iterator<Item = Result<UserId>> {
|
||||
self.roomuserid_invited
|
||||
.scan_prefix(room_id.to_string())
|
||||
.scan_prefix(room_id.as_bytes())
|
||||
.keys()
|
||||
.map(|key| {
|
||||
Ok(UserId::try_from(
|
||||
|
@ -1275,7 +1275,7 @@ impl Rooms {
|
|||
/// Returns an iterator over all rooms this user joined.
|
||||
pub fn rooms_joined(&self, user_id: &UserId) -> impl Iterator<Item = Result<RoomId>> {
|
||||
self.userroomid_joined
|
||||
.scan_prefix(user_id.to_string())
|
||||
.scan_prefix(user_id.as_bytes())
|
||||
.keys()
|
||||
.map(|key| {
|
||||
Ok(RoomId::try_from(
|
||||
|
@ -1296,7 +1296,7 @@ impl Rooms {
|
|||
/// Returns an iterator over all rooms a user was invited to.
|
||||
pub fn rooms_invited(&self, user_id: &UserId) -> impl Iterator<Item = Result<RoomId>> {
|
||||
self.userroomid_invited
|
||||
.scan_prefix(&user_id.to_string())
|
||||
.scan_prefix(&user_id.as_bytes())
|
||||
.keys()
|
||||
.map(|key| {
|
||||
Ok(RoomId::try_from(
|
||||
|
@ -1317,7 +1317,7 @@ impl Rooms {
|
|||
/// Returns an iterator over all rooms a user left.
|
||||
pub fn rooms_left(&self, user_id: &UserId) -> impl Iterator<Item = Result<RoomId>> {
|
||||
self.userroomid_left
|
||||
.scan_prefix(&user_id.to_string())
|
||||
.scan_prefix(&user_id.as_bytes())
|
||||
.keys()
|
||||
.map(|key| {
|
||||
Ok(RoomId::try_from(
|
||||
|
@ -1336,25 +1336,25 @@ impl Rooms {
|
|||
}
|
||||
|
||||
pub fn is_joined(&self, user_id: &UserId, room_id: &RoomId) -> Result<bool> {
|
||||
let mut userroom_id = user_id.to_string().as_bytes().to_vec();
|
||||
let mut userroom_id = user_id.as_bytes().to_vec();
|
||||
userroom_id.push(0xff);
|
||||
userroom_id.extend_from_slice(room_id.to_string().as_bytes());
|
||||
userroom_id.extend_from_slice(room_id.as_bytes());
|
||||
|
||||
Ok(self.userroomid_joined.get(userroom_id)?.is_some())
|
||||
}
|
||||
|
||||
pub fn is_invited(&self, user_id: &UserId, room_id: &RoomId) -> Result<bool> {
|
||||
let mut userroom_id = user_id.to_string().as_bytes().to_vec();
|
||||
let mut userroom_id = user_id.as_bytes().to_vec();
|
||||
userroom_id.push(0xff);
|
||||
userroom_id.extend_from_slice(room_id.to_string().as_bytes());
|
||||
userroom_id.extend_from_slice(room_id.as_bytes());
|
||||
|
||||
Ok(self.userroomid_invited.get(userroom_id)?.is_some())
|
||||
}
|
||||
|
||||
pub fn is_left(&self, user_id: &UserId, room_id: &RoomId) -> Result<bool> {
|
||||
let mut userroom_id = user_id.to_string().as_bytes().to_vec();
|
||||
let mut userroom_id = user_id.as_bytes().to_vec();
|
||||
userroom_id.push(0xff);
|
||||
userroom_id.extend_from_slice(room_id.to_string().as_bytes());
|
||||
userroom_id.extend_from_slice(room_id.as_bytes());
|
||||
|
||||
Ok(self.userroomid_left.get(userroom_id)?.is_some())
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue