Upgrade ruma

This commit is contained in:
Jonas Platte 2020-07-26 15:41:28 +02:00
parent f8544bf6e3
commit 09561ccea3
No known key found for this signature in database
GPG key ID: 7D261D771D915378
14 changed files with 154 additions and 180 deletions

View file

@ -1,8 +1,8 @@
use crate::{utils, Error, Result};
use ruma::{
api::client::error::ErrorKind,
events::{AnyEvent as EduEvent, EventJson, EventType},
identifiers::{RoomId, UserId},
events::{AnyEvent as EduEvent, EventType},
Raw, RoomId, UserId,
};
use std::{collections::HashMap, convert::TryFrom};
@ -81,7 +81,7 @@ impl AccountData {
room_id: Option<&RoomId>,
user_id: &UserId,
kind: &EventType,
) -> Result<Option<EventJson<EduEvent>>> {
) -> Result<Option<Raw<EduEvent>>> {
Ok(self.all(room_id, user_id)?.remove(kind))
}
@ -91,7 +91,7 @@ impl AccountData {
room_id: Option<&RoomId>,
user_id: &UserId,
since: u64,
) -> Result<HashMap<EventType, EventJson<EduEvent>>> {
) -> Result<HashMap<EventType, Raw<EduEvent>>> {
let mut userdata = HashMap::new();
let mut prefix = room_id
@ -121,7 +121,7 @@ impl AccountData {
.map_err(|_| Error::bad_database("RoomUserData ID in db is invalid."))?,
)
.map_err(|_| Error::bad_database("RoomUserData ID in db is invalid."))?,
serde_json::from_slice::<EventJson<EduEvent>>(&v).map_err(|_| {
serde_json::from_slice::<Raw<EduEvent>>(&v).map_err(|_| {
Error::bad_database("Database contains invalid account data.")
})?,
))
@ -139,7 +139,7 @@ impl AccountData {
&self,
room_id: Option<&RoomId>,
user_id: &UserId,
) -> Result<HashMap<EventType, EventJson<EduEvent>>> {
) -> Result<HashMap<EventType, Raw<EduEvent>>> {
self.changes_since(room_id, user_id, 0)
}
}

View file

@ -1,5 +1,5 @@
use crate::{Error, Result};
use ruma::events::EventJson;
use ruma::Raw;
pub struct GlobalEdus {
//pub globalallid_globalall: sled::Tree, // ToDevice, GlobalAllId = UserId + Count
@ -47,8 +47,7 @@ impl GlobalEdus {
pub fn presence_since(
&self,
since: u64,
) -> Result<impl Iterator<Item = Result<EventJson<ruma::events::presence::PresenceEvent>>>>
{
) -> Result<impl Iterator<Item = Result<Raw<ruma::events::presence::PresenceEvent>>>> {
let first_possible_edu = (since + 1).to_be_bytes().to_vec(); // +1 so we don't send the event at since
Ok(self

View file

@ -1,7 +1,7 @@
use std::convert::TryInto;
use crate::{utils, Error, Result};
use ruma::identifiers::ServerName;
use ruma::ServerName;
pub const COUNTER: &str = "c";
pub struct Globals {

View file

@ -4,7 +4,7 @@ use ruma::{
error::ErrorKind,
r0::backup::{BackupAlgorithm, KeyData, Sessions},
},
identifiers::{RoomId, UserId},
{RoomId, UserId},
};
use std::{collections::BTreeMap, convert::TryFrom};

View file

@ -12,9 +12,9 @@ use ruma::{
power_levels::{self, PowerLevelsEventContent},
redaction,
},
EventJson, EventType,
EventType,
},
identifiers::{EventId, RoomAliasId, RoomId, UserId},
EventId, Raw, RoomAliasId, RoomId, UserId,
};
use sled::IVec;
use std::{
@ -287,28 +287,24 @@ impl Rooms {
})
},
|power_levels| {
Ok(
serde_json::from_value::<EventJson<PowerLevelsEventContent>>(
power_levels.content.clone(),
)
.expect("EventJson::from_value always works.")
.deserialize()
.map_err(|_| Error::bad_database("Invalid PowerLevels event in db."))?,
Ok(serde_json::from_value::<Raw<PowerLevelsEventContent>>(
power_levels.content.clone(),
)
.expect("Raw::from_value always works.")
.deserialize()
.map_err(|_| Error::bad_database("Invalid PowerLevels event in db."))?)
},
)?;
let sender_membership = self
.room_state_get(&room_id, &EventType::RoomMember, &sender.to_string())?
.map_or(Ok::<_, Error>(member::MembershipState::Leave), |pdu| {
Ok(
serde_json::from_value::<EventJson<member::MemberEventContent>>(
pdu.content.clone(),
)
.expect("EventJson::from_value always works.")
.deserialize()
.map_err(|_| Error::bad_database("Invalid Member event in db."))?
.membership,
Ok(serde_json::from_value::<Raw<member::MemberEventContent>>(
pdu.content.clone(),
)
.expect("Raw::from_value always works.")
.deserialize()
.map_err(|_| Error::bad_database("Invalid Member event in db."))?
.membership)
})?;
let sender_power = power_levels.users.get(&sender).map_or_else(
@ -339,24 +335,21 @@ impl Rooms {
&target_user_id.to_string(),
)?
.map_or(Ok::<_, Error>(member::MembershipState::Leave), |pdu| {
Ok(
serde_json::from_value::<EventJson<member::MemberEventContent>>(
pdu.content.clone(),
)
.expect("EventJson::from_value always works.")
.deserialize()
.map_err(|_| Error::bad_database("Invalid Member event in db."))?
.membership,
Ok(serde_json::from_value::<Raw<member::MemberEventContent>>(
pdu.content.clone(),
)
.expect("Raw::from_value always works.")
.deserialize()
.map_err(|_| Error::bad_database("Invalid Member event in db."))?
.membership)
})?;
let target_membership = serde_json::from_value::<
EventJson<member::MemberEventContent>,
>(content.clone())
.expect("EventJson::from_value always works.")
.deserialize()
.map_err(|_| Error::bad_database("Invalid Member event in db."))?
.membership;
let target_membership =
serde_json::from_value::<Raw<member::MemberEventContent>>(content.clone())
.expect("Raw::from_value always works.")
.deserialize()
.map_err(|_| Error::bad_database("Invalid Member event in db."))?
.membership;
let target_power = power_levels.users.get(&target_user_id).map_or_else(
|| {
@ -374,9 +367,9 @@ impl Rooms {
self.room_state_get(&room_id, &EventType::RoomJoinRules, "")?
.map_or(Ok::<_, Error>(join_rules::JoinRule::Public), |pdu| {
Ok(serde_json::from_value::<
EventJson<join_rules::JoinRulesEventContent>,
Raw<join_rules::JoinRulesEventContent>,
>(pdu.content.clone())
.expect("EventJson::from_value always works.")
.expect("Raw::from_value always works.")
.deserialize()
.map_err(|_| {
Error::bad_database("Database contains invalid JoinRules event")
@ -581,18 +574,17 @@ impl Rooms {
EventType::RoomRedaction => {
if let Some(redact_id) = &redacts {
// TODO: Reason
let _reason = serde_json::from_value::<
EventJson<redaction::RedactionEventContent>,
>(content)
.expect("EventJson::from_value always works.")
.deserialize()
.map_err(|_| {
Error::BadRequest(
ErrorKind::InvalidParam,
"Invalid redaction event content.",
)
})?
.reason;
let _reason =
serde_json::from_value::<Raw<redaction::RedactionEventContent>>(content)
.expect("Raw::from_value always works.")
.deserialize()
.map_err(|_| {
Error::BadRequest(
ErrorKind::InvalidParam,
"Invalid redaction event content.",
)
})?
.reason;
self.redact_pdu(&redact_id)?;
}

View file

@ -1,7 +1,7 @@
use crate::{utils, Error, Result};
use ruma::{
events::{AnyEvent as EduEvent, EventJson, SyncEphemeralRoomEvent},
identifiers::{RoomId, UserId},
events::{AnyEvent as EduEvent, SyncEphemeralRoomEvent},
Raw, RoomId, UserId,
};
use std::convert::TryFrom;
@ -61,8 +61,7 @@ impl RoomEdus {
&self,
room_id: &RoomId,
since: u64,
) -> Result<impl Iterator<Item = Result<EventJson<ruma::events::AnySyncEphemeralRoomEvent>>>>
{
) -> Result<impl Iterator<Item = Result<Raw<ruma::events::AnySyncEphemeralRoomEvent>>>> {
let mut prefix = room_id.to_string().as_bytes().to_vec();
prefix.push(0xff);

View file

@ -4,7 +4,7 @@ use ruma::{
error::ErrorKind,
r0::uiaa::{AuthData, UiaaInfo},
},
identifiers::{DeviceId, UserId},
DeviceId, UserId,
};
pub struct Uiaa {
@ -149,7 +149,7 @@ impl Uiaa {
) -> Result<()> {
let mut userdeviceid = user_id.to_string().as_bytes().to_vec();
userdeviceid.push(0xff);
userdeviceid.extend_from_slice(device_id.as_str().as_bytes());
userdeviceid.extend_from_slice(device_id.as_bytes());
if let Some(uiaainfo) = uiaainfo {
self.userdeviceid_uiaainfo.insert(
@ -171,7 +171,7 @@ impl Uiaa {
) -> Result<UiaaInfo> {
let mut userdeviceid = user_id.to_string().as_bytes().to_vec();
userdeviceid.push(0xff);
userdeviceid.extend_from_slice(device_id.as_str().as_bytes());
userdeviceid.extend_from_slice(device_id.as_bytes());
let uiaainfo = serde_json::from_slice::<UiaaInfo>(
&self

View file

@ -8,8 +8,8 @@ use ruma::{
keys::{AlgorithmAndDeviceId, CrossSigningKey, DeviceKeys, KeyAlgorithm, OneTimeKey},
},
},
events::{AnyToDeviceEvent, EventJson, EventType},
identifiers::{DeviceId, UserId},
events::{AnyToDeviceEvent, EventType},
DeviceId, Raw, UserId,
};
use std::{collections::BTreeMap, convert::TryFrom, mem, time::SystemTime};
@ -177,7 +177,7 @@ impl Users {
let mut userdeviceid = user_id.to_string().as_bytes().to_vec();
userdeviceid.push(0xff);
userdeviceid.extend_from_slice(device_id.as_str().as_bytes());
userdeviceid.extend_from_slice(device_id.as_bytes());
self.userdeviceid_metadata.insert(
userdeviceid,
@ -200,7 +200,7 @@ impl Users {
pub fn remove_device(&self, user_id: &UserId, device_id: &DeviceId) -> Result<()> {
let mut userdeviceid = user_id.to_string().as_bytes().to_vec();
userdeviceid.push(0xff);
userdeviceid.extend_from_slice(device_id.as_str().as_bytes());
userdeviceid.extend_from_slice(device_id.as_bytes());
// Remove tokens
if let Some(old_token) = self.userdeviceid_token.remove(&userdeviceid)? {
@ -246,7 +246,7 @@ impl Users {
fn set_token(&self, user_id: &UserId, device_id: &DeviceId, token: &str) -> Result<()> {
let mut userdeviceid = user_id.to_string().as_bytes().to_vec();
userdeviceid.push(0xff);
userdeviceid.extend_from_slice(device_id.as_str().as_bytes());
userdeviceid.extend_from_slice(device_id.as_bytes());
// All devices have metadata
assert!(self.userdeviceid_metadata.get(&userdeviceid)?.is_some());
@ -273,7 +273,7 @@ impl Users {
) -> Result<()> {
let mut key = user_id.to_string().as_bytes().to_vec();
key.push(0xff);
key.extend_from_slice(device_id.as_str().as_bytes());
key.extend_from_slice(device_id.as_bytes());
// All devices have metadata
// Only existing devices should be able to call this.
@ -305,7 +305,7 @@ impl Users {
) -> Result<Option<(AlgorithmAndDeviceId, OneTimeKey)>> {
let mut prefix = user_id.to_string().as_bytes().to_vec();
prefix.push(0xff);
prefix.extend_from_slice(device_id.as_str().as_bytes());
prefix.extend_from_slice(device_id.as_bytes());
prefix.push(0xff);
prefix.push(b'"'); // Annoying quotation mark
prefix.extend_from_slice(key_algorithm.to_string().as_bytes());
@ -340,7 +340,7 @@ impl Users {
) -> Result<BTreeMap<KeyAlgorithm, UInt>> {
let mut userdeviceid = user_id.to_string().as_bytes().to_vec();
userdeviceid.push(0xff);
userdeviceid.extend_from_slice(device_id.as_str().as_bytes());
userdeviceid.extend_from_slice(device_id.as_bytes());
let mut counts = BTreeMap::new();
@ -375,7 +375,7 @@ impl Users {
) -> Result<()> {
let mut userdeviceid = user_id.to_string().as_bytes().to_vec();
userdeviceid.push(0xff);
userdeviceid.extend_from_slice(device_id.as_str().as_bytes());
userdeviceid.extend_from_slice(device_id.as_bytes());
self.keyid_key.insert(
&userdeviceid,
@ -556,7 +556,7 @@ impl Users {
) -> Result<Option<DeviceKeys>> {
let mut key = user_id.to_string().as_bytes().to_vec();
key.push(0xff);
key.extend_from_slice(device_id.as_str().as_bytes());
key.extend_from_slice(device_id.as_bytes());
self.keyid_key.get(key)?.map_or(Ok(None), |bytes| {
Ok(Some(serde_json::from_slice(&bytes).map_err(|_| {
@ -643,7 +643,7 @@ impl Users {
) -> Result<()> {
let mut key = target_user_id.to_string().as_bytes().to_vec();
key.push(0xff);
key.extend_from_slice(target_device_id.as_str().as_bytes());
key.extend_from_slice(target_device_id.as_bytes());
key.push(0xff);
key.extend_from_slice(&globals.next_count()?.to_be_bytes());
@ -664,12 +664,12 @@ impl Users {
&self,
user_id: &UserId,
device_id: &DeviceId,
) -> Result<Vec<EventJson<AnyToDeviceEvent>>> {
) -> Result<Vec<Raw<AnyToDeviceEvent>>> {
let mut events = Vec::new();
let mut prefix = user_id.to_string().as_bytes().to_vec();
prefix.push(0xff);
prefix.extend_from_slice(device_id.as_str().as_bytes());
prefix.extend_from_slice(device_id.as_bytes());
prefix.push(0xff);
for value in self.todeviceid_events.scan_prefix(&prefix).values() {
@ -690,7 +690,7 @@ impl Users {
) -> Result<()> {
let mut prefix = user_id.to_string().as_bytes().to_vec();
prefix.push(0xff);
prefix.extend_from_slice(device_id.as_ref().as_bytes());
prefix.extend_from_slice(device_id.as_bytes());
prefix.push(0xff);
let mut last = prefix.clone();
@ -725,7 +725,7 @@ impl Users {
) -> Result<()> {
let mut userdeviceid = user_id.to_string().as_bytes().to_vec();
userdeviceid.push(0xff);
userdeviceid.extend_from_slice(device_id.as_str().as_bytes());
userdeviceid.extend_from_slice(device_id.as_bytes());
// Only existing devices should be able to call this.
assert!(self.userdeviceid_metadata.get(&userdeviceid)?.is_some());
@ -748,7 +748,7 @@ impl Users {
) -> Result<Option<Device>> {
let mut userdeviceid = user_id.to_string().as_bytes().to_vec();
userdeviceid.push(0xff);
userdeviceid.extend_from_slice(device_id.as_str().as_bytes());
userdeviceid.extend_from_slice(device_id.as_bytes());
self.userdeviceid_metadata
.get(&userdeviceid)?