From 5be5c9e9f0d6cc6fe76706a594ceed0e2a52ab54 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Mon, 26 Apr 2021 18:01:36 +0200 Subject: [PATCH 1/3] Bump ruma --- Cargo.lock | 36 ++++++++++++++++++------------------ Cargo.toml | 4 ++-- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e50907d0..b0212c8b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1634,7 +1634,7 @@ dependencies = [ [[package]] name = "ruma" version = "0.0.3" -source = "git+https://github.com/ruma/ruma?rev=12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88#12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88" +source = "git+https://github.com/ruma/ruma?rev=d27584ae3bdc035529e7389f1c392d4c96f9f8eb#d27584ae3bdc035529e7389f1c392d4c96f9f8eb" dependencies = [ "assign", "js_int", @@ -1654,7 +1654,7 @@ dependencies = [ [[package]] name = "ruma-api" version = "0.17.0-alpha.4" -source = "git+https://github.com/ruma/ruma?rev=12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88#12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88" +source = "git+https://github.com/ruma/ruma?rev=d27584ae3bdc035529e7389f1c392d4c96f9f8eb#d27584ae3bdc035529e7389f1c392d4c96f9f8eb" dependencies = [ "bytes", "http", @@ -1670,7 +1670,7 @@ dependencies = [ [[package]] name = "ruma-api-macros" version = "0.17.0-alpha.4" -source = "git+https://github.com/ruma/ruma?rev=12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88#12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88" +source = "git+https://github.com/ruma/ruma?rev=d27584ae3bdc035529e7389f1c392d4c96f9f8eb#d27584ae3bdc035529e7389f1c392d4c96f9f8eb" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -1681,7 +1681,7 @@ dependencies = [ [[package]] name = "ruma-appservice-api" version = "0.2.0-alpha.3" -source = "git+https://github.com/ruma/ruma?rev=12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88#12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88" +source = "git+https://github.com/ruma/ruma?rev=d27584ae3bdc035529e7389f1c392d4c96f9f8eb#d27584ae3bdc035529e7389f1c392d4c96f9f8eb" dependencies = [ "ruma-api", "ruma-common", @@ -1695,7 +1695,7 @@ dependencies = [ [[package]] name = "ruma-client-api" version = "0.10.0-alpha.3" -source = "git+https://github.com/ruma/ruma?rev=12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88#12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88" +source = "git+https://github.com/ruma/ruma?rev=d27584ae3bdc035529e7389f1c392d4c96f9f8eb#d27584ae3bdc035529e7389f1c392d4c96f9f8eb" dependencies = [ "assign", "bytes", @@ -1715,7 +1715,7 @@ dependencies = [ [[package]] name = "ruma-common" version = "0.5.0" -source = "git+https://github.com/ruma/ruma?rev=12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88#12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88" +source = "git+https://github.com/ruma/ruma?rev=d27584ae3bdc035529e7389f1c392d4c96f9f8eb#d27584ae3bdc035529e7389f1c392d4c96f9f8eb" dependencies = [ "indexmap", "js_int", @@ -1731,7 +1731,7 @@ dependencies = [ [[package]] name = "ruma-events" version = "0.22.0-alpha.3" -source = "git+https://github.com/ruma/ruma?rev=12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88#12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88" +source = "git+https://github.com/ruma/ruma?rev=d27584ae3bdc035529e7389f1c392d4c96f9f8eb#d27584ae3bdc035529e7389f1c392d4c96f9f8eb" dependencies = [ "js_int", "ruma-common", @@ -1745,7 +1745,7 @@ dependencies = [ [[package]] name = "ruma-events-macros" version = "0.22.0-alpha.3" -source = "git+https://github.com/ruma/ruma?rev=12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88#12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88" +source = "git+https://github.com/ruma/ruma?rev=d27584ae3bdc035529e7389f1c392d4c96f9f8eb#d27584ae3bdc035529e7389f1c392d4c96f9f8eb" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -1756,7 +1756,7 @@ dependencies = [ [[package]] name = "ruma-federation-api" version = "0.1.0-alpha.2" -source = "git+https://github.com/ruma/ruma?rev=12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88#12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88" +source = "git+https://github.com/ruma/ruma?rev=d27584ae3bdc035529e7389f1c392d4c96f9f8eb#d27584ae3bdc035529e7389f1c392d4c96f9f8eb" dependencies = [ "js_int", "ruma-api", @@ -1771,7 +1771,7 @@ dependencies = [ [[package]] name = "ruma-identifiers" version = "0.19.0" -source = "git+https://github.com/ruma/ruma?rev=12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88#12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88" +source = "git+https://github.com/ruma/ruma?rev=d27584ae3bdc035529e7389f1c392d4c96f9f8eb#d27584ae3bdc035529e7389f1c392d4c96f9f8eb" dependencies = [ "paste", "rand", @@ -1785,7 +1785,7 @@ dependencies = [ [[package]] name = "ruma-identifiers-macros" version = "0.19.0" -source = "git+https://github.com/ruma/ruma?rev=12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88#12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88" +source = "git+https://github.com/ruma/ruma?rev=d27584ae3bdc035529e7389f1c392d4c96f9f8eb#d27584ae3bdc035529e7389f1c392d4c96f9f8eb" dependencies = [ "proc-macro2", "quote", @@ -1796,12 +1796,12 @@ dependencies = [ [[package]] name = "ruma-identifiers-validation" version = "0.3.0" -source = "git+https://github.com/ruma/ruma?rev=12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88#12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88" +source = "git+https://github.com/ruma/ruma?rev=d27584ae3bdc035529e7389f1c392d4c96f9f8eb#d27584ae3bdc035529e7389f1c392d4c96f9f8eb" [[package]] name = "ruma-identity-service-api" version = "0.1.0-alpha.1" -source = "git+https://github.com/ruma/ruma?rev=12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88#12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88" +source = "git+https://github.com/ruma/ruma?rev=d27584ae3bdc035529e7389f1c392d4c96f9f8eb#d27584ae3bdc035529e7389f1c392d4c96f9f8eb" dependencies = [ "ruma-api", "ruma-common", @@ -1814,7 +1814,7 @@ dependencies = [ [[package]] name = "ruma-push-gateway-api" version = "0.1.0-alpha.1" -source = "git+https://github.com/ruma/ruma?rev=12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88#12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88" +source = "git+https://github.com/ruma/ruma?rev=d27584ae3bdc035529e7389f1c392d4c96f9f8eb#d27584ae3bdc035529e7389f1c392d4c96f9f8eb" dependencies = [ "js_int", "ruma-api", @@ -1829,7 +1829,7 @@ dependencies = [ [[package]] name = "ruma-serde" version = "0.3.1" -source = "git+https://github.com/ruma/ruma?rev=12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88#12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88" +source = "git+https://github.com/ruma/ruma?rev=d27584ae3bdc035529e7389f1c392d4c96f9f8eb#d27584ae3bdc035529e7389f1c392d4c96f9f8eb" dependencies = [ "bytes", "form_urlencoded", @@ -1843,7 +1843,7 @@ dependencies = [ [[package]] name = "ruma-serde-macros" version = "0.3.1" -source = "git+https://github.com/ruma/ruma?rev=12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88#12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88" +source = "git+https://github.com/ruma/ruma?rev=d27584ae3bdc035529e7389f1c392d4c96f9f8eb#d27584ae3bdc035529e7389f1c392d4c96f9f8eb" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -1854,7 +1854,7 @@ dependencies = [ [[package]] name = "ruma-signatures" version = "0.7.0" -source = "git+https://github.com/ruma/ruma?rev=12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88#12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88" +source = "git+https://github.com/ruma/ruma?rev=d27584ae3bdc035529e7389f1c392d4c96f9f8eb#d27584ae3bdc035529e7389f1c392d4c96f9f8eb" dependencies = [ "base64 0.13.0", "ring", @@ -2167,7 +2167,7 @@ dependencies = [ [[package]] name = "state-res" version = "0.1.0" -source = "git+https://github.com/ruma/state-res?rev=1dd252d1c97a38def74bc097c197a33179ed8fbb#1dd252d1c97a38def74bc097c197a33179ed8fbb" +source = "git+https://github.com/ruma/state-res?rev=ce665d213fffeaa47e146d01c6b87f9eb9feaa52#ce665d213fffeaa47e146d01c6b87f9eb9feaa52" dependencies = [ "itertools 0.10.0", "log", diff --git a/Cargo.toml b/Cargo.toml index a8003501..8554fa21 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,12 +18,12 @@ rocket = { git = "https://github.com/SergioBenitez/Rocket.git", rev = "801e04bd5 #rocket = { git = "https://github.com/timokoesters/Rocket.git", branch = "empty_parameters", default-features = false, features = ["tls"] } # Used for matrix spec type definitions and helpers -ruma = { git = "https://github.com/ruma/ruma", rev = "12ec0fb1680ebc4fec4fbefbbd0890ae4eaf3a88", features = ["compat", "rand", "appservice-api-c", "client-api", "federation-api", "push-gateway-api-c", "unstable-pre-spec", "unstable-exhaustive-types"] } +ruma = { git = "https://github.com/ruma/ruma", rev = "d27584ae3bdc035529e7389f1c392d4c96f9f8eb", features = ["compat", "rand", "appservice-api-c", "client-api", "federation-api", "push-gateway-api-c", "unstable-pre-spec", "unstable-exhaustive-types"] } #ruma = { git = "https://github.com/timokoesters/ruma", rev = "220d5b4a76b3b781f7f8297fbe6b14473b04214b", features = ["compat", "rand", "appservice-api-c", "client-api", "federation-api", "push-gateway-api-c", "unstable-pre-spec", "unstable-exhaustive-types"] } #ruma = { path = "../ruma/ruma", features = ["compat", "rand", "appservice-api-c", "client-api", "federation-api", "push-gateway-api-c", "unstable-pre-spec", "unstable-exhaustive-types"] } # Used when doing state resolution -state-res = { git = "https://github.com/ruma/state-res", rev = "1dd252d1c97a38def74bc097c197a33179ed8fbb", features = ["unstable-pre-spec"] } +state-res = { git = "https://github.com/ruma/state-res", rev = "ce665d213fffeaa47e146d01c6b87f9eb9feaa52", features = ["unstable-pre-spec"] } #state-res = { path = "../state-res", features = ["unstable-pre-spec"] } # Used for long polling and federation sender, should be the same as rocket::tokio From c2b72773d564942d17ddc1eb1e38c8e0d547ac4b Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Mon, 26 Apr 2021 18:01:41 +0200 Subject: [PATCH 2/3] Fix clippy warning --- src/main.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index af1ddac3..1c058b09 100644 --- a/src/main.rs +++ b/src/main.rs @@ -31,7 +31,7 @@ use tracing::span; use tracing_subscriber::{prelude::*, Registry}; fn setup_rocket(config: Figment, data: Database) -> rocket::Rocket { - let rocket = rocket::custom(config) + rocket::custom(config) .manage(data) .mount( "/", @@ -167,9 +167,7 @@ fn setup_rocket(config: Figment, data: Database) -> rocket::Rocket Date: Mon, 26 Apr 2021 18:20:20 +0200 Subject: [PATCH 3/3] Refactor usage of CanonicalJsonValue --- src/client_server/membership.rs | 17 +++--- src/database/rooms.rs | 23 ++++---- src/pdu.rs | 4 +- src/server_server.rs | 94 ++++++++++++++------------------- 4 files changed, 63 insertions(+), 75 deletions(-) diff --git a/src/client_server/membership.rs b/src/client_server/membership.rs index a9a5109a..05501bdb 100644 --- a/src/client_server/membership.rs +++ b/src/client_server/membership.rs @@ -24,7 +24,7 @@ use ruma::{ room::{create::CreateEventContent, member}, EventType, }, - serde::{to_canonical_value, CanonicalJsonObject, Raw}, + serde::{to_canonical_value, CanonicalJsonObject, CanonicalJsonValue, Raw}, uint, EventId, RoomId, RoomVersionId, ServerName, UserId, }; use state_res::EventMap; @@ -481,13 +481,15 @@ async fn join_room_by_id_helper( // TODO: Is origin needed? join_event_stub.insert( "origin".to_owned(), - to_canonical_value(db.globals.server_name()) - .map_err(|_| Error::bad_database("Invalid server name found"))?, + CanonicalJsonValue::String(db.globals.server_name().as_str().to_owned()), ); join_event_stub.insert( "origin_server_ts".to_owned(), - to_canonical_value(utils::millis_since_unix_epoch()) - .expect("Timestamp is valid js_int value"), + CanonicalJsonValue::Integer( + utils::millis_since_unix_epoch() + .try_into() + .expect("Timestamp is valid js_int value"), + ), ); join_event_stub.insert( "content".to_owned(), @@ -524,7 +526,7 @@ async fn join_room_by_id_helper( // Add event_id back join_event_stub.insert( "event_id".to_owned(), - to_canonical_value(&event_id).expect("EventId is a valid CanonicalJsonValue"), + CanonicalJsonValue::String(event_id.as_str().to_owned()), ); // It has enough fields to be called a proper event now @@ -717,8 +719,7 @@ async fn validate_and_add_event_id( value.insert( "event_id".to_owned(), - to_canonical_value(&event_id) - .expect("a valid EventId can be converted to CanonicalJsonValue"), + CanonicalJsonValue::String(event_id.as_str().to_owned()), ); Ok((event_id, value)) diff --git a/src/database/rooms.rs b/src/database/rooms.rs index 24ab65f3..7cee9440 100644 --- a/src/database/rooms.rs +++ b/src/database/rooms.rs @@ -15,7 +15,7 @@ use ruma::{ AnyStrippedStateEvent, AnySyncStateEvent, EventType, }, push::{self, Action, Tweak}, - serde::{to_canonical_value, CanonicalJsonObject, CanonicalJsonValue, Raw}, + serde::{CanonicalJsonObject, CanonicalJsonValue, Raw}, uint, EventId, RoomAliasId, RoomId, RoomVersionId, ServerName, UserId, }; use sled::IVec; @@ -372,9 +372,7 @@ impl Rooms { for event_id in new_state.difference(&old_state) { if let Some(pdu) = self.get_pdu_json(event_id)? { - if pdu.get("event_type") - == Some(&CanonicalJsonValue::String("m.room.member".to_owned())) - { + if pdu.get("event_type").and_then(|val| val.as_str()) == Some("m.room.member") { if let Ok(pdu) = serde_json::from_value::( serde_json::to_value(&pdu).expect("CanonicalJsonObj is a valid JsonValue"), ) { @@ -1321,8 +1319,7 @@ impl Rooms { // Add origin because synapse likes that (and it's required in the spec) pdu_json.insert( "origin".to_owned(), - to_canonical_value(db.globals.server_name()) - .expect("server name is a valid CanonicalJsonValue"), + CanonicalJsonValue::String(db.globals.server_name().as_ref().to_owned()), ); ruma::signatures::hash_and_sign_event( @@ -1343,7 +1340,7 @@ impl Rooms { pdu_json.insert( "event_id".to_owned(), - to_canonical_value(&pdu.event_id).expect("EventId is a valid CanonicalJsonValue"), + CanonicalJsonValue::String(pdu.event_id.as_str().to_owned()), ); // Increment the last index and use that @@ -1885,13 +1882,15 @@ impl Rooms { // TODO: Is origin needed? leave_event_stub.insert( "origin".to_owned(), - to_canonical_value(db.globals.server_name()) - .map_err(|_| Error::bad_database("Invalid server name found"))?, + CanonicalJsonValue::String(db.globals.server_name().as_str().to_owned()), ); leave_event_stub.insert( "origin_server_ts".to_owned(), - to_canonical_value(utils::millis_since_unix_epoch()) - .expect("Timestamp is valid js_int value"), + CanonicalJsonValue::Integer( + utils::millis_since_unix_epoch() + .try_into() + .expect("Timestamp is valid js_int value"), + ), ); // We don't leave the event id in the pdu because that's only allowed in v1 or v2 rooms leave_event_stub.remove("event_id"); @@ -1916,7 +1915,7 @@ impl Rooms { // Add event_id back leave_event_stub.insert( "event_id".to_owned(), - to_canonical_value(&event_id).expect("EventId is a valid CanonicalJsonValue"), + CanonicalJsonValue::String(event_id.as_str().to_owned()), ); // It has enough fields to be called a proper event now diff --git a/src/pdu.rs b/src/pdu.rs index a7d94328..d66247f7 100644 --- a/src/pdu.rs +++ b/src/pdu.rs @@ -5,7 +5,7 @@ use ruma::{ pdu::EventHash, room::member::MemberEventContent, AnyEvent, AnyRoomEvent, AnyStateEvent, AnyStrippedStateEvent, AnySyncRoomEvent, AnySyncStateEvent, EventType, StateEvent, }, - serde::{to_canonical_value, CanonicalJsonObject, CanonicalJsonValue, Raw}, + serde::{CanonicalJsonObject, CanonicalJsonValue, Raw}, EventId, RoomId, RoomVersionId, ServerName, ServerSigningKeyId, UInt, UserId, }; use serde::{Deserialize, Serialize}; @@ -238,7 +238,7 @@ impl PduEvent { ) -> Result { json.insert( "event_id".to_string(), - to_canonical_value(event_id).expect("event_id is a valid Value"), + CanonicalJsonValue::String(event_id.as_str().to_owned()), ); serde_json::from_value(serde_json::to_value(json).expect("valid JSON")) diff --git a/src/server_server.rs b/src/server_server.rs index a6d58642..1e58067e 100644 --- a/src/server_server.rs +++ b/src/server_server.rs @@ -33,7 +33,7 @@ use ruma::{ }, EventType, }, - serde::{to_canonical_value, Raw}, + serde::Raw, signatures::{CanonicalJsonObject, CanonicalJsonValue}, uint, EventId, RoomId, RoomVersionId, ServerName, ServerSigningKeyId, UserId, }; @@ -709,11 +709,7 @@ pub fn handle_incoming_pdu<'a>( // 1. Check the server is in the room let room_id = match value .get("room_id") - .map(|id| match id { - CanonicalJsonValue::String(id) => RoomId::try_from(id.as_str()).ok(), - _ => None, - }) - .flatten() + .and_then(|id| RoomId::try_from(id.as_str()?).ok()) { Some(id) => id, None => { @@ -776,7 +772,7 @@ pub fn handle_incoming_pdu<'a>( // to our PduEvent type val.insert( "event_id".to_owned(), - to_canonical_value(&event_id).expect("EventId is a valid CanonicalJsonValue"), + CanonicalJsonValue::String(event_id.as_str().to_owned()), ); let incoming_pdu = serde_json::from_value::( serde_json::to_value(&val).expect("CanonicalJsonObj is a valid JsonValue"), @@ -1306,8 +1302,7 @@ pub(crate) fn fetch_and_handle_events<'a>( Ok(_) => { value.insert( "event_id".to_owned(), - to_canonical_value(&event_id) - .expect("EventId is a valid CanonicalJsonValue"), + CanonicalJsonValue::String(event_id.into()), ); Arc::new(serde_json::from_value( @@ -1805,8 +1800,7 @@ pub fn create_join_event_template_route<'a>( // Add origin because synapse likes that (and it's required in the spec) pdu_json.insert( "origin".to_owned(), - to_canonical_value(db.globals.server_name()) - .expect("server name is a valid CanonicalJsonValue"), + CanonicalJsonValue::String(db.globals.server_name().as_str().to_owned()), ); Ok(create_join_event_template::v1::Response { @@ -1979,33 +1973,30 @@ pub async fn create_invite_route<'a>( // Add event_id back signed_event.insert( "event_id".to_owned(), - to_canonical_value(&event_id).expect("EventId is a valid CanonicalJsonValue"), + CanonicalJsonValue::String(event_id.into()), ); let sender = serde_json::from_value( - serde_json::to_value( - signed_event - .get("sender") - .ok_or(Error::BadRequest( - ErrorKind::InvalidParam, - "Event had no sender field.", - ))? - .clone(), - ) - .expect("CanonicalJsonValue to serde_json::Value always works"), + signed_event + .get("sender") + .ok_or(Error::BadRequest( + ErrorKind::InvalidParam, + "Event had no sender field.", + ))? + .clone() + .into(), ) .map_err(|_| Error::BadRequest(ErrorKind::InvalidParam, "sender is not a user id."))?; + let invited_user = serde_json::from_value( - serde_json::to_value( - signed_event - .get("state_key") - .ok_or(Error::BadRequest( - ErrorKind::InvalidParam, - "Event had no state_key field.", - ))? - .clone(), - ) - .expect("CanonicalJsonValue to serde_json::Value always works"), + signed_event + .get("state_key") + .ok_or(Error::BadRequest( + ErrorKind::InvalidParam, + "Event had no state_key field.", + ))? + .clone() + .into(), ) .map_err(|_| Error::BadRequest(ErrorKind::InvalidParam, "state_key is not a user id."))?; @@ -2150,39 +2141,36 @@ pub async fn fetch_required_signing_keys( pub_key_map: &RwLock>>, db: &Database, ) -> Result<()> { + let signatures = event + .get("signatures") + .ok_or(Error::BadServerResponse( + "No signatures in server response pdu.", + ))? + .as_object() + .ok_or(Error::BadServerResponse( + "Invalid signatures object in server response pdu.", + ))?; + // We go through all the signatures we see on the value and fetch the corresponding signing // keys - for (signature_server, signature) in match event.get("signatures").ok_or( - Error::BadServerResponse("No signatures in server response pdu."), - )? { - CanonicalJsonValue::Object(map) => map, - _ => { - return Err(Error::BadServerResponse( - "Invalid signatures object in server response pdu.", - )) - } - } { - let signature_object = match signature { - CanonicalJsonValue::Object(map) => map, - _ => { - return Err(Error::BadServerResponse( - "Invalid signatures content object in server response pdu.", - )) - } - }; + for (signature_server, signature) in signatures { + let signature_object = signature.as_object().ok_or(Error::BadServerResponse( + "Invalid signatures content object in server response pdu.", + ))?; let signature_ids = signature_object.keys().collect::>(); debug!("Fetching signing keys for {}", signature_server); - let keys = match fetch_signing_keys( + let fetch_res = fetch_signing_keys( db, &Box::::try_from(&**signature_server).map_err(|_| { Error::BadServerResponse("Invalid servername in signatures of server response pdu.") })?, signature_ids, ) - .await - { + .await; + + let keys = match fetch_res { Ok(keys) => keys, Err(_) => { warn!("Signature verification failed: Could not fetch signing key.",);