apply new rustfmt.toml changes, fix some clippy lints
Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
parent
0317cc8cc5
commit
77e0b76408
296 changed files with 7147 additions and 4300 deletions
|
@ -4,11 +4,13 @@ use std::{
|
|||
time::Duration,
|
||||
};
|
||||
|
||||
use conduwuit::{debug, debug_error, debug_warn, error, implement, info, result::FlatOk, trace, warn};
|
||||
use conduwuit::{
|
||||
debug, debug_error, debug_warn, error, implement, info, result::FlatOk, trace, warn,
|
||||
};
|
||||
use futures::{stream::FuturesUnordered, StreamExt};
|
||||
use ruma::{
|
||||
api::federation::discovery::ServerSigningKeys, serde::Raw, CanonicalJsonObject, OwnedServerName,
|
||||
OwnedServerSigningKeyId, ServerName, ServerSigningKeyId,
|
||||
api::federation::discovery::ServerSigningKeys, serde::Raw, CanonicalJsonObject,
|
||||
OwnedServerName, OwnedServerSigningKeyId, ServerName, ServerSigningKeyId,
|
||||
};
|
||||
use serde_json::value::RawValue as RawJsonValue;
|
||||
use tokio::time::{timeout_at, Instant};
|
||||
|
@ -79,7 +81,9 @@ where
|
|||
return;
|
||||
}
|
||||
|
||||
warn!("missing {missing_keys} keys for {missing_servers} servers from all notaries first");
|
||||
warn!(
|
||||
"missing {missing_keys} keys for {missing_servers} servers from all notaries first"
|
||||
);
|
||||
}
|
||||
|
||||
if !notary_only {
|
||||
|
@ -101,13 +105,15 @@ where
|
|||
return;
|
||||
}
|
||||
|
||||
debug_warn!("still missing {missing_keys} keys for {missing_servers} servers from all notaries.");
|
||||
debug_warn!(
|
||||
"still missing {missing_keys} keys for {missing_servers} servers from all notaries."
|
||||
);
|
||||
}
|
||||
|
||||
if missing_keys > 0 {
|
||||
warn!(
|
||||
"did not obtain {missing_keys} keys for {missing_servers} servers out of {requested_keys} total keys for \
|
||||
{requested_servers} total servers."
|
||||
"did not obtain {missing_keys} keys for {missing_servers} servers out of \
|
||||
{requested_keys} total keys for {requested_servers} total servers."
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -162,12 +168,15 @@ where
|
|||
|
||||
#[implement(super::Service)]
|
||||
async fn acquire_origin(
|
||||
&self, origin: OwnedServerName, mut key_ids: Vec<OwnedServerSigningKeyId>, timeout: Instant,
|
||||
&self,
|
||||
origin: OwnedServerName,
|
||||
mut key_ids: Vec<OwnedServerSigningKeyId>,
|
||||
timeout: Instant,
|
||||
) -> (OwnedServerName, Vec<OwnedServerSigningKeyId>) {
|
||||
match timeout_at(timeout, self.server_request(&origin)).await {
|
||||
Err(e) => debug_warn!(?origin, "timed out: {e}"),
|
||||
Ok(Err(e)) => debug_error!(?origin, "{e}"),
|
||||
Ok(Ok(server_keys)) => {
|
||||
| Err(e) => debug_warn!(?origin, "timed out: {e}"),
|
||||
| Ok(Err(e)) => debug_error!(?origin, "{e}"),
|
||||
| Ok(Ok(server_keys)) => {
|
||||
trace!(
|
||||
%origin,
|
||||
?key_ids,
|
||||
|
@ -192,19 +201,21 @@ where
|
|||
for notary in self.services.globals.trusted_servers() {
|
||||
let missing_keys = keys_count(&missing);
|
||||
let missing_servers = missing.len();
|
||||
debug!("Asking notary {notary} for {missing_keys} missing keys from {missing_servers} servers");
|
||||
debug!(
|
||||
"Asking notary {notary} for {missing_keys} missing keys from {missing_servers} \
|
||||
servers"
|
||||
);
|
||||
|
||||
let batch = missing
|
||||
.iter()
|
||||
.map(|(server, keys)| (server.borrow(), keys.iter().map(Borrow::borrow)));
|
||||
|
||||
match self.batch_notary_request(notary, batch).await {
|
||||
Err(e) => error!("Failed to contact notary {notary:?}: {e}"),
|
||||
Ok(results) => {
|
||||
| Err(e) => error!("Failed to contact notary {notary:?}: {e}"),
|
||||
| Ok(results) =>
|
||||
for server_keys in results {
|
||||
self.acquire_notary_result(&mut missing, server_keys).await;
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -224,4 +235,6 @@ async fn acquire_notary_result(&self, missing: &mut Batch, server_keys: ServerSi
|
|||
}
|
||||
}
|
||||
|
||||
fn keys_count(batch: &Batch) -> usize { batch.iter().flat_map(|(_, key_ids)| key_ids.iter()).count() }
|
||||
fn keys_count(batch: &Batch) -> usize {
|
||||
batch.iter().flat_map(|(_, key_ids)| key_ids.iter()).count()
|
||||
}
|
||||
|
|
|
@ -1,17 +1,25 @@
|
|||
use std::borrow::Borrow;
|
||||
|
||||
use conduwuit::{implement, Err, Result};
|
||||
use ruma::{api::federation::discovery::VerifyKey, CanonicalJsonObject, RoomVersionId, ServerName, ServerSigningKeyId};
|
||||
use ruma::{
|
||||
api::federation::discovery::VerifyKey, CanonicalJsonObject, RoomVersionId, ServerName,
|
||||
ServerSigningKeyId,
|
||||
};
|
||||
|
||||
use super::{extract_key, PubKeyMap, PubKeys};
|
||||
|
||||
#[implement(super::Service)]
|
||||
pub async fn get_event_keys(&self, object: &CanonicalJsonObject, version: &RoomVersionId) -> Result<PubKeyMap> {
|
||||
pub async fn get_event_keys(
|
||||
&self,
|
||||
object: &CanonicalJsonObject,
|
||||
version: &RoomVersionId,
|
||||
) -> Result<PubKeyMap> {
|
||||
use ruma::signatures::required_keys;
|
||||
|
||||
let required = match required_keys(object, version) {
|
||||
Ok(required) => required,
|
||||
Err(e) => return Err!(BadServerResponse("Failed to determine keys required to verify: {e}")),
|
||||
| Ok(required) => required,
|
||||
| Err(e) =>
|
||||
return Err!(BadServerResponse("Failed to determine keys required to verify: {e}")),
|
||||
};
|
||||
|
||||
let batch = required
|
||||
|
@ -52,7 +60,11 @@ where
|
|||
}
|
||||
|
||||
#[implement(super::Service)]
|
||||
pub async fn get_verify_key(&self, origin: &ServerName, key_id: &ServerSigningKeyId) -> Result<VerifyKey> {
|
||||
pub async fn get_verify_key(
|
||||
&self,
|
||||
origin: &ServerName,
|
||||
key_id: &ServerSigningKeyId,
|
||||
) -> Result<VerifyKey> {
|
||||
let notary_first = self.services.server.config.query_trusted_key_servers_first;
|
||||
let notary_only = self.services.server.config.only_query_trusted_key_servers;
|
||||
|
||||
|
@ -86,7 +98,11 @@ pub async fn get_verify_key(&self, origin: &ServerName, key_id: &ServerSigningKe
|
|||
}
|
||||
|
||||
#[implement(super::Service)]
|
||||
async fn get_verify_key_from_notaries(&self, origin: &ServerName, key_id: &ServerSigningKeyId) -> Result<VerifyKey> {
|
||||
async fn get_verify_key_from_notaries(
|
||||
&self,
|
||||
origin: &ServerName,
|
||||
key_id: &ServerSigningKeyId,
|
||||
) -> Result<VerifyKey> {
|
||||
for notary in self.services.globals.trusted_servers() {
|
||||
if let Ok(server_keys) = self.notary_request(notary, origin).await {
|
||||
for server_key in server_keys.clone() {
|
||||
|
@ -105,7 +121,11 @@ async fn get_verify_key_from_notaries(&self, origin: &ServerName, key_id: &Serve
|
|||
}
|
||||
|
||||
#[implement(super::Service)]
|
||||
async fn get_verify_key_from_origin(&self, origin: &ServerName, key_id: &ServerSigningKeyId) -> Result<VerifyKey> {
|
||||
async fn get_verify_key_from_origin(
|
||||
&self,
|
||||
origin: &ServerName,
|
||||
key_id: &ServerSigningKeyId,
|
||||
) -> Result<VerifyKey> {
|
||||
if let Ok(server_key) = self.server_request(origin).await {
|
||||
self.add_signing_keys(server_key.clone()).await;
|
||||
if let Some(result) = extract_key(server_key, key_id) {
|
||||
|
|
|
@ -39,14 +39,15 @@ fn load(db: &Arc<Database>) -> Result<Box<Ed25519KeyPair>> {
|
|||
create(db)
|
||||
})?;
|
||||
|
||||
let key =
|
||||
Ed25519KeyPair::from_der(&key, version).map_err(|e| err!("Failed to load ed25519 keypair from der: {e:?}"))?;
|
||||
let key = Ed25519KeyPair::from_der(&key, version)
|
||||
.map_err(|e| err!("Failed to load ed25519 keypair from der: {e:?}"))?;
|
||||
|
||||
Ok(Box::new(key))
|
||||
}
|
||||
|
||||
fn create(db: &Arc<Database>) -> Result<(String, Vec<u8>)> {
|
||||
let keypair = Ed25519KeyPair::generate().map_err(|e| err!("Failed to generate new ed25519 keypair: {e:?}"))?;
|
||||
let keypair = Ed25519KeyPair::generate()
|
||||
.map_err(|e| err!("Failed to generate new ed25519 keypair: {e:?}"))?;
|
||||
|
||||
let id = utils::rand::string(8);
|
||||
debug_info!("Generated new Ed25519 keypair: {id:?}");
|
||||
|
|
|
@ -18,8 +18,8 @@ use ruma::{
|
|||
api::federation::discovery::{ServerSigningKeys, VerifyKey},
|
||||
serde::Raw,
|
||||
signatures::{Ed25519KeyPair, PublicKeyMap, PublicKeySet},
|
||||
CanonicalJsonObject, MilliSecondsSinceUnixEpoch, OwnedServerSigningKeyId, RoomVersionId, ServerName,
|
||||
ServerSigningKeyId,
|
||||
CanonicalJsonObject, MilliSecondsSinceUnixEpoch, OwnedServerSigningKeyId, RoomVersionId,
|
||||
ServerName, ServerSigningKeyId,
|
||||
};
|
||||
use serde_json::value::RawValue as RawJsonValue;
|
||||
|
||||
|
@ -113,7 +113,11 @@ async fn add_signing_keys(&self, new_keys: ServerSigningKeys) {
|
|||
}
|
||||
|
||||
#[implement(Service)]
|
||||
pub async fn required_keys_exist(&self, object: &CanonicalJsonObject, version: &RoomVersionId) -> bool {
|
||||
pub async fn required_keys_exist(
|
||||
&self,
|
||||
object: &CanonicalJsonObject,
|
||||
version: &RoomVersionId,
|
||||
) -> bool {
|
||||
use ruma::signatures::required_keys;
|
||||
|
||||
let Ok(required_keys) = required_keys(object, version) else {
|
||||
|
@ -179,7 +183,8 @@ pub async fn signing_keys_for(&self, origin: &ServerName) -> Result<ServerSignin
|
|||
|
||||
#[implement(Service)]
|
||||
fn minimum_valid_ts(&self) -> MilliSecondsSinceUnixEpoch {
|
||||
let timepoint = timepoint_from_now(self.minimum_valid).expect("SystemTime should not overflow");
|
||||
let timepoint =
|
||||
timepoint_from_now(self.minimum_valid).expect("SystemTime should not overflow");
|
||||
MilliSecondsSinceUnixEpoch::from_system_time(timepoint).expect("UInt should not overflow")
|
||||
}
|
||||
|
||||
|
|
|
@ -12,7 +12,9 @@ use ruma::{
|
|||
|
||||
#[implement(super::Service)]
|
||||
pub(super) async fn batch_notary_request<'a, S, K>(
|
||||
&self, notary: &ServerName, batch: S,
|
||||
&self,
|
||||
notary: &ServerName,
|
||||
batch: S,
|
||||
) -> Result<Vec<ServerSigningKeys>>
|
||||
where
|
||||
S: Iterator<Item = (&'a ServerName, K)> + Send,
|
||||
|
@ -74,7 +76,9 @@ where
|
|||
|
||||
#[implement(super::Service)]
|
||||
pub async fn notary_request(
|
||||
&self, notary: &ServerName, target: &ServerName,
|
||||
&self,
|
||||
notary: &ServerName,
|
||||
target: &ServerName,
|
||||
) -> Result<impl Iterator<Item = ServerSigningKeys> + Clone + Debug + Send> {
|
||||
use get_remote_server_keys::v2::Request;
|
||||
|
||||
|
|
|
@ -10,7 +10,11 @@ pub fn sign_json(&self, object: &mut CanonicalJsonObject) -> Result {
|
|||
}
|
||||
|
||||
#[implement(super::Service)]
|
||||
pub fn hash_and_sign_event(&self, object: &mut CanonicalJsonObject, room_version: &RoomVersionId) -> Result {
|
||||
pub fn hash_and_sign_event(
|
||||
&self,
|
||||
object: &mut CanonicalJsonObject,
|
||||
room_version: &RoomVersionId,
|
||||
) -> Result {
|
||||
use ruma::signatures::hash_and_sign_event;
|
||||
|
||||
let server_name = self.services.globals.server_name().as_str();
|
||||
|
|
|
@ -1,14 +1,20 @@
|
|||
use conduwuit::{implement, pdu::gen_event_id_canonical_json, Err, Result};
|
||||
use ruma::{signatures::Verified, CanonicalJsonObject, CanonicalJsonValue, OwnedEventId, RoomVersionId};
|
||||
use ruma::{
|
||||
signatures::Verified, CanonicalJsonObject, CanonicalJsonValue, OwnedEventId, RoomVersionId,
|
||||
};
|
||||
use serde_json::value::RawValue as RawJsonValue;
|
||||
|
||||
#[implement(super::Service)]
|
||||
pub async fn validate_and_add_event_id(
|
||||
&self, pdu: &RawJsonValue, room_version: &RoomVersionId,
|
||||
&self,
|
||||
pdu: &RawJsonValue,
|
||||
room_version: &RoomVersionId,
|
||||
) -> Result<(OwnedEventId, CanonicalJsonObject)> {
|
||||
let (event_id, mut value) = gen_event_id_canonical_json(pdu, room_version)?;
|
||||
if let Err(e) = self.verify_event(&value, Some(room_version)).await {
|
||||
return Err!(BadServerResponse(debug_error!("Event {event_id} failed verification: {e:?}")));
|
||||
return Err!(BadServerResponse(debug_error!(
|
||||
"Event {event_id} failed verification: {e:?}"
|
||||
)));
|
||||
}
|
||||
|
||||
value.insert("event_id".into(), CanonicalJsonValue::String(event_id.as_str().into()));
|
||||
|
@ -18,7 +24,9 @@ pub async fn validate_and_add_event_id(
|
|||
|
||||
#[implement(super::Service)]
|
||||
pub async fn validate_and_add_event_id_no_fetch(
|
||||
&self, pdu: &RawJsonValue, room_version: &RoomVersionId,
|
||||
&self,
|
||||
pdu: &RawJsonValue,
|
||||
room_version: &RoomVersionId,
|
||||
) -> Result<(OwnedEventId, CanonicalJsonObject)> {
|
||||
let (event_id, mut value) = gen_event_id_canonical_json(pdu, room_version)?;
|
||||
if !self.required_keys_exist(&value, room_version).await {
|
||||
|
@ -28,7 +36,9 @@ pub async fn validate_and_add_event_id_no_fetch(
|
|||
}
|
||||
|
||||
if let Err(e) = self.verify_event(&value, Some(room_version)).await {
|
||||
return Err!(BadServerResponse(debug_error!("Event {event_id} failed verification: {e:?}")));
|
||||
return Err!(BadServerResponse(debug_error!(
|
||||
"Event {event_id} failed verification: {e:?}"
|
||||
)));
|
||||
}
|
||||
|
||||
value.insert("event_id".into(), CanonicalJsonValue::String(event_id.as_str().into()));
|
||||
|
@ -38,7 +48,9 @@ pub async fn validate_and_add_event_id_no_fetch(
|
|||
|
||||
#[implement(super::Service)]
|
||||
pub async fn verify_event(
|
||||
&self, event: &CanonicalJsonObject, room_version: Option<&RoomVersionId>,
|
||||
&self,
|
||||
event: &CanonicalJsonObject,
|
||||
room_version: Option<&RoomVersionId>,
|
||||
) -> Result<Verified> {
|
||||
let room_version = room_version.unwrap_or(&RoomVersionId::V11);
|
||||
let keys = self.get_event_keys(event, room_version).await?;
|
||||
|
@ -46,7 +58,11 @@ pub async fn verify_event(
|
|||
}
|
||||
|
||||
#[implement(super::Service)]
|
||||
pub async fn verify_json(&self, event: &CanonicalJsonObject, room_version: Option<&RoomVersionId>) -> Result {
|
||||
pub async fn verify_json(
|
||||
&self,
|
||||
event: &CanonicalJsonObject,
|
||||
room_version: Option<&RoomVersionId>,
|
||||
) -> Result {
|
||||
let room_version = room_version.unwrap_or(&RoomVersionId::V11);
|
||||
let keys = self.get_event_keys(event, room_version).await?;
|
||||
ruma::signatures::verify_json(&keys, event.clone()).map_err(Into::into)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue