From 7eb945976cb23f6bed0d49d3c4be7515aaa80b61 Mon Sep 17 00:00:00 2001 From: Isaiah Inuwa Date: Wed, 5 Aug 2020 21:04:49 -0500 Subject: [PATCH] Use strong types in signatures fields --- ruma-client-api/CHANGELOG.md | 2 + ruma-client-api/src/r0/membership.rs | 3 +- ruma-events/CHANGELOG.md | 3 ++ ruma-events/src/pdu.rs | 10 ++--- ruma-events/src/room/member.rs | 15 +++---- ruma-events/tests/pdu.rs | 59 +++++++++++++++++----------- 6 files changed, 55 insertions(+), 37 deletions(-) diff --git a/ruma-client-api/CHANGELOG.md b/ruma-client-api/CHANGELOG.md index 4ba3f3d9..2f7bfcaf 100644 --- a/ruma-client-api/CHANGELOG.md +++ b/ruma-client-api/CHANGELOG.md @@ -52,6 +52,8 @@ Breaking changes: * Rename `r0::state::{create_state_event_* => send_state_event_*}` * Replace `r0::keys::{AlgorithmAndDeviceId, KeyAlgorithm}` with `ruma_identifiers::{DeviceKeyId, DeviceKeyAlgorithm}`, respectively +* Use `ruma_identifiers::{ServerName, ServerKeyId}` in `signatures` fields of + `r0::room::membership::ThirdPartySigned`. Improvements: diff --git a/ruma-client-api/src/r0/membership.rs b/ruma-client-api/src/r0/membership.rs index 047276f0..85dc443d 100644 --- a/ruma-client-api/src/r0/membership.rs +++ b/ruma-client-api/src/r0/membership.rs @@ -17,6 +17,7 @@ use std::collections::BTreeMap; use serde::{Deserialize, Serialize}; use crate::r0::thirdparty::Medium; +use ruma_identifiers::{ServerKeyId, ServerName}; /// A signature of an `m.third_party_invite` token to prove that this user owns a third party /// identity which has been invited to the room. @@ -32,7 +33,7 @@ pub struct ThirdPartySigned { pub token: String, /// A signatures object containing a signature of the entire signed object. - pub signatures: BTreeMap>, + pub signatures: BTreeMap, BTreeMap>, } /// Represents third party IDs to invite to the room. diff --git a/ruma-events/CHANGELOG.md b/ruma-events/CHANGELOG.md index ccfb0ba3..8cc83a22 100644 --- a/ruma-events/CHANGELOG.md +++ b/ruma-events/CHANGELOG.md @@ -3,6 +3,9 @@ Breaking changes: * Update strum dependency to 0.19 +* Use `ruma_identifiers::{ServerName, ServerKeyId}` in `signatures` fields of + `pdu::RoomV1Pdu, RoomV1PduStub, RoomV3Pdu, RoomV3PduStub}` and + `room::member::SignedContent`. # 0.22.0 diff --git a/ruma-events/src/pdu.rs b/ruma-events/src/pdu.rs index 9bc411ff..af05b085 100644 --- a/ruma-events/src/pdu.rs +++ b/ruma-events/src/pdu.rs @@ -12,7 +12,7 @@ use std::{collections::BTreeMap, time::SystemTime}; use js_int::UInt; use ruma_events::EventType; -use ruma_identifiers::{EventId, RoomId, ServerName, UserId}; +use ruma_identifiers::{EventId, RoomId, ServerKeyId, ServerName, UserId}; use serde::{Deserialize, Serialize}; use serde_json::Value as JsonValue; @@ -84,7 +84,7 @@ pub struct RoomV1Pdu { pub hashes: EventHash, /// Signatures for the PDU. - pub signatures: BTreeMap, BTreeMap>, + pub signatures: BTreeMap, BTreeMap>, } /// A 'persistent data unit' (event) for room versions 3 and beyond. @@ -140,7 +140,7 @@ pub struct RoomV3Pdu { pub hashes: EventHash, /// Signatures for the PDU. - pub signatures: BTreeMap, BTreeMap>, + pub signatures: BTreeMap, BTreeMap>, } /// PDU type without event and room IDs. @@ -216,7 +216,7 @@ pub struct RoomV1PduStub { pub hashes: EventHash, /// Signatures for the PDU. - pub signatures: BTreeMap, BTreeMap>, + pub signatures: BTreeMap, BTreeMap>, } impl RoomV1PduStub { @@ -292,7 +292,7 @@ pub struct RoomV3PduStub { pub hashes: EventHash, /// Signatures for the PDU. - pub signatures: BTreeMap, BTreeMap>, + pub signatures: BTreeMap, BTreeMap>, } impl RoomV3PduStub { diff --git a/ruma-events/src/room/member.rs b/ruma-events/src/room/member.rs index f4b3b576..ce9d7bbb 100644 --- a/ruma-events/src/room/member.rs +++ b/ruma-events/src/room/member.rs @@ -3,7 +3,7 @@ use std::collections::BTreeMap; use ruma_events_macros::StateEventContent; -use ruma_identifiers::UserId; +use ruma_identifiers::{ServerKeyId, ServerName, UserId}; use serde::{Deserialize, Serialize}; use strum::{Display, EnumString}; @@ -108,7 +108,7 @@ pub struct SignedContent { /// A single signature from the verifying server, in the format specified by the Signing Events /// section of the server-server API. - pub signatures: BTreeMap>, + pub signatures: BTreeMap, BTreeMap>, /// The token property of the containing third_party_invite object. pub token: String, @@ -248,11 +248,12 @@ mod tests { use maplit::btreemap; use matches::assert_matches; + use ruma_common::Raw; + use ruma_identifiers::{server_key_id, server_name}; use serde_json::{from_value as from_json_value, json}; use super::{MemberEventContent, MembershipState, SignedContent, ThirdPartyInvite}; use crate::StateEvent; - use ruma_common::Raw; #[test] fn serde_with_no_prev_content() { @@ -406,8 +407,8 @@ mod tests { && third_party_displayname == "alice" && mxid == "@alice:example.org" && signatures == btreemap! { - "magic.forest".to_owned() => btreemap! { - "ed25519:3".to_owned() => "foobar".to_owned() + server_name!("magic.forest") => btreemap! { + server_key_id!("ed25519:3") => "foobar".to_owned() } } && token == "abc123" @@ -492,8 +493,8 @@ mod tests { && third_party_displayname == "alice" && mxid == "@alice:example.org" && signatures == btreemap! { - "magic.forest".to_owned() => btreemap! { - "ed25519:3".to_owned() => "foobar".to_owned() + server_name!("magic.forest") => btreemap! { + server_key_id!("ed25519:3") => "foobar".to_owned() } } && token == "abc123" diff --git a/ruma-events/tests/pdu.rs b/ruma-events/tests/pdu.rs index d4e7f25c..26d23f54 100644 --- a/ruma-events/tests/pdu.rs +++ b/ruma-events/tests/pdu.rs @@ -1,6 +1,5 @@ use std::{ collections::BTreeMap, - convert::TryInto, time::{Duration, SystemTime}, }; @@ -9,16 +8,18 @@ use ruma_events::{ pdu::{EventHash, Pdu, PduStub, RoomV1Pdu, RoomV1PduStub, RoomV3Pdu, RoomV3PduStub}, EventType, }; -use ruma_identifiers::{event_id, room_id, user_id}; +use ruma_identifiers::{event_id, room_id, server_key_id, server_name, user_id}; use serde_json::{from_value as from_json_value, json, to_value as to_json_value}; #[test] fn serialize_stub_as_v1() { let mut signatures = BTreeMap::new(); let mut inner_signature = BTreeMap::new(); - inner_signature - .insert("ed25519:key_version".into(), "86BytesOfSignatureOfTheRedactedEvent".into()); - signatures.insert("example.com".try_into().unwrap(), inner_signature); + inner_signature.insert( + server_key_id!("ed25519:key_version"), + "86BytesOfSignatureOfTheRedactedEvent".into(), + ); + signatures.insert(server_name!("example.com"), inner_signature); let mut unsigned = BTreeMap::new(); unsigned.insert("somekey".into(), json!({"a": 456})); @@ -77,9 +78,11 @@ fn serialize_stub_as_v1() { fn serialize_stub_as_v3() { let mut signatures = BTreeMap::new(); let mut inner_signature = BTreeMap::new(); - inner_signature - .insert("ed25519:key_version".into(), "86BytesOfSignatureOfTheRedactedEvent".into()); - signatures.insert("example.com".try_into().unwrap(), inner_signature); + inner_signature.insert( + server_key_id!("ed25519:key_version"), + "86BytesOfSignatureOfTheRedactedEvent".into(), + ); + signatures.insert(server_name!("example.com"), inner_signature); let mut unsigned = BTreeMap::new(); unsigned.insert("somekey".into(), json!({"a": 456})); @@ -158,7 +161,7 @@ fn deserialize_stub_as_v1() { "sender": "@someone:matrix.org", "signatures": { "example.com": { - "ed25519:key_version:": "86BytesOfSignatureOfTheRedactedEvent" + "ed25519:key_version": "86BytesOfSignatureOfTheRedactedEvent" } }, "state_key": "my_key", @@ -205,7 +208,7 @@ fn deserialize_stub_as_v3() { "sender": "@someone:matrix.org", "signatures": { "example.com": { - "ed25519:key_version:": "86BytesOfSignatureOfTheRedactedEvent" + "ed25519:key_version": "86BytesOfSignatureOfTheRedactedEvent" } }, "state_key": "my_key", @@ -228,9 +231,11 @@ fn deserialize_stub_as_v3() { fn serialize_pdu_as_v1() { let mut signatures = BTreeMap::new(); let mut inner_signature = BTreeMap::new(); - inner_signature - .insert("ed25519:key_version".into(), "86BytesOfSignatureOfTheRedactedEvent".into()); - signatures.insert("example.com".try_into().unwrap(), inner_signature); + inner_signature.insert( + server_key_id!("ed25519:key_version"), + "86BytesOfSignatureOfTheRedactedEvent".into(), + ); + signatures.insert(server_name!("example.com"), inner_signature); let mut unsigned = BTreeMap::new(); unsigned.insert("somekey".into(), json!({"a": 456})); @@ -293,9 +298,11 @@ fn serialize_pdu_as_v1() { fn serialize_pdu_as_v3() { let mut signatures = BTreeMap::new(); let mut inner_signature = BTreeMap::new(); - inner_signature - .insert("ed25519:key_version".into(), "86BytesOfSignatureOfTheRedactedEvent".into()); - signatures.insert("example.com".try_into().unwrap(), inner_signature); + inner_signature.insert( + server_key_id!("ed25519:key_version"), + "86BytesOfSignatureOfTheRedactedEvent".into(), + ); + signatures.insert(server_name!("example.com"), inner_signature); let mut unsigned = BTreeMap::new(); unsigned.insert("somekey".into(), json!({"a": 456})); @@ -378,7 +385,7 @@ fn test_deserialize_pdu_as_v1() { "sender": "@someone:matrix.org", "signatures": { "example.com": { - "ed25519:key_version:": "86BytesOfSignatureOfTheRedactedEvent" + "ed25519:key_version": "86BytesOfSignatureOfTheRedactedEvent" } }, "state_key": "my_key", @@ -426,7 +433,7 @@ fn deserialize_pdu_as_v3() { "sender": "@someone:matrix.org", "signatures": { "example.com": { - "ed25519:key_version:": "86BytesOfSignatureOfTheRedactedEvent" + "ed25519:key_version": "86BytesOfSignatureOfTheRedactedEvent" } }, "state_key": "my_key", @@ -449,9 +456,11 @@ fn deserialize_pdu_as_v3() { fn convert_v1_stub_to_pdu() { let mut signatures = BTreeMap::new(); let mut inner_signature = BTreeMap::new(); - inner_signature - .insert("ed25519:key_version".into(), "86BytesOfSignatureOfTheRedactedEvent".into()); - signatures.insert("example.com".try_into().unwrap(), inner_signature); + inner_signature.insert( + server_key_id!("ed25519:key_version"), + "86BytesOfSignatureOfTheRedactedEvent".into(), + ); + signatures.insert(server_name!("example.com"), inner_signature); let mut unsigned = BTreeMap::new(); unsigned.insert("somekey".into(), json!({"a": 456})); @@ -523,10 +532,12 @@ fn convert_v1_stub_to_pdu() { fn convert_v3_stub_to_pdu() { let mut signatures = BTreeMap::new(); let mut inner_signature = BTreeMap::new(); - inner_signature - .insert("ed25519:key_version".into(), "86BytesOfSignatureOfTheRedactedEvent".into()); + inner_signature.insert( + server_key_id!("ed25519:key_version"), + "86BytesOfSignatureOfTheRedactedEvent".into(), + ); - signatures.insert("example.com".try_into().unwrap(), inner_signature); + signatures.insert(server_name!("example.com"), inner_signature); let mut unsigned = BTreeMap::new(); unsigned.insert("somekey".into(), json!({"a": 456}));