update ruma

This commit is contained in:
Jonathan de Jong 2022-02-18 15:33:14 +01:00
parent f3795846b5
commit e9f87e1952
42 changed files with 514 additions and 500 deletions

View file

@ -26,7 +26,7 @@ use ruma::{
membership::{
create_invite,
create_join_event::{self, RoomState},
create_join_event_template,
prepare_join_event,
},
query::{get_profile_information, get_room_information},
transactions::{
@ -49,7 +49,7 @@ use ruma::{
},
int,
receipt::ReceiptType,
serde::{Base64, JsonObject},
serde::{Base64, JsonObject, Raw},
signatures::{CanonicalJsonObject, CanonicalJsonValue},
state_res::{self, RoomVersion, StateMap},
to_device::DeviceIdOrAllDevices,
@ -532,7 +532,7 @@ pub async fn get_server_keys_route(db: DatabaseGuard) -> Result<impl IntoRespons
);
let mut response = serde_json::from_slice(
get_server_keys::v2::Response {
server_key: ServerSigningKeys {
server_key: Raw::new(&ServerSigningKeys {
server_name: db.globals.server_name().to_owned(),
verify_keys,
old_verify_keys: BTreeMap::new(),
@ -541,7 +541,8 @@ pub async fn get_server_keys_route(db: DatabaseGuard) -> Result<impl IntoRespons
SystemTime::now() + Duration::from_secs(86400 * 7),
)
.expect("time is valid"),
},
})
.expect("static conversion, no errors"),
}
.try_into_http_response::<Vec<u8>>()
.unwrap()
@ -1981,24 +1982,23 @@ pub(crate) async fn fetch_signing_keys(
debug!("Fetching signing keys for {} over federation", origin);
if let Ok(get_keys_response) = db
if let Some(server_key) = db
.sending
.send_federation_request(&db.globals, origin, get_server_keys::v2::Request::new())
.await
.ok()
.and_then(|resp| resp.server_key.deserialize().ok())
{
db.globals
.add_signing_key(origin, get_keys_response.server_key.clone())?;
db.globals.add_signing_key(origin, server_key.clone())?;
result.extend(
get_keys_response
.server_key
server_key
.verify_keys
.into_iter()
.map(|(k, v)| (k.to_string(), v.key)),
);
result.extend(
get_keys_response
.server_key
server_key
.old_verify_keys
.into_iter()
.map(|(k, v)| (k.to_string(), v.key)),
@ -2011,7 +2011,7 @@ pub(crate) async fn fetch_signing_keys(
for server in db.globals.trusted_servers() {
debug!("Asking {} for {}'s signing key", server, origin);
if let Ok(keys) = db
if let Some(server_keys) = db
.sending
.send_federation_request(
&db.globals,
@ -2027,9 +2027,16 @@ pub(crate) async fn fetch_signing_keys(
),
)
.await
.ok()
.map(|resp| {
resp.server_keys
.into_iter()
.filter_map(|e| e.deserialize().ok())
.collect::<Vec<_>>()
})
{
trace!("Got signing keys: {:?}", keys);
for k in keys.server_keys {
trace!("Got signing keys: {:?}", server_keys);
for k in server_keys {
db.globals.add_signing_key(origin, k.clone())?;
result.extend(
k.verify_keys
@ -2538,8 +2545,8 @@ pub async fn get_room_state_ids_route(
/// Creates a join template.
pub async fn create_join_event_template_route(
db: DatabaseGuard,
body: Ruma<create_join_event_template::v1::Request<'_>>,
) -> Result<create_join_event_template::v1::Response> {
body: Ruma<prepare_join_event::v1::Request<'_>>,
) -> Result<prepare_join_event::v1::Response> {
if !db.globals.allow_federation() {
return Err(Error::bad_config("Federation is disabled."));
}
@ -2701,7 +2708,7 @@ pub async fn create_join_event_template_route(
CanonicalJsonValue::String(db.globals.server_name().as_str().to_owned()),
);
Ok(create_join_event_template::v1::Response {
Ok(prepare_join_event::v1::Response {
room_version: Some(room_version_id),
event: to_raw_value(&pdu_json).expect("CanonicalJson can be serialized to JSON"),
})
@ -3293,6 +3300,8 @@ pub(crate) async fn fetch_join_signing_keys(
.write()
.map_err(|_| Error::bad_database("RwLock is poisoned."))?;
for k in keys.server_keys {
let k = k.deserialize().unwrap();
// TODO: Check signature from trusted server?
servers.remove(&k.server_name);
@ -3332,7 +3341,7 @@ pub(crate) async fn fetch_join_signing_keys(
if let (Ok(get_keys_response), origin) = result {
let result: BTreeMap<_, _> = db
.globals
.add_signing_key(&origin, get_keys_response.server_key.clone())?
.add_signing_key(&origin, get_keys_response.server_key.deserialize().unwrap())?
.into_iter()
.map(|(k, v)| (k.to_string(), v.key))
.collect();