chore: get rid of warnings
parent
e50f2864de
commit
16eed1d8c2
|
@ -267,12 +267,10 @@ pub async fn get_backup_key_session_route(
|
||||||
let key_data = db
|
let key_data = db
|
||||||
.key_backups
|
.key_backups
|
||||||
.get_session(&sender_user, &body.version, &body.room_id, &body.session_id)?
|
.get_session(&sender_user, &body.version, &body.room_id, &body.session_id)?
|
||||||
.ok_or_else(|| {
|
.ok_or(Error::BadRequest(
|
||||||
Error::BadRequest(
|
ErrorKind::NotFound,
|
||||||
ErrorKind::NotFound,
|
"Backup key not found for this user's session.",
|
||||||
"Backup key not found for this user's session.",
|
))?;
|
||||||
)
|
|
||||||
})?;
|
|
||||||
|
|
||||||
Ok(get_backup_key_session::Response { key_data }.into())
|
Ok(get_backup_key_session::Response { key_data }.into())
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,10 @@ use crate::{ConduitResult, Database, Error, Ruma};
|
||||||
use ruma::{
|
use ruma::{
|
||||||
api::client::{
|
api::client::{
|
||||||
error::ErrorKind,
|
error::ErrorKind,
|
||||||
r0::config::{get_room_account_data, get_global_account_data, set_room_account_data, set_global_account_data},
|
r0::config::{
|
||||||
|
get_global_account_data, get_room_account_data, set_global_account_data,
|
||||||
|
set_room_account_data,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
events::{custom::CustomEventContent, BasicEvent},
|
events::{custom::CustomEventContent, BasicEvent},
|
||||||
serde::Raw,
|
serde::Raw,
|
||||||
|
@ -45,7 +48,10 @@ pub async fn set_global_account_data_route(
|
||||||
|
|
||||||
#[cfg_attr(
|
#[cfg_attr(
|
||||||
feature = "conduit_bin",
|
feature = "conduit_bin",
|
||||||
put("/_matrix/client/r0/user/<_>/rooms/<_>/account_data/<_>", data = "<body>")
|
put(
|
||||||
|
"/_matrix/client/r0/user/<_>/rooms/<_>/account_data/<_>",
|
||||||
|
data = "<body>"
|
||||||
|
)
|
||||||
)]
|
)]
|
||||||
#[tracing::instrument(skip(db, body))]
|
#[tracing::instrument(skip(db, body))]
|
||||||
pub async fn set_room_account_data_route(
|
pub async fn set_room_account_data_route(
|
||||||
|
@ -97,7 +103,10 @@ pub async fn get_global_account_data_route(
|
||||||
|
|
||||||
#[cfg_attr(
|
#[cfg_attr(
|
||||||
feature = "conduit_bin",
|
feature = "conduit_bin",
|
||||||
get("/_matrix/client/r0/user/<_>/rooms/<_>/account_data/<_>", data = "<body>")
|
get(
|
||||||
|
"/_matrix/client/r0/user/<_>/rooms/<_>/account_data/<_>",
|
||||||
|
data = "<body>"
|
||||||
|
)
|
||||||
)]
|
)]
|
||||||
#[tracing::instrument(skip(db, body))]
|
#[tracing::instrument(skip(db, body))]
|
||||||
pub async fn get_room_account_data_route(
|
pub async fn get_room_account_data_route(
|
||||||
|
@ -108,7 +117,11 @@ pub async fn get_room_account_data_route(
|
||||||
|
|
||||||
let data = db
|
let data = db
|
||||||
.account_data
|
.account_data
|
||||||
.get::<Raw<ruma::events::AnyBasicEvent>>(Some(&body.room_id), sender_user, body.event_type.clone().into())?
|
.get::<Raw<ruma::events::AnyBasicEvent>>(
|
||||||
|
Some(&body.room_id),
|
||||||
|
sender_user,
|
||||||
|
body.event_type.clone().into(),
|
||||||
|
)?
|
||||||
.ok_or(Error::BadRequest(ErrorKind::NotFound, "Data not found."))?;
|
.ok_or(Error::BadRequest(ErrorKind::NotFound, "Data not found."))?;
|
||||||
|
|
||||||
db.flush().await?;
|
db.flush().await?;
|
||||||
|
|
|
@ -136,9 +136,7 @@ pub async fn sync_events_route(
|
||||||
.map(|since_shortstatehash| {
|
.map(|since_shortstatehash| {
|
||||||
Ok::<_, Error>(
|
Ok::<_, Error>(
|
||||||
since_shortstatehash
|
since_shortstatehash
|
||||||
.map(|since_shortstatehash| {
|
.map(|since_shortstatehash| db.rooms.state_full(since_shortstatehash))
|
||||||
db.rooms.state_full(&room_id, since_shortstatehash)
|
|
||||||
})
|
|
||||||
.transpose()?,
|
.transpose()?,
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
@ -512,12 +510,7 @@ pub async fn sync_events_route(
|
||||||
})
|
})
|
||||||
.and_then(|shortstatehash| {
|
.and_then(|shortstatehash| {
|
||||||
db.rooms
|
db.rooms
|
||||||
.state_get(
|
.state_get(shortstatehash, &EventType::RoomMember, sender_user.as_str())
|
||||||
&room_id,
|
|
||||||
shortstatehash,
|
|
||||||
&EventType::RoomMember,
|
|
||||||
sender_user.as_str(),
|
|
||||||
)
|
|
||||||
.ok()?
|
.ok()?
|
||||||
.ok_or_else(|| Error::bad_database("State hash in db doesn't have a state."))
|
.ok_or_else(|| Error::bad_database("State hash in db doesn't have a state."))
|
||||||
.ok()
|
.ok()
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
use crate::ConduitResult;
|
use crate::ConduitResult;
|
||||||
use ruma::api::client::r0::thirdparty::get_protocols;
|
use ruma::api::client::r0::thirdparty::get_protocols;
|
||||||
|
|
||||||
use log::warn;
|
|
||||||
#[cfg(feature = "conduit_bin")]
|
#[cfg(feature = "conduit_bin")]
|
||||||
use rocket::get;
|
use rocket::get;
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
|
|
@ -55,9 +55,7 @@ impl Appservice {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn iter_all<'a>(
|
pub fn iter_all(&self) -> impl Iterator<Item = Result<(String, serde_yaml::Value)>> + '_ {
|
||||||
&'a self,
|
|
||||||
) -> impl Iterator<Item = Result<(String, serde_yaml::Value)>> + 'a {
|
|
||||||
self.iter_ids().filter_map(|id| id.ok()).map(move |id| {
|
self.iter_ids().filter_map(|id| id.ok()).map(move |id| {
|
||||||
Ok((
|
Ok((
|
||||||
id.clone(),
|
id.clone(),
|
||||||
|
|
|
@ -262,7 +262,7 @@ impl Media {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
image.thumbnail_exact(dbg!(exact_width), dbg!(exact_height))
|
image.thumbnail_exact(exact_width, exact_height)
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut thumbnail_bytes = Vec::new();
|
let mut thumbnail_bytes = Vec::new();
|
||||||
|
|
|
@ -108,7 +108,6 @@ impl Rooms {
|
||||||
|
|
||||||
pub fn state_full(
|
pub fn state_full(
|
||||||
&self,
|
&self,
|
||||||
room_id: &RoomId,
|
|
||||||
shortstatehash: u64,
|
shortstatehash: u64,
|
||||||
) -> Result<BTreeMap<(EventType, String), PduEvent>> {
|
) -> Result<BTreeMap<(EventType, String), PduEvent>> {
|
||||||
Ok(self
|
Ok(self
|
||||||
|
@ -151,7 +150,6 @@ impl Rooms {
|
||||||
#[tracing::instrument(skip(self))]
|
#[tracing::instrument(skip(self))]
|
||||||
pub fn state_get(
|
pub fn state_get(
|
||||||
&self,
|
&self,
|
||||||
room_id: &RoomId,
|
|
||||||
shortstatehash: u64,
|
shortstatehash: u64,
|
||||||
event_type: &EventType,
|
event_type: &EventType,
|
||||||
state_key: &str,
|
state_key: &str,
|
||||||
|
@ -257,11 +255,11 @@ impl Rooms {
|
||||||
/// Generate a new StateHash.
|
/// Generate a new StateHash.
|
||||||
///
|
///
|
||||||
/// A unique hash made from hashing all PDU ids of the state joined with 0xff.
|
/// A unique hash made from hashing all PDU ids of the state joined with 0xff.
|
||||||
fn calculate_hash(&self, bytes_list: &[&[u8]]) -> Result<StateHashId> {
|
fn calculate_hash(&self, bytes_list: &[&[u8]]) -> StateHashId {
|
||||||
// We only hash the pdu's event ids, not the whole pdu
|
// We only hash the pdu's event ids, not the whole pdu
|
||||||
let bytes = bytes_list.join(&0xff);
|
let bytes = bytes_list.join(&0xff);
|
||||||
let hash = digest::digest(&digest::SHA256, &bytes);
|
let hash = digest::digest(&digest::SHA256, &bytes);
|
||||||
Ok(hash.as_ref().into())
|
hash.as_ref().into()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Checks if a room exists.
|
/// Checks if a room exists.
|
||||||
|
@ -291,7 +289,7 @@ impl Rooms {
|
||||||
.values()
|
.values()
|
||||||
.map(|event_id| event_id.as_bytes())
|
.map(|event_id| event_id.as_bytes())
|
||||||
.collect::<Vec<_>>(),
|
.collect::<Vec<_>>(),
|
||||||
)?;
|
);
|
||||||
|
|
||||||
let shortstatehash = match self.statehash_shortstatehash.get(&state_hash)? {
|
let shortstatehash = match self.statehash_shortstatehash.get(&state_hash)? {
|
||||||
Some(shortstatehash) => {
|
Some(shortstatehash) => {
|
||||||
|
@ -353,7 +351,7 @@ impl Rooms {
|
||||||
room_id: &RoomId,
|
room_id: &RoomId,
|
||||||
) -> Result<BTreeMap<(EventType, String), PduEvent>> {
|
) -> Result<BTreeMap<(EventType, String), PduEvent>> {
|
||||||
if let Some(current_shortstatehash) = self.current_shortstatehash(room_id)? {
|
if let Some(current_shortstatehash) = self.current_shortstatehash(room_id)? {
|
||||||
self.state_full(&room_id, current_shortstatehash)
|
self.state_full(current_shortstatehash)
|
||||||
} else {
|
} else {
|
||||||
Ok(BTreeMap::new())
|
Ok(BTreeMap::new())
|
||||||
}
|
}
|
||||||
|
@ -368,7 +366,7 @@ impl Rooms {
|
||||||
state_key: &str,
|
state_key: &str,
|
||||||
) -> Result<Option<PduEvent>> {
|
) -> Result<Option<PduEvent>> {
|
||||||
if let Some(current_shortstatehash) = self.current_shortstatehash(room_id)? {
|
if let Some(current_shortstatehash) = self.current_shortstatehash(room_id)? {
|
||||||
self.state_get(&room_id, current_shortstatehash, event_type, state_key)
|
self.state_get(current_shortstatehash, event_type, state_key)
|
||||||
} else {
|
} else {
|
||||||
Ok(None)
|
Ok(None)
|
||||||
}
|
}
|
||||||
|
@ -582,7 +580,7 @@ impl Rooms {
|
||||||
{
|
{
|
||||||
if let Some(shortstatehash) = self.pdu_shortstatehash(&pdu.event_id).unwrap() {
|
if let Some(shortstatehash) = self.pdu_shortstatehash(&pdu.event_id).unwrap() {
|
||||||
if let Some(prev_state) = self
|
if let Some(prev_state) = self
|
||||||
.state_get(&pdu.room_id, shortstatehash, &pdu.kind, &state_key)
|
.state_get(shortstatehash, &pdu.kind, &state_key)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
{
|
{
|
||||||
unsigned.insert(
|
unsigned.insert(
|
||||||
|
@ -849,7 +847,7 @@ impl Rooms {
|
||||||
.values()
|
.values()
|
||||||
.map(|event_id| &**event_id)
|
.map(|event_id| &**event_id)
|
||||||
.collect::<Vec<_>>(),
|
.collect::<Vec<_>>(),
|
||||||
)?;
|
);
|
||||||
|
|
||||||
let shortstatehash = match self.statehash_shortstatehash.get(&new_state_hash)? {
|
let shortstatehash = match self.statehash_shortstatehash.get(&new_state_hash)? {
|
||||||
Some(shortstatehash) => {
|
Some(shortstatehash) => {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use std::{
|
use std::{
|
||||||
collections::HashMap,
|
collections::HashMap,
|
||||||
convert::{TryFrom, TryInto},
|
convert::TryFrom,
|
||||||
fmt::Debug,
|
fmt::Debug,
|
||||||
sync::Arc,
|
sync::Arc,
|
||||||
time::{Duration, Instant, SystemTime},
|
time::{Duration, Instant, SystemTime},
|
||||||
|
@ -10,11 +10,11 @@ use crate::{
|
||||||
appservice_server, database::pusher, server_server, utils, Database, Error, PduEvent, Result,
|
appservice_server, database::pusher, server_server, utils, Database, Error, PduEvent, Result,
|
||||||
};
|
};
|
||||||
use federation::transactions::send_transaction_message;
|
use federation::transactions::send_transaction_message;
|
||||||
use log::{error, info, warn};
|
use log::{info, warn};
|
||||||
use ring::digest;
|
use ring::digest;
|
||||||
use rocket::futures::stream::{FuturesUnordered, StreamExt};
|
use rocket::futures::stream::{FuturesUnordered, StreamExt};
|
||||||
use ruma::{
|
use ruma::{
|
||||||
api::{appservice, client::r0::push::Pusher, federation, OutgoingRequest},
|
api::{appservice, federation, OutgoingRequest},
|
||||||
events::{push_rules, EventType},
|
events::{push_rules, EventType},
|
||||||
uint, ServerName, UInt, UserId,
|
uint, ServerName, UInt, UserId,
|
||||||
};
|
};
|
||||||
|
@ -264,7 +264,7 @@ impl Sending {
|
||||||
futures.push(
|
futures.push(
|
||||||
Self::handle_event(
|
Self::handle_event(
|
||||||
outgoing_kind,
|
outgoing_kind,
|
||||||
vec![pdu_id.into()],
|
vec![pdu_id],
|
||||||
&db,
|
&db,
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -395,18 +395,19 @@ impl Sending {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
let userid = UserId::try_from(utils::string_from_bytes(user).map_err(|e| {
|
let userid =
|
||||||
(
|
UserId::try_from(utils::string_from_bytes(user).map_err(|_| {
|
||||||
OutgoingKind::Push(user.clone(), pushkey.clone()),
|
(
|
||||||
Error::bad_database("Invalid push user string in db."),
|
OutgoingKind::Push(user.clone(), pushkey.clone()),
|
||||||
)
|
Error::bad_database("Invalid push user string in db."),
|
||||||
})?)
|
)
|
||||||
.map_err(|e| {
|
})?)
|
||||||
(
|
.map_err(|_| {
|
||||||
OutgoingKind::Push(user.clone(), pushkey.clone()),
|
(
|
||||||
Error::bad_database("Invalid push user id in db."),
|
OutgoingKind::Push(user.clone(), pushkey.clone()),
|
||||||
)
|
Error::bad_database("Invalid push user id in db."),
|
||||||
})?;
|
)
|
||||||
|
})?;
|
||||||
|
|
||||||
let mut senderkey = user.clone();
|
let mut senderkey = user.clone();
|
||||||
senderkey.push(0xff);
|
senderkey.push(0xff);
|
||||||
|
|
|
@ -21,10 +21,9 @@ use ruma::{
|
||||||
},
|
},
|
||||||
directory::{IncomingFilter, IncomingRoomNetwork},
|
directory::{IncomingFilter, IncomingRoomNetwork},
|
||||||
events::EventType,
|
events::EventType,
|
||||||
identifiers::{KeyId, KeyName},
|
|
||||||
serde::to_canonical_value,
|
serde::to_canonical_value,
|
||||||
signatures::{CanonicalJsonObject, CanonicalJsonValue, PublicKeyMap},
|
signatures::{CanonicalJsonObject, CanonicalJsonValue, PublicKeyMap},
|
||||||
EventId, RoomId, RoomVersionId, ServerName, ServerSigningKeyId, SigningKeyAlgorithm, UserId,
|
EventId, RoomId, RoomVersionId, ServerName, ServerSigningKeyId, UserId,
|
||||||
};
|
};
|
||||||
use state_res::{Event, EventMap, StateMap};
|
use state_res::{Event, EventMap, StateMap};
|
||||||
use std::{
|
use std::{
|
||||||
|
@ -788,23 +787,17 @@ pub async fn send_transaction_message_route<'a>(
|
||||||
|
|
||||||
// This will create the state after any state snapshot it builds
|
// This will create the state after any state snapshot it builds
|
||||||
// So current_state will have the incoming event inserted to it
|
// So current_state will have the incoming event inserted to it
|
||||||
let mut fork_states = match build_forward_extremity_snapshots(
|
let mut fork_states =
|
||||||
&db,
|
match build_forward_extremity_snapshots(&db, pdu.clone(), current_state, &extremities)
|
||||||
pdu.clone(),
|
.await
|
||||||
server_name,
|
{
|
||||||
current_state,
|
Ok(states) => states,
|
||||||
&extremities,
|
Err(_) => {
|
||||||
&pub_key_map,
|
resolved_map
|
||||||
&mut auth_cache,
|
.insert(event_id, Err("Failed to gather forward extremities".into()));
|
||||||
)
|
continue;
|
||||||
.await
|
}
|
||||||
{
|
};
|
||||||
Ok(states) => states,
|
|
||||||
Err(_) => {
|
|
||||||
resolved_map.insert(event_id, Err("Failed to gather forward extremities".into()));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Make this the state after.
|
// Make this the state after.
|
||||||
let mut state_after = state_at_event.clone();
|
let mut state_after = state_at_event.clone();
|
||||||
|
@ -1320,11 +1313,8 @@ pub(crate) async fn calculate_forward_extremities(
|
||||||
pub(crate) async fn build_forward_extremity_snapshots(
|
pub(crate) async fn build_forward_extremity_snapshots(
|
||||||
db: &Database,
|
db: &Database,
|
||||||
pdu: Arc<PduEvent>,
|
pdu: Arc<PduEvent>,
|
||||||
origin: &ServerName,
|
|
||||||
mut current_state: StateMap<Arc<PduEvent>>,
|
mut current_state: StateMap<Arc<PduEvent>>,
|
||||||
current_leaves: &[EventId],
|
current_leaves: &[EventId],
|
||||||
pub_key_map: &PublicKeyMap,
|
|
||||||
auth_cache: &mut EventMap<Arc<PduEvent>>,
|
|
||||||
) -> Result<BTreeSet<StateMap<Arc<PduEvent>>>> {
|
) -> Result<BTreeSet<StateMap<Arc<PduEvent>>>> {
|
||||||
let current_shortstatehash = db.rooms.current_shortstatehash(pdu.room_id())?;
|
let current_shortstatehash = db.rooms.current_shortstatehash(pdu.room_id())?;
|
||||||
|
|
||||||
|
@ -1354,7 +1344,7 @@ pub(crate) async fn build_forward_extremity_snapshots(
|
||||||
|
|
||||||
let mut state_before = db
|
let mut state_before = db
|
||||||
.rooms
|
.rooms
|
||||||
.state_full(pdu.room_id(), pdu_shortstatehash)?
|
.state_full(pdu_shortstatehash)?
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|(k, v)| ((k.0, Some(k.1)), Arc::new(v)))
|
.map(|(k, v)| ((k.0, Some(k.1)), Arc::new(v)))
|
||||||
.collect::<StateMap<_>>();
|
.collect::<StateMap<_>>();
|
||||||
|
@ -1396,9 +1386,9 @@ pub(crate) fn update_resolved_state(
|
||||||
new_state.insert(
|
new_state.insert(
|
||||||
(
|
(
|
||||||
ev_type,
|
ev_type,
|
||||||
state_k.ok_or_else(|| {
|
state_k.ok_or(Error::Conflict(
|
||||||
Error::Conflict("update_resolved_state: State contained non state event")
|
"update_resolved_state: State contained non state event",
|
||||||
})?,
|
))?,
|
||||||
),
|
),
|
||||||
pdu.event_id.clone(),
|
pdu.event_id.clone(),
|
||||||
);
|
);
|
||||||
|
@ -1426,9 +1416,9 @@ pub(crate) fn append_incoming_pdu(
|
||||||
new_state.insert(
|
new_state.insert(
|
||||||
(
|
(
|
||||||
ev_type.clone(),
|
ev_type.clone(),
|
||||||
state_k.clone().ok_or_else(|| {
|
state_k.clone().ok_or(Error::Conflict(
|
||||||
Error::Conflict("append_incoming_pdu: State contained non state event")
|
"append_incoming_pdu: State contained non state event",
|
||||||
})?,
|
))?,
|
||||||
),
|
),
|
||||||
state_pdu.event_id.clone(),
|
state_pdu.event_id.clone(),
|
||||||
);
|
);
|
||||||
|
@ -1600,26 +1590,22 @@ pub fn get_room_state_ids_route<'a>(
|
||||||
let mut todo = BTreeSet::new();
|
let mut todo = BTreeSet::new();
|
||||||
todo.insert(body.event_id.clone());
|
todo.insert(body.event_id.clone());
|
||||||
|
|
||||||
loop {
|
while let Some(event_id) = todo.iter().next().cloned() {
|
||||||
if let Some(event_id) = todo.iter().next().cloned() {
|
if let Some(pdu) = db.rooms.get_pdu(&event_id)? {
|
||||||
if let Some(pdu) = db.rooms.get_pdu(&event_id)? {
|
todo.extend(
|
||||||
todo.extend(
|
pdu.auth_events
|
||||||
pdu.auth_events
|
.clone()
|
||||||
.clone()
|
.into_iter()
|
||||||
.into_iter()
|
.collect::<BTreeSet<_>>()
|
||||||
.collect::<BTreeSet<_>>()
|
.difference(&auth_chain_ids)
|
||||||
.difference(&auth_chain_ids)
|
.cloned(),
|
||||||
.cloned(),
|
);
|
||||||
);
|
auth_chain_ids.extend(pdu.auth_events.into_iter());
|
||||||
auth_chain_ids.extend(pdu.auth_events.into_iter());
|
|
||||||
} else {
|
|
||||||
warn!("Could not find pdu mentioned in auth events.");
|
|
||||||
}
|
|
||||||
|
|
||||||
todo.remove(&event_id);
|
|
||||||
} else {
|
} else {
|
||||||
break;
|
warn!("Could not find pdu mentioned in auth events.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
todo.remove(&event_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(get_room_state_ids::v1::Response {
|
Ok(get_room_state_ids::v1::Response {
|
||||||
|
|
Loading…
Reference in New Issue