cargo clippy

Nyaaori/refactor-next
Nyaaori 2 years ago
parent ca82b2940d
commit f430b87459
No known key found for this signature in database
GPG Key ID: E7819C3ED4D1F82E

@ -333,7 +333,7 @@ pub async fn whoami_route(body: Ruma<whoami::v3::Request>) -> Result<whoami::v3:
Ok(whoami::v3::Response { Ok(whoami::v3::Response {
user_id: sender_user.clone(), user_id: sender_user.clone(),
device_id, device_id,
is_guest: services().users.is_deactivated(&sender_user)?, is_guest: services().users.is_deactivated(sender_user)?,
}) })
} }
@ -383,7 +383,7 @@ pub async fn deactivate_route(
} }
// Make the user leave all rooms before deactivation // Make the user leave all rooms before deactivation
client_server::leave_all_rooms(&sender_user).await?; client_server::leave_all_rooms(sender_user).await?;
// Remove devices and mark account as deactivated // Remove devices and mark account as deactivated
services().users.deactivate_account(sender_user)?; services().users.deactivate_account(sender_user)?;

@ -234,7 +234,7 @@ pub async fn get_key_changes_route(
services() services()
.users .users
.keys_changed( .keys_changed(
&room_id.to_string(), room_id.as_ref(),
body.from.parse().map_err(|_| { body.from.parse().map_err(|_| {
Error::BadRequest(ErrorKind::InvalidParam, "Invalid `from`.") Error::BadRequest(ErrorKind::InvalidParam, "Invalid `from`.")
})?, })?,
@ -264,7 +264,7 @@ pub(crate) async fn get_keys_helper<F: Fn(&UserId) -> bool>(
let mut get_over_federation = HashMap::new(); let mut get_over_federation = HashMap::new();
for (user_id, device_ids) in device_keys_input { for (user_id, device_ids) in device_keys_input {
let user_id: &UserId = &**user_id; let user_id: &UserId = user_id;
if user_id.server_name() != services().globals.server_name() { if user_id.server_name() != services().globals.server_name() {
get_over_federation get_over_federation

@ -62,15 +62,13 @@ pub async fn join_room_by_id_route(
servers.push(body.room_id.server_name().to_owned()); servers.push(body.room_id.server_name().to_owned());
let ret = join_room_by_id_helper( join_room_by_id_helper(
body.sender_user.as_deref(), body.sender_user.as_deref(),
&body.room_id, &body.room_id,
&servers, &servers,
body.third_party_signed.as_ref(), body.third_party_signed.as_ref(),
) )
.await; .await
ret
} }
/// # `POST /_matrix/client/r0/join/{roomIdOrAlias}` /// # `POST /_matrix/client/r0/join/{roomIdOrAlias}`
@ -171,7 +169,7 @@ pub async fn kick_user_route(
.room_state_get( .room_state_get(
&body.room_id, &body.room_id,
&StateEventType::RoomMember, &StateEventType::RoomMember,
&body.user_id.to_string(), body.user_id.as_ref(),
)? )?
.ok_or(Error::BadRequest( .ok_or(Error::BadRequest(
ErrorKind::BadState, ErrorKind::BadState,
@ -230,7 +228,7 @@ pub async fn ban_user_route(
.room_state_get( .room_state_get(
&body.room_id, &body.room_id,
&StateEventType::RoomMember, &StateEventType::RoomMember,
&body.user_id.to_string(), body.user_id.as_ref(),
)? )?
.map_or( .map_or(
Ok(RoomMemberEventContent { Ok(RoomMemberEventContent {
@ -297,7 +295,7 @@ pub async fn unban_user_route(
.room_state_get( .room_state_get(
&body.room_id, &body.room_id,
&StateEventType::RoomMember, &StateEventType::RoomMember,
&body.user_id.to_string(), body.user_id.as_ref(),
)? )?
.ok_or(Error::BadRequest( .ok_or(Error::BadRequest(
ErrorKind::BadState, ErrorKind::BadState,
@ -408,7 +406,7 @@ pub async fn get_member_events_route(
.await? .await?
.iter() .iter()
.filter(|(key, _)| key.0 == StateEventType::RoomMember) .filter(|(key, _)| key.0 == StateEventType::RoomMember)
.map(|(_, pdu)| pdu.to_member_event().into()) .map(|(_, pdu)| pdu.to_member_event())
.collect(), .collect(),
}) })
} }
@ -864,7 +862,7 @@ pub(crate) async fn invite_helper<'a>(
"${}", "${}",
ruma::signatures::reference_hash( ruma::signatures::reference_hash(
&pdu_json, &pdu_json,
&services().rooms.state.get_room_version(&room_id)? &services().rooms.state.get_room_version(room_id)?
) )
.expect("ruma can calculate reference hashes") .expect("ruma can calculate reference hashes")
); );
@ -878,7 +876,7 @@ pub(crate) async fn invite_helper<'a>(
create_invite::v2::Request { create_invite::v2::Request {
room_id, room_id,
event_id: expected_event_id, event_id: expected_event_id,
room_version: &services().rooms.state.get_room_version(&room_id)?, room_version: &services().rooms.state.get_room_version(room_id)?,
event: &PduEvent::convert_to_outgoing_federation_event(pdu_json.clone()), event: &PduEvent::convert_to_outgoing_federation_event(pdu_json.clone()),
invite_room_state: &invite_room_state, invite_room_state: &invite_room_state,
}, },
@ -938,7 +936,7 @@ pub(crate) async fn invite_helper<'a>(
if !services() if !services()
.rooms .rooms
.state_cache .state_cache
.is_joined(sender_user, &room_id)? .is_joined(sender_user, room_id)?
{ {
return Err(Error::BadRequest( return Err(Error::BadRequest(
ErrorKind::Forbidden, ErrorKind::Forbidden,

@ -1,8 +1,6 @@
use crate::{ use crate::{
api::client_server::invite_helper, service::pdu::PduBuilder, services, Error, Result, Ruma, api::client_server::invite_helper, service::pdu::PduBuilder, services, Error, Result, Ruma,
}; };
use ruma::serde::JsonObject;
use ruma::OwnedRoomAliasId;
use ruma::{ use ruma::{
api::client::{ api::client::{
error::ErrorKind, error::ErrorKind,
@ -23,7 +21,9 @@ use ruma::{
}, },
RoomEventType, StateEventType, RoomEventType, StateEventType,
}, },
int, CanonicalJsonObject, RoomAliasId, RoomId, int,
serde::JsonObject,
CanonicalJsonObject, OwnedRoomAliasId, RoomAliasId, RoomId,
}; };
use serde_json::{json, value::to_raw_value}; use serde_json::{json, value::to_raw_value};
use std::{cmp::max, collections::BTreeMap, sync::Arc}; use std::{cmp::max, collections::BTreeMap, sync::Arc};
@ -213,14 +213,11 @@ pub async fn create_room_route(
// 3. Power levels // 3. Power levels
// Figure out preset. We need it for preset specific events // Figure out preset. We need it for preset specific events
let preset = body let preset = body.preset.clone().unwrap_or(match &body.visibility {
.preset room::Visibility::Private => RoomPreset::PrivateChat,
.clone() room::Visibility::Public => RoomPreset::PublicChat,
.unwrap_or_else(|| match &body.visibility { _ => RoomPreset::PrivateChat, // Room visibility should not be custom
room::Visibility::Private => RoomPreset::PrivateChat, });
room::Visibility::Public => RoomPreset::PublicChat,
_ => RoomPreset::PrivateChat, // Room visibility should not be custom
});
let mut users = BTreeMap::new(); let mut users = BTreeMap::new();
users.insert(sender_user.clone(), int!(100)); users.insert(sender_user.clone(), int!(100));

@ -53,11 +53,11 @@ pub async fn login_route(body: Ruma<login::v3::IncomingRequest>) -> Result<login
} else { } else {
return Err(Error::BadRequest(ErrorKind::Forbidden, "Bad login type.")); return Err(Error::BadRequest(ErrorKind::Forbidden, "Bad login type."));
}; };
let user_id = UserId::parse_with_server_name( let user_id =
username.to_owned(), UserId::parse_with_server_name(username, services().globals.server_name())
services().globals.server_name(), .map_err(|_| {
) Error::BadRequest(ErrorKind::InvalidUsername, "Username is invalid.")
.map_err(|_| Error::BadRequest(ErrorKind::InvalidUsername, "Username is invalid."))?; })?;
let hash = services() let hash = services()
.users .users
.password_hash(&user_id)? .password_hash(&user_id)?

@ -207,7 +207,7 @@ async fn sync_helper(
device_list_updates.extend( device_list_updates.extend(
services() services()
.users .users
.keys_changed(&sender_user.to_string(), since, None) .keys_changed(sender_user.as_ref(), since, None)
.filter_map(|r| r.ok()), .filter_map(|r| r.ok()),
); );
@ -673,7 +673,7 @@ async fn sync_helper(
device_list_updates.extend( device_list_updates.extend(
services() services()
.users .users
.keys_changed(&room_id.to_string(), since, None) .keys_changed(room_id.as_ref(), since, None)
.filter_map(|r| r.ok()), .filter_map(|r| r.ok()),
); );
@ -951,8 +951,8 @@ async fn sync_helper(
}, },
presence: Presence { presence: Presence {
events: presence_updates events: presence_updates
.into_iter() .into_values()
.map(|(_, v)| Raw::new(&v).expect("PresenceEvent always serializes successfully")) .map(|v| Raw::new(&v).expect("PresenceEvent always serializes successfully"))
.collect(), .collect(),
}, },
account_data: GlobalAccountData { account_data: GlobalAccountData {

@ -58,7 +58,7 @@ pub async fn send_event_to_device_route(
services().users.add_to_device_event( services().users.add_to_device_event(
sender_user, sender_user,
target_user_id, target_user_id,
&target_device_id, target_device_id,
&body.event_type, &body.event_type,
event.deserialize_as().map_err(|_| { event.deserialize_as().map_err(|_| {
Error::BadRequest(ErrorKind::InvalidParam, "Event is invalid") Error::BadRequest(ErrorKind::InvalidParam, "Event is invalid")

@ -75,7 +75,7 @@ pub async fn search_users_route(
let user_is_in_shared_rooms = services() let user_is_in_shared_rooms = services()
.rooms .rooms
.user .user
.get_shared_rooms(vec![sender_user.clone(), user_id.clone()]) .get_shared_rooms(vec![sender_user.clone(), user_id])
.ok()? .ok()?
.next() .next()
.is_some(); .is_some();

@ -75,7 +75,7 @@ use tracing::{info, warn};
/// # Ok(()) /// # Ok(())
/// # } /// # }
/// ``` /// ```
#[derive(Clone, Debug, PartialEq)] #[derive(Clone, Debug, PartialEq, Eq)]
pub enum FedDest { pub enum FedDest {
Literal(SocketAddr), Literal(SocketAddr),
Named(String, String), Named(String, String),
@ -686,7 +686,7 @@ pub async fn send_transaction_message_route(
services() services()
.rooms .rooms
.event_handler .event_handler
.acl_check(&sender_servername, &room_id)?; .acl_check(sender_servername, &room_id)?;
let mutex = Arc::clone( let mutex = Arc::clone(
services() services()
@ -705,7 +705,7 @@ pub async fn send_transaction_message_route(
.rooms .rooms
.event_handler .event_handler
.handle_incoming_pdu( .handle_incoming_pdu(
&sender_servername, sender_servername,
&event_id, &event_id,
&room_id, &room_id,
value, value,
@ -974,7 +974,7 @@ pub async fn get_missing_events_route(
services() services()
.rooms .rooms
.event_handler .event_handler
.acl_check(&sender_servername, &body.room_id)?; .acl_check(sender_servername, &body.room_id)?;
let mut queued_events = body.latest_events.clone(); let mut queued_events = body.latest_events.clone();
let mut events = Vec::new(); let mut events = Vec::new();
@ -1053,7 +1053,7 @@ pub async fn get_event_authorization_route(
services() services()
.rooms .rooms
.event_handler .event_handler
.acl_check(&sender_servername, &body.room_id)?; .acl_check(sender_servername, &body.room_id)?;
let event = services() let event = services()
.rooms .rooms
@ -1112,7 +1112,7 @@ pub async fn get_room_state_route(
services() services()
.rooms .rooms
.event_handler .event_handler
.acl_check(&sender_servername, &body.room_id)?; .acl_check(sender_servername, &body.room_id)?;
let shortstatehash = services() let shortstatehash = services()
.rooms .rooms
@ -1128,8 +1128,8 @@ pub async fn get_room_state_route(
.state_accessor .state_accessor
.state_full_ids(shortstatehash) .state_full_ids(shortstatehash)
.await? .await?
.into_iter() .into_values()
.map(|(_, id)| { .map(|id| {
PduEvent::convert_to_outgoing_federation_event( PduEvent::convert_to_outgoing_federation_event(
services() services()
.rooms .rooms
@ -1193,7 +1193,7 @@ pub async fn get_room_state_ids_route(
services() services()
.rooms .rooms
.event_handler .event_handler
.acl_check(&sender_servername, &body.room_id)?; .acl_check(sender_servername, &body.room_id)?;
let shortstatehash = services() let shortstatehash = services()
.rooms .rooms
@ -1209,8 +1209,8 @@ pub async fn get_room_state_ids_route(
.state_accessor .state_accessor
.state_full_ids(shortstatehash) .state_full_ids(shortstatehash)
.await? .await?
.into_iter() .into_values()
.map(|(_, id)| (*id).to_owned()) .map(|id| (*id).to_owned())
.collect(); .collect();
let auth_chain_ids = services() let auth_chain_ids = services()
@ -1250,7 +1250,7 @@ pub async fn create_join_event_template_route(
services() services()
.rooms .rooms
.event_handler .event_handler
.acl_check(&sender_servername, &body.room_id)?; .acl_check(sender_servername, &body.room_id)?;
let mutex_state = Arc::clone( let mutex_state = Arc::clone(
services() services()
@ -1354,7 +1354,7 @@ async fn create_join_event(
services() services()
.rooms .rooms
.event_handler .event_handler
.acl_check(&sender_servername, room_id)?; .acl_check(sender_servername, room_id)?;
// TODO: Conduit does not implement restricted join rules yet, we always reject // TODO: Conduit does not implement restricted join rules yet, we always reject
let join_rules_event = services().rooms.state_accessor.room_state_get( let join_rules_event = services().rooms.state_accessor.room_state_get(
@ -1448,10 +1448,7 @@ async fn create_join_event(
let auth_chain_ids = services() let auth_chain_ids = services()
.rooms .rooms
.auth_chain .auth_chain
.get_auth_chain( .get_auth_chain(room_id, state_ids.values().cloned().collect())
room_id,
state_ids.iter().map(|(_, id)| id.clone()).collect(),
)
.await?; .await?;
let servers = services() let servers = services()
@ -1527,7 +1524,7 @@ pub async fn create_invite_route(
services() services()
.rooms .rooms
.event_handler .event_handler
.acl_check(&sender_servername, &body.room_id)?; .acl_check(sender_servername, &body.room_id)?;
if !services() if !services()
.globals .globals

@ -232,7 +232,7 @@ fn default_pdu_cache_capacity() -> u32 {
} }
fn default_cleanup_second_interval() -> u32 { fn default_cleanup_second_interval() -> u32 {
1 * 60 // every minute 60 // every minute
} }
fn default_max_request_size() -> u32 { fn default_max_request_size() -> u32 {

@ -193,7 +193,7 @@ impl KvTree for RocksDbEngineTree<'_> {
fn increment(&self, key: &[u8]) -> Result<Vec<u8>> { fn increment(&self, key: &[u8]) -> Result<Vec<u8>> {
let lock = self.write_lock.write().unwrap(); let lock = self.write_lock.write().unwrap();
let old = self.db.rocks.get_cf(&self.cf(), &key)?; let old = self.db.rocks.get_cf(&self.cf(), key)?;
let new = utils::increment(old.as_deref()).unwrap(); let new = utils::increment(old.as_deref()).unwrap();
self.db.rocks.put_cf(&self.cf(), key, &new)?; self.db.rocks.put_cf(&self.cf(), key, &new)?;

@ -48,13 +48,13 @@ pub struct Engine {
impl Engine { impl Engine {
fn prepare_conn(path: &Path, cache_size_kb: u32) -> Result<Connection> { fn prepare_conn(path: &Path, cache_size_kb: u32) -> Result<Connection> {
let conn = Connection::open(&path)?; let conn = Connection::open(path)?;
conn.pragma_update(Some(Main), "page_size", &2048)?; conn.pragma_update(Some(Main), "page_size", 2048)?;
conn.pragma_update(Some(Main), "journal_mode", &"WAL")?; conn.pragma_update(Some(Main), "journal_mode", "WAL")?;
conn.pragma_update(Some(Main), "synchronous", &"NORMAL")?; conn.pragma_update(Some(Main), "synchronous", "NORMAL")?;
conn.pragma_update(Some(Main), "cache_size", &(-i64::from(cache_size_kb)))?; conn.pragma_update(Some(Main), "cache_size", -i64::from(cache_size_kb))?;
conn.pragma_update(Some(Main), "wal_autocheckpoint", &0)?; conn.pragma_update(Some(Main), "wal_autocheckpoint", 0)?;
Ok(conn) Ok(conn)
} }
@ -75,7 +75,7 @@ impl Engine {
pub fn flush_wal(self: &Arc<Self>) -> Result<()> { pub fn flush_wal(self: &Arc<Self>) -> Result<()> {
self.write_lock() self.write_lock()
.pragma_update(Some(Main), "wal_checkpoint", &"RESTART")?; .pragma_update(Some(Main), "wal_checkpoint", "RESTART")?;
Ok(()) Ok(())
} }
} }

@ -134,7 +134,7 @@ impl service::globals::Data for KeyValueDatabase {
let mut parts = keypair_bytes.splitn(2, |&b| b == 0xff); let mut parts = keypair_bytes.splitn(2, |&b| b == 0xff);
let keypair = utils::string_from_bytes( utils::string_from_bytes(
// 1. version // 1. version
parts parts
.next() .next()
@ -151,9 +151,7 @@ impl service::globals::Data for KeyValueDatabase {
.and_then(|(version, key)| { .and_then(|(version, key)| {
Ed25519KeyPair::from_der(key, version) Ed25519KeyPair::from_der(key, version)
.map_err(|_| Error::bad_database("Private or public keys are invalid.")) .map_err(|_| Error::bad_database("Private or public keys are invalid."))
}); })
keypair
} }
fn remove_keypair(&self) -> Result<()> { fn remove_keypair(&self) -> Result<()> {
self.global.remove(b"keypair") self.global.remove(b"keypair")

@ -40,7 +40,7 @@ impl service::pusher::Data for KeyValueDatabase {
self.senderkey_pusher self.senderkey_pusher
.get(&senderkey)? .get(&senderkey)?
.map(|push| { .map(|push| {
serde_json::from_slice(&*push) serde_json::from_slice(&push)
.map_err(|_| Error::bad_database("Invalid Pusher in db.")) .map_err(|_| Error::bad_database("Invalid Pusher in db."))
}) })
.transpose() .transpose()
@ -53,7 +53,7 @@ impl service::pusher::Data for KeyValueDatabase {
self.senderkey_pusher self.senderkey_pusher
.scan_prefix(prefix) .scan_prefix(prefix)
.map(|(_, push)| { .map(|(_, push)| {
serde_json::from_slice(&*push) serde_json::from_slice(&push)
.map_err(|_| Error::bad_database("Invalid Pusher in db.")) .map_err(|_| Error::bad_database("Invalid Pusher in db."))
}) })
.collect() .collect()

@ -9,7 +9,7 @@ impl service::rooms::alias::Data for KeyValueDatabase {
let mut aliasid = room_id.as_bytes().to_vec(); let mut aliasid = room_id.as_bytes().to_vec();
aliasid.push(0xff); aliasid.push(0xff);
aliasid.extend_from_slice(&services().globals.next_count()?.to_be_bytes()); aliasid.extend_from_slice(&services().globals.next_count()?.to_be_bytes());
self.aliasid_alias.insert(&aliasid, &*alias.as_bytes())?; self.aliasid_alias.insert(&aliasid, alias.as_bytes())?;
Ok(()) Ok(())
} }

@ -88,7 +88,7 @@ impl service::rooms::edus::presence::Data for KeyValueDatabase {
for (key, value) in self for (key, value) in self
.presenceid_presence .presenceid_presence
.iter_from(&*first_possible_edu, false) .iter_from(&first_possible_edu, false)
.take_while(|(key, _)| key.starts_with(&prefix)) .take_while(|(key, _)| key.starts_with(&prefix))
{ {
let user_id = UserId::parse( let user_id = UserId::parse(

@ -17,7 +17,7 @@ impl service::rooms::edus::typing::Data for KeyValueDatabase {
room_typing_id.extend_from_slice(&count); room_typing_id.extend_from_slice(&count);
self.typingid_userid self.typingid_userid
.insert(&room_typing_id, &*user_id.as_bytes())?; .insert(&room_typing_id, user_id.as_bytes())?;
self.roomid_lasttypingupdate self.roomid_lasttypingupdate
.insert(room_id.as_bytes(), &count)?; .insert(room_id.as_bytes(), &count)?;

@ -15,7 +15,7 @@ impl service::rooms::search::Data for KeyValueDatabase {
let mut key = shortroomid.to_be_bytes().to_vec(); let mut key = shortroomid.to_be_bytes().to_vec();
key.extend_from_slice(word.as_bytes()); key.extend_from_slice(word.as_bytes());
key.push(0xff); key.push(0xff);
key.extend_from_slice(&pdu_id); key.extend_from_slice(pdu_id);
(key, Vec::new()) (key, Vec::new())
}); });

@ -39,7 +39,7 @@ impl service::rooms::timeline::Data for KeyValueDatabase {
{ {
hash_map::Entry::Vacant(v) => { hash_map::Entry::Vacant(v) => {
if let Some(last_count) = self if let Some(last_count) = self
.pdus_until(&sender_user, &room_id, u64::MAX)? .pdus_until(sender_user, room_id, u64::MAX)?
.filter_map(|r| { .filter_map(|r| {
// Filter out buggy events // Filter out buggy events
if r.is_err() { if r.is_err() {
@ -205,8 +205,7 @@ impl service::rooms::timeline::Data for KeyValueDatabase {
.unwrap() .unwrap()
.insert(pdu.room_id.clone(), count); .insert(pdu.room_id.clone(), count);
self.eventid_pduid self.eventid_pduid.insert(pdu.event_id.as_bytes(), pdu_id)?;
.insert(pdu.event_id.as_bytes(), &pdu_id)?;
self.eventid_outlierpdu.remove(pdu.event_id.as_bytes())?; self.eventid_outlierpdu.remove(pdu.event_id.as_bytes())?;
Ok(()) Ok(())

@ -114,7 +114,7 @@ impl service::rooms::user::Data for KeyValueDatabase {
utils::common_elements(iterators, Ord::cmp) utils::common_elements(iterators, Ord::cmp)
.expect("users is not empty") .expect("users is not empty")
.map(|bytes| { .map(|bytes| {
RoomId::parse(utils::string_from_bytes(&*bytes).map_err(|_| { RoomId::parse(utils::string_from_bytes(&bytes).map_err(|_| {
Error::bad_database("Invalid RoomId bytes in userroomid_joined") Error::bad_database("Invalid RoomId bytes in userroomid_joined")
})?) })?)
.map_err(|_| Error::bad_database("Invalid RoomId in userroomid_joined.")) .map_err(|_| Error::bad_database("Invalid RoomId in userroomid_joined."))

@ -38,7 +38,7 @@ impl service::sending::Data for KeyValueDatabase {
fn delete_all_active_requests_for(&self, outgoing_kind: &OutgoingKind) -> Result<()> { fn delete_all_active_requests_for(&self, outgoing_kind: &OutgoingKind) -> Result<()> {
let prefix = outgoing_kind.get_prefix(); let prefix = outgoing_kind.get_prefix();
for (key, _) in self.servercurrentevent_data.scan_prefix(prefix.clone()) { for (key, _) in self.servercurrentevent_data.scan_prefix(prefix) {
self.servercurrentevent_data.remove(&key)?; self.servercurrentevent_data.remove(&key)?;
} }
@ -51,7 +51,7 @@ impl service::sending::Data for KeyValueDatabase {
self.servercurrentevent_data.remove(&key).unwrap(); self.servercurrentevent_data.remove(&key).unwrap();
} }
for (key, _) in self.servernameevent_data.scan_prefix(prefix.clone()) { for (key, _) in self.servernameevent_data.scan_prefix(prefix) {
self.servernameevent_data.remove(&key).unwrap(); self.servernameevent_data.remove(&key).unwrap();
} }
@ -67,7 +67,7 @@ impl service::sending::Data for KeyValueDatabase {
for (outgoing_kind, event) in requests { for (outgoing_kind, event) in requests {
let mut key = outgoing_kind.get_prefix(); let mut key = outgoing_kind.get_prefix();
key.extend_from_slice(if let SendingEventType::Pdu(value) = &event { key.extend_from_slice(if let SendingEventType::Pdu(value) = &event {
&**value value
} else { } else {
&[] &[]
}); });
@ -91,7 +91,7 @@ impl service::sending::Data for KeyValueDatabase {
let prefix = outgoing_kind.get_prefix(); let prefix = outgoing_kind.get_prefix();
return Box::new( return Box::new(
self.servernameevent_data self.servernameevent_data
.scan_prefix(prefix.clone()) .scan_prefix(prefix)
.map(|(k, v)| parse_servercurrentevent(&k, v).map(|(_, ev)| (ev, k))), .map(|(k, v)| parse_servercurrentevent(&k, v).map(|(_, ev)| (ev, k))),
); );
} }
@ -155,7 +155,7 @@ fn parse_servercurrentevent(
let mut parts = key[1..].splitn(3, |&b| b == 0xff); let mut parts = key[1..].splitn(3, |&b| b == 0xff);
let user = parts.next().expect("splitn always returns one element"); let user = parts.next().expect("splitn always returns one element");
let user_string = utils::string_from_bytes(&user) let user_string = utils::string_from_bytes(user)
.map_err(|_| Error::bad_database("Invalid user string in servercurrentevent"))?; .map_err(|_| Error::bad_database("Invalid user string in servercurrentevent"))?;
let user_id = UserId::parse(user_string) let user_id = UserId::parse(user_string)
.map_err(|_| Error::bad_database("Invalid user id in servercurrentevent"))?; .map_err(|_| Error::bad_database("Invalid user id in servercurrentevent"))?;

@ -5,10 +5,9 @@ use ruma::{
encryption::{CrossSigningKey, DeviceKeys, OneTimeKey}, encryption::{CrossSigningKey, DeviceKeys, OneTimeKey},
events::{AnyToDeviceEvent, StateEventType}, events::{AnyToDeviceEvent, StateEventType},
serde::Raw, serde::Raw,
DeviceId, DeviceKeyAlgorithm, DeviceKeyId, MilliSecondsSinceUnixEpoch, OwnedUserId, UInt, DeviceId, DeviceKeyAlgorithm, DeviceKeyId, MilliSecondsSinceUnixEpoch, OwnedDeviceId,
UserId, OwnedDeviceKeyId, OwnedMxcUri, OwnedUserId, UInt, UserId,
}; };
use ruma::{OwnedDeviceId, OwnedDeviceKeyId, OwnedMxcUri};
use tracing::warn; use tracing::warn;
use crate::{ use crate::{
@ -380,13 +379,12 @@ impl service::users::Data for KeyValueDatabase {
Ok(( Ok((
serde_json::from_slice( serde_json::from_slice(
&*key key.rsplit(|&b| b == 0xff)
.rsplit(|&b| b == 0xff)
.next() .next()
.ok_or_else(|| Error::bad_database("OneTimeKeyId in db is invalid."))?, .ok_or_else(|| Error::bad_database("OneTimeKeyId in db is invalid."))?,
) )
.map_err(|_| Error::bad_database("OneTimeKeyId in db is invalid."))?, .map_err(|_| Error::bad_database("OneTimeKeyId in db is invalid."))?,
serde_json::from_slice(&*value) serde_json::from_slice(&value)
.map_err(|_| Error::bad_database("OneTimeKeys in db are invalid."))?, .map_err(|_| Error::bad_database("OneTimeKeys in db are invalid."))?,
)) ))
}) })
@ -410,7 +408,7 @@ impl service::users::Data for KeyValueDatabase {
.map(|(bytes, _)| { .map(|(bytes, _)| {
Ok::<_, Error>( Ok::<_, Error>(
serde_json::from_slice::<OwnedDeviceKeyId>( serde_json::from_slice::<OwnedDeviceKeyId>(
&*bytes.rsplit(|&b| b == 0xff).next().ok_or_else(|| { bytes.rsplit(|&b| b == 0xff).next().ok_or_else(|| {
Error::bad_database("OneTimeKey ID in db is invalid.") Error::bad_database("OneTimeKey ID in db is invalid.")
})?, })?,
) )

@ -2,22 +2,17 @@ pub mod abstraction;
pub mod key_value; pub mod key_value;
use crate::{services, utils, Config, Error, PduEvent, Result, Services, SERVICES}; use crate::{services, utils, Config, Error, PduEvent, Result, Services, SERVICES};
use abstraction::KeyValueDatabaseEngine; use abstraction::{KeyValueDatabaseEngine, KvTree};
use abstraction::KvTree;
use directories::ProjectDirs; use directories::ProjectDirs;
use lru_cache::LruCache; use lru_cache::LruCache;
use ruma::CanonicalJsonValue;
use ruma::OwnedDeviceId;
use ruma::OwnedEventId;
use ruma::OwnedRoomId;
use ruma::OwnedUserId;
use ruma::{ use ruma::{
events::{ events::{
push_rules::PushRulesEventContent, room::message::RoomMessageEventContent, push_rules::PushRulesEventContent, room::message::RoomMessageEventContent,
GlobalAccountDataEvent, GlobalAccountDataEventType, StateEventType, GlobalAccountDataEvent, GlobalAccountDataEventType, StateEventType,
}, },
push::Ruleset, push::Ruleset,
EventId, RoomId, UserId, CanonicalJsonValue, EventId, OwnedDeviceId, OwnedEventId, OwnedRoomId, OwnedUserId, RoomId,
UserId,
}; };
use std::{ use std::{
collections::{BTreeMap, HashMap, HashSet}, collections::{BTreeMap, HashMap, HashSet},

@ -24,7 +24,7 @@ pub use utils::error::{Error, Result};
pub static SERVICES: RwLock<Option<&'static Services>> = RwLock::new(None); pub static SERVICES: RwLock<Option<&'static Services>> = RwLock::new(None);
pub fn services<'a>() -> &'static Services { pub fn services<'a>() -> &'static Services {
&SERVICES SERVICES
.read() .read()
.unwrap() .unwrap()
.expect("SERVICES should be initialized when this is called") .expect("SERVICES should be initialized when this is called")

@ -444,7 +444,7 @@ impl_ruma_handler!(T1, T2, T3, T4, T5, T6, T7);
impl_ruma_handler!(T1, T2, T3, T4, T5, T6, T7, T8); impl_ruma_handler!(T1, T2, T3, T4, T5, T6, T7, T8);
fn method_to_filter(method: Method) -> MethodFilter { fn method_to_filter(method: Method) -> MethodFilter {
let method_filter = match method { match method {
Method::DELETE => MethodFilter::DELETE, Method::DELETE => MethodFilter::DELETE,
Method::GET => MethodFilter::GET, Method::GET => MethodFilter::GET,
Method::HEAD => MethodFilter::HEAD, Method::HEAD => MethodFilter::HEAD,
@ -454,6 +454,5 @@ fn method_to_filter(method: Method) -> MethodFilter {
Method::PUT => MethodFilter::PUT, Method::PUT => MethodFilter::PUT,
Method::TRACE => MethodFilter::TRACE, Method::TRACE => MethodFilter::TRACE,
m => panic!("Unsupported HTTP method: {:?}", m), m => panic!("Unsupported HTTP method: {:?}", m),
}; }
method_filter
} }

@ -179,7 +179,7 @@ impl Service {
} }
pub fn start_handler(self: &Arc<Self>) { pub fn start_handler(self: &Arc<Self>) {
let self2 = Arc::clone(&self); let self2 = Arc::clone(self);
tokio::spawn(async move { tokio::spawn(async move {
self2.handler().await; self2.handler().await;
}); });
@ -270,13 +270,11 @@ impl Service {
let command_line = lines.next().expect("each string has at least one line"); let command_line = lines.next().expect("each string has at least one line");
let body: Vec<_> = lines.collect(); let body: Vec<_> = lines.collect();
let admin_command = match self.parse_admin_command(&command_line) { let admin_command = match self.parse_admin_command(command_line) {
Ok(command) => command, Ok(command) => command,
Err(error) => { Err(error) => {
let server_name = services().globals.server_name(); let server_name = services().globals.server_name();
let message = error let message = error.replace("server.name", server_name.as_str());
.to_string()
.replace("server.name", server_name.as_str());
let html_message = self.usage_to_html(&message, server_name); let html_message = self.usage_to_html(&message, server_name);
return RoomMessageEventContent::text_html(message, html_message); return RoomMessageEventContent::text_html(message, html_message);
@ -316,8 +314,8 @@ impl Service {
// Backwards compatibility with `register_appservice`-style commands // Backwards compatibility with `register_appservice`-style commands
let command_with_dashes; let command_with_dashes;
if argv.len() > 1 && argv[1].contains("_") { if argv.len() > 1 && argv[1].contains('_') {
command_with_dashes = argv[1].replace("_", "-"); command_with_dashes = argv[1].replace('_', "-");
argv[1] = &command_with_dashes; argv[1] = &command_with_dashes;
} }
@ -631,7 +629,7 @@ impl Service {
let displayname = format!("{} ⚡️", user_id.localpart()); let displayname = format!("{} ⚡️", user_id.localpart());
services() services()
.users .users
.set_displayname(&user_id, Some(displayname.clone()))?; .set_displayname(&user_id, Some(displayname))?;
// Initial account data // Initial account data
services().account_data.update( services().account_data.update(
@ -771,7 +769,7 @@ impl Service {
let text = text.replace("subcommand", "command"); let text = text.replace("subcommand", "command");
// Escape option names (e.g. `<element-id>`) since they look like HTML tags // Escape option names (e.g. `<element-id>`) since they look like HTML tags
let text = text.replace("<", "&lt;").replace(">", "&gt;"); let text = text.replace('<', "&lt;").replace('>', "&gt;");
// Italicize the first line (command name and version text) // Italicize the first line (command name and version text)
let re = Regex::new("^(.*?)\n").expect("Regex compilation should not fail"); let re = Regex::new("^(.*?)\n").expect("Regex compilation should not fail");
@ -799,7 +797,7 @@ impl Service {
while text_lines while text_lines
.get(line_index) .get(line_index)
.map(|line| line.starts_with("#")) .map(|line| line.starts_with('#'))
.unwrap_or(false) .unwrap_or(false)
{ {
command_body += if text_lines[line_index].starts_with("# ") { command_body += if text_lines[line_index].starts_with("# ") {
@ -830,12 +828,10 @@ impl Service {
}; };
// Add HTML line-breaks // Add HTML line-breaks
let text = text
.replace("\n\n\n", "\n\n")
.replace("\n", "<br>\n")
.replace("[nobr]<br>", "");
text text.replace("\n\n\n", "\n\n")
.replace('\n', "<br>\n")
.replace("[nobr]<br>", "")
} }
/// Create the admin room. /// Create the admin room.
@ -1110,7 +1106,7 @@ impl Service {
state_key: Some(user_id.to_string()), state_key: Some(user_id.to_string()),
redacts: None, redacts: None,
}, },
&user_id, user_id,
&room_id, &room_id,
&state_lock, &state_lock,
)?; )?;
@ -1142,8 +1138,8 @@ impl Service {
PduBuilder { PduBuilder {
event_type: RoomEventType::RoomMessage, event_type: RoomEventType::RoomMessage,
content: to_raw_value(&RoomMessageEventContent::text_html( content: to_raw_value(&RoomMessageEventContent::text_html(
format!("## Thank you for trying out Conduit!\n\nConduit is currently in Beta. This means you can join and participate in most Matrix rooms, but not all features are supported and you might run into bugs from time to time.\n\nHelpful links:\n> Website: https://conduit.rs\n> Git and Documentation: https://gitlab.com/famedly/conduit\n> Report issues: https://gitlab.com/famedly/conduit/-/issues\n\nFor a list of available commands, send the following message in this room: `@conduit:{}: --help`\n\nHere are some rooms you can join (by typing the command):\n\nConduit room (Ask questions and get notified on updates):\n`/join #conduit:fachschaften.org`\n\nConduit lounge (Off-topic, only Conduit users are allowed to join)\n`/join #conduit-lounge:conduit.rs`", services().globals.server_name()).to_owned(), format!("## Thank you for trying out Conduit!\n\nConduit is currently in Beta. This means you can join and participate in most Matrix rooms, but not all features are supported and you might run into bugs from time to time.\n\nHelpful links:\n> Website: https://conduit.rs\n> Git and Documentation: https://gitlab.com/famedly/conduit\n> Report issues: https://gitlab.com/famedly/conduit/-/issues\n\nFor a list of available commands, send the following message in this room: `@conduit:{}: --help`\n\nHere are some rooms you can join (by typing the command):\n\nConduit room (Ask questions and get notified on updates):\n`/join #conduit:fachschaften.org`\n\nConduit lounge (Off-topic, only Conduit users are allowed to join)\n`/join #conduit-lounge:conduit.rs`", services().globals.server_name()),
format!("<h2>Thank you for trying out Conduit!</h2>\n<p>Conduit is currently in Beta. This means you can join and participate in most Matrix rooms, but not all features are supported and you might run into bugs from time to time.</p>\n<p>Helpful links:</p>\n<blockquote>\n<p>Website: https://conduit.rs<br>Git and Documentation: https://gitlab.com/famedly/conduit<br>Report issues: https://gitlab.com/famedly/conduit/-/issues</p>\n</blockquote>\n<p>For a list of available commands, send the following message in this room: <code>@conduit:{}: --help</code></p>\n<p>Here are some rooms you can join (by typing the command):</p>\n<p>Conduit room (Ask questions and get notified on updates):<br><code>/join #conduit:fachschaften.org</code></p>\n<p>Conduit lounge (Off-topic, only Conduit users are allowed to join)<br><code>/join #conduit-lounge:conduit.rs</code></p>\n", services().globals.server_name()).to_owned(), format!("<h2>Thank you for trying out Conduit!</h2>\n<p>Conduit is currently in Beta. This means you can join and participate in most Matrix rooms, but not all features are supported and you might run into bugs from time to time.</p>\n<p>Helpful links:</p>\n<blockquote>\n<p>Website: https://conduit.rs<br>Git and Documentation: https://gitlab.com/famedly/conduit<br>Report issues: https://gitlab.com/famedly/conduit/-/issues</p>\n</blockquote>\n<p>For a list of available commands, send the following message in this room: <code>@conduit:{}: --help</code></p>\n<p>Here are some rooms you can join (by typing the command):</p>\n<p>Conduit room (Ask questions and get notified on updates):<br><code>/join #conduit:fachschaften.org</code></p>\n<p>Conduit lounge (Off-topic, only Conduit users are allowed to join)<br><code>/join #conduit-lounge:conduit.rs</code></p>\n", services().globals.server_name()),
)) ))
.expect("event is valid, we just created it"), .expect("event is valid, we just created it"),
unsigned: None, unsigned: None,

@ -4,7 +4,6 @@ use ruma::events::AnySyncTimelineEvent;
use crate::{services, Error, PduEvent, Result}; use crate::{services, Error, PduEvent, Result};
use bytes::BytesMut; use bytes::BytesMut;
use ruma::api::IncomingResponse;
use ruma::{ use ruma::{
api::{ api::{
client::push::{get_pushers, set_pusher, PusherKind}, client::push::{get_pushers, set_pusher, PusherKind},
@ -12,7 +11,7 @@ use ruma::{
self, self,
v1::{Device, Notification, NotificationCounts, NotificationPriority}, v1::{Device, Notification, NotificationCounts, NotificationPriority},
}, },
MatrixVersion, OutgoingRequest, SendAccessToken, IncomingResponse, MatrixVersion, OutgoingRequest, SendAccessToken,
}, },
events::{ events::{
room::{name::RoomNameEventContent, power_levels::RoomPowerLevelsEventContent}, room::{name::RoomNameEventContent, power_levels::RoomPowerLevelsEventContent},

@ -284,7 +284,7 @@ impl Service {
RoomVersion::new(room_version_id).expect("room version is supported"); RoomVersion::new(room_version_id).expect("room version is supported");
let mut val = match ruma::signatures::verify_event( let mut val = match ruma::signatures::verify_event(
&*pub_key_map.read().expect("RwLock is poisoned."), &pub_key_map.read().expect("RwLock is poisoned."),
&value, &value,
room_version_id, room_version_id,
) { ) {
@ -1198,7 +1198,7 @@ impl Service {
.fetch_and_handle_outliers( .fetch_and_handle_outliers(
origin, origin,
&[prev_event_id.clone()], &[prev_event_id.clone()],
&create_event, create_event,
room_id, room_id,
pub_key_map, pub_key_map,
) )
@ -1224,7 +1224,7 @@ impl Service {
amount += 1; amount += 1;
for prev_prev in &pdu.prev_events { for prev_prev in &pdu.prev_events {
if !graph.contains_key(prev_prev) { if !graph.contains_key(prev_prev) {
todo_outlier_stack.push(dbg!(prev_prev.clone())); todo_outlier_stack.push(prev_prev.clone());
} }
} }
@ -1248,7 +1248,7 @@ impl Service {
} }
} }
let sorted = state_res::lexicographical_topological_sort(dbg!(&graph), |event_id| { let sorted = state_res::lexicographical_topological_sort(&graph, |event_id| {
// This return value is the key used for sorting events, // This return value is the key used for sorting events,
// events are then sorted by power level, time, // events are then sorted by power level, time,
// and lexically by event_id. // and lexically by event_id.
@ -1482,8 +1482,8 @@ impl Service {
} }
let mut futures: FuturesUnordered<_> = servers let mut futures: FuturesUnordered<_> = servers
.into_iter() .into_keys()
.map(|(server, _)| async move { .map(|server| async move {
( (
services() services()
.sending .sending

@ -1,7 +1,6 @@
use crate::Result; use crate::Result;
use ruma::{EventId, OwnedEventId, RoomId}; use ruma::{EventId, OwnedEventId, RoomId};
use std::collections::HashSet; use std::{collections::HashSet, sync::Arc};
use std::sync::Arc;
use tokio::sync::MutexGuard; use tokio::sync::MutexGuard;
pub trait Data: Send + Sync { pub trait Data: Send + Sync {

@ -93,7 +93,7 @@ impl Service {
services().rooms.state_cache.update_joined_count(room_id)?; services().rooms.state_cache.update_joined_count(room_id)?;
self.db self.db
.set_room_state(room_id, shortstatehash, &state_lock)?; .set_room_state(room_id, shortstatehash, state_lock)?;
Ok(()) Ok(())
} }
@ -331,7 +331,7 @@ impl Service {
.transpose()?; .transpose()?;
let room_version = create_event_content let room_version = create_event_content
.map(|create_event| create_event.room_version) .map(|create_event| create_event.room_version)
.ok_or_else(|| Error::BadDatabase("Invalid room version"))?; .ok_or(Error::BadDatabase("Invalid room version"))?;
Ok(room_version) Ok(room_version)
} }

@ -2,29 +2,29 @@ mod data;
use std::collections::HashMap; use std::collections::HashMap;
use std::collections::HashSet; use std::{
use std::sync::{Arc, Mutex}; collections::HashSet,
sync::{Arc, Mutex},
};
pub use data::Data; pub use data::Data;
use regex::Regex; use regex::Regex;
use ruma::canonical_json::to_canonical_value;
use ruma::events::room::power_levels::RoomPowerLevelsEventContent;
use ruma::push::Ruleset;
use ruma::state_res::RoomVersion;
use ruma::CanonicalJsonObject;
use ruma::CanonicalJsonValue;
use ruma::OwnedEventId;
use ruma::OwnedRoomId;
use ruma::OwnedServerName;
use ruma::{ use ruma::{
api::client::error::ErrorKind, api::client::error::ErrorKind,
canonical_json::to_canonical_value,
events::{ events::{
push_rules::PushRulesEvent, push_rules::PushRulesEvent,
room::{create::RoomCreateEventContent, member::MembershipState}, room::{
create::RoomCreateEventContent, member::MembershipState,
power_levels::RoomPowerLevelsEventContent,
},
GlobalAccountDataEventType, RoomEventType, StateEventType, GlobalAccountDataEventType, RoomEventType, StateEventType,
}, },
push::{Action, Tweak}, push::{Action, Ruleset, Tweak},
state_res, uint, EventId, RoomAliasId, RoomId, UserId, state_res,
state_res::RoomVersion,
uint, CanonicalJsonObject, CanonicalJsonValue, EventId, OwnedEventId, OwnedRoomId,
OwnedServerName, RoomAliasId, RoomId, UserId,
}; };
use serde::Deserialize; use serde::Deserialize;
use serde_json::value::to_raw_value; use serde_json::value::to_raw_value;
@ -267,7 +267,7 @@ impl Service {
.account_data .account_data
.get( .get(
None, None,
&user, user,
GlobalAccountDataEventType::PushRules.to_string().into(), GlobalAccountDataEventType::PushRules.to_string().into(),
)? )?
.map(|event| { .map(|event| {
@ -276,13 +276,13 @@ impl Service {
}) })
.transpose()? .transpose()?
.map(|ev: PushRulesEvent| ev.content.global) .map(|ev: PushRulesEvent| ev.content.global)
.unwrap_or_else(|| Ruleset::server_default(&user)); .unwrap_or_else(|| Ruleset::server_default(user));
let mut highlight = false; let mut highlight = false;
let mut notify = false; let mut notify = false;
for action in services().pusher.get_actions( for action in services().pusher.get_actions(
&user, user,
&rules_for_user, &rules_for_user,
&power_levels, &power_levels,
&sync_pdu, &sync_pdu,
@ -307,10 +307,8 @@ impl Service {
highlights.push(user.clone()); highlights.push(user.clone());
} }
for push_key in services().pusher.get_pushkeys(&user) { for push_key in services().pusher.get_pushkeys(user) {
services() services().sending.send_push_pdu(&pdu_id, user, push_key?)?;
.sending
.send_push_pdu(&*pdu_id, &user, push_key?)?;
} }
} }
@ -388,7 +386,7 @@ impl Service {
&& services().globals.emergency_password().is_none(); && services().globals.emergency_password().is_none();
if to_conduit && !from_conduit && admin_room.as_ref() == Some(&pdu.room_id) { if to_conduit && !from_conduit && admin_room.as_ref() == Some(&pdu.room_id) {
services().admin.process_message(body.to_string()); services().admin.process_message(body);
} }
} }
} }
@ -583,8 +581,8 @@ impl Service {
prev_events, prev_events,
depth, depth,
auth_events: auth_events auth_events: auth_events
.iter() .values()
.map(|(_, pdu)| pdu.event_id.clone()) .map(|pdu| pdu.event_id.clone())
.collect(), .collect(),
redacts, redacts,
unsigned: if unsigned.is_empty() { unsigned: if unsigned.is_empty() {
@ -683,7 +681,7 @@ impl Service {
state_lock: &MutexGuard<'_, ()>, // Take mutex guard to make sure users get the room state mutex state_lock: &MutexGuard<'_, ()>, // Take mutex guard to make sure users get the room state mutex
) -> Result<Arc<EventId>> { ) -> Result<Arc<EventId>> {
let (pdu, pdu_json) = let (pdu, pdu_json) =
self.create_hash_and_sign_event(pdu_builder, sender, room_id, &state_lock)?; self.create_hash_and_sign_event(pdu_builder, sender, room_id, state_lock)?;
// We append to state before appending the pdu, so we don't have a moment in time with the // We append to state before appending the pdu, so we don't have a moment in time with the
// pdu without it's state. This is okay because append_pdu can't fail. // pdu without it's state. This is okay because append_pdu can't fail.

@ -110,7 +110,7 @@ impl Service {
} }
pub fn start_handler(self: &Arc<Self>) { pub fn start_handler(self: &Arc<Self>) {
let self2 = Arc::clone(&self); let self2 = Arc::clone(self);
tokio::spawn(async move { tokio::spawn(async move {
self2.handler().await.unwrap(); self2.handler().await.unwrap();
}); });
@ -280,7 +280,7 @@ impl Service {
device_list_changes.extend( device_list_changes.extend(
services() services()
.users .users
.keys_changed(&room_id.to_string(), since, None) .keys_changed(room_id.as_ref(), since, None)
.filter_map(|r| r.ok()) .filter_map(|r| r.ok())
.filter(|user_id| user_id.server_name() == services().globals.server_name()), .filter(|user_id| user_id.server_name() == services().globals.server_name()),
); );
@ -487,7 +487,7 @@ impl Service {
let response = appservice_server::send_request( let response = appservice_server::send_request(
services() services()
.appservice .appservice
.get_registration(&id) .get_registration(id)
.map_err(|e| (kind.clone(), e))? .map_err(|e| (kind.clone(), e))?
.ok_or_else(|| { .ok_or_else(|| {
( (
@ -562,7 +562,7 @@ impl Service {
let pusher = match services() let pusher = match services()
.pusher .pusher
.get_pusher(&userid, pushkey) .get_pusher(userid, pushkey)
.map_err(|e| (OutgoingKind::Push(userid.clone(), pushkey.clone()), e))? .map_err(|e| (OutgoingKind::Push(userid.clone(), pushkey.clone()), e))?
{ {
Some(pusher) => pusher, Some(pusher) => pusher,
@ -573,18 +573,18 @@ impl Service {
.account_data .account_data
.get( .get(
None, None,
&userid, userid,
GlobalAccountDataEventType::PushRules.to_string().into(), GlobalAccountDataEventType::PushRules.to_string().into(),
) )
.unwrap_or_default() .unwrap_or_default()
.and_then(|event| serde_json::from_str::<PushRulesEvent>(event.get()).ok()) .and_then(|event| serde_json::from_str::<PushRulesEvent>(event.get()).ok())
.map(|ev: PushRulesEvent| ev.content.global) .map(|ev: PushRulesEvent| ev.content.global)
.unwrap_or_else(|| push::Ruleset::server_default(&userid)); .unwrap_or_else(|| push::Ruleset::server_default(userid));
let unread: UInt = services() let unread: UInt = services()
.rooms .rooms
.user .user
.notification_count(&userid, &pdu.room_id) .notification_count(userid, &pdu.room_id)
.map_err(|e| (kind.clone(), e))? .map_err(|e| (kind.clone(), e))?
.try_into() .try_into()
.expect("notification count can't go that high"); .expect("notification count can't go that high");
@ -593,7 +593,7 @@ impl Service {
let _response = services() let _response = services()
.pusher .pusher
.send_push_notice(&userid, unread, &pusher, rules_for_user, &pdu) .send_push_notice(userid, unread, &pusher, rules_for_user, &pdu)
.await .await
.map(|_response| kind.clone()) .map(|_response| kind.clone())
.map_err(|e| (kind.clone(), e)); .map_err(|e| (kind.clone(), e));
@ -638,7 +638,7 @@ impl Service {
let permit = services().sending.maximum_requests.acquire().await; let permit = services().sending.maximum_requests.acquire().await;
let response = server_server::send_request( let response = server_server::send_request(
&*server, server,
send_transaction_message::v1::Request { send_transaction_message::v1::Request {
origin: services().globals.server_name(), origin: services().globals.server_name(),
pdus: &pdu_jsons, pdus: &pdu_jsons,

Loading…
Cancel
Save