try partially reverting 94b107b42b
Signed-off-by: June Clementine Strawberry <june@3.dog>
This commit is contained in:
parent
a212bf7cfc
commit
c7246662f4
1 changed files with 10 additions and 33 deletions
|
@ -11,7 +11,7 @@ use ruma::{
|
||||||
error::ErrorKind,
|
error::ErrorKind,
|
||||||
keys::{
|
keys::{
|
||||||
claim_keys, get_key_changes, get_keys, upload_keys,
|
claim_keys, get_key_changes, get_keys, upload_keys,
|
||||||
upload_signatures::{self, v3::Failure},
|
upload_signatures::{self},
|
||||||
upload_signing_keys,
|
upload_signing_keys,
|
||||||
},
|
},
|
||||||
uiaa::{AuthFlow, AuthType, UiaaInfo},
|
uiaa::{AuthFlow, AuthType, UiaaInfo},
|
||||||
|
@ -308,82 +308,59 @@ async fn check_for_new_keys(
|
||||||
///
|
///
|
||||||
/// Uploads end-to-end key signatures from the sender user.
|
/// Uploads end-to-end key signatures from the sender user.
|
||||||
///
|
///
|
||||||
/// TODO: clean this timo-code up more. tried to improve it a bit to stop
|
/// TODO: clean this timo-code up more and integrate failures. tried to improve
|
||||||
/// exploding the entire request on bad sigs, but needs way more work.
|
/// it a bit to stop exploding the entire request on bad sigs, but needs way
|
||||||
|
/// more work.
|
||||||
pub(crate) async fn upload_signatures_route(
|
pub(crate) async fn upload_signatures_route(
|
||||||
State(services): State<crate::State>,
|
State(services): State<crate::State>,
|
||||||
body: Ruma<upload_signatures::v3::Request>,
|
body: Ruma<upload_signatures::v3::Request>,
|
||||||
) -> Result<upload_signatures::v3::Response> {
|
) -> Result<upload_signatures::v3::Response> {
|
||||||
use upload_signatures::v3::FailureErrorCode::*;
|
|
||||||
|
|
||||||
if body.signed_keys.is_empty() {
|
if body.signed_keys.is_empty() {
|
||||||
debug!("Empty signed_keys sent in key signature upload");
|
debug!("Empty signed_keys sent in key signature upload");
|
||||||
return Ok(upload_signatures::v3::Response::new());
|
return Ok(upload_signatures::v3::Response::new());
|
||||||
}
|
}
|
||||||
|
|
||||||
let sender_user = body.sender_user();
|
let sender_user = body.sender_user();
|
||||||
let mut failures: BTreeMap<OwnedUserId, BTreeMap<String, Failure>> = BTreeMap::new();
|
|
||||||
let mut failure_reasons: BTreeMap<String, Failure> = BTreeMap::new();
|
|
||||||
let failure = Failure {
|
|
||||||
errcode: InvalidSignature,
|
|
||||||
error: String::new(),
|
|
||||||
};
|
|
||||||
|
|
||||||
for (user_id, keys) in &body.signed_keys {
|
for (user_id, keys) in &body.signed_keys {
|
||||||
for (key_id, key) in keys {
|
for (key_id, key) in keys {
|
||||||
let Ok(key) = serde_json::to_value(key)
|
let Ok(key) = serde_json::to_value(key)
|
||||||
.inspect_err(|e| debug_warn!(?key_id, "Invalid \"key\" JSON: {e}"))
|
.inspect_err(|e| debug_warn!(?key_id, "Invalid \"key\" JSON: {e}"))
|
||||||
else {
|
else {
|
||||||
let mut failure = failure.clone();
|
|
||||||
failure.error = String::from("Invalid \"key\" JSON");
|
|
||||||
failure_reasons.insert(key_id.to_owned(), failure);
|
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
|
||||||
let Some(signatures) = key.get("signatures") else {
|
let Some(signatures) = key.get("signatures") else {
|
||||||
let mut failure = failure.clone();
|
|
||||||
failure.error = String::from("Missing \"signatures\" field");
|
|
||||||
failure_reasons.insert(key_id.to_owned(), failure);
|
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
|
||||||
let Some(sender_user_val) = signatures.get(sender_user.to_string()) else {
|
let Some(sender_user_val) = signatures.get(sender_user.to_string()) else {
|
||||||
let mut failure = failure.clone();
|
|
||||||
failure.error = String::from("Invalid user in signatures field");
|
|
||||||
failure_reasons.insert(key_id.to_owned(), failure);
|
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
|
||||||
let Some(sender_user_object) = sender_user_val.as_object() else {
|
let Some(sender_user_object) = sender_user_val.as_object() else {
|
||||||
let mut failure = failure.clone();
|
|
||||||
failure.error = String::from("signatures field is not a JSON object");
|
|
||||||
failure_reasons.insert(key_id.to_owned(), failure);
|
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
|
||||||
for (signature, val) in sender_user_object.clone() {
|
for (signature, val) in sender_user_object.clone() {
|
||||||
let signature = (signature, val.to_string());
|
let Some(val) = val.as_str().map(ToOwned::to_owned) else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
let signature = (signature, val);
|
||||||
|
|
||||||
if let Err(e) = services
|
if let Err(_e) = services
|
||||||
.users
|
.users
|
||||||
.sign_key(user_id, key_id, signature, sender_user)
|
.sign_key(user_id, key_id, signature, sender_user)
|
||||||
.await
|
.await
|
||||||
.inspect_err(|e| debug_warn!("{e}"))
|
.inspect_err(|e| debug_warn!("{e}"))
|
||||||
{
|
{
|
||||||
let mut failure = failure.clone();
|
|
||||||
failure.error = format!("Error signing key: {e}");
|
|
||||||
failure_reasons.insert(key_id.to_owned(), failure);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !failure_reasons.is_empty() {
|
|
||||||
failures.insert(user_id.to_owned(), failure_reasons.clone());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(upload_signatures::v3::Response { failures })
|
Ok(upload_signatures::v3::Response { failures: BTreeMap::new() })
|
||||||
}
|
}
|
||||||
|
|
||||||
/// # `POST /_matrix/client/r0/keys/changes`
|
/// # `POST /_matrix/client/r0/keys/changes`
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue