diff --git a/src/api/client/keys.rs b/src/api/client/keys.rs index d0469ab8..15037201 100644 --- a/src/api/client/keys.rs +++ b/src/api/client/keys.rs @@ -6,13 +6,10 @@ use ruma::{ CanonicalJsonObject, CanonicalJsonValue, OneTimeKeyAlgorithm, OwnedDeviceId, OwnedUserId, UserId, api::{ - client::{ - error::ErrorKind, - keys::{ - claim_keys, get_key_changes, get_keys, upload_keys, - upload_signatures::{self}, - upload_signing_keys, - }, + client::keys::{ + claim_keys, get_key_changes, get_keys, upload_keys, + upload_signatures::{self}, + upload_signing_keys, }, federation, }, @@ -20,7 +17,7 @@ use ruma::{ serde::Raw, }; use serde_json::json; -use tuwunel_core::{Err, Error, Result, debug, debug_error, debug_warn, err, result::NotFound}; +use tuwunel_core::{Err, Result, debug, debug_error, debug_warn, err, result::NotFound}; use tuwunel_service::{Services, users::parse_master_key}; use crate::{Ruma, router::auth_uiaa}; @@ -360,12 +357,12 @@ pub(crate) async fn get_key_changes_route( let from = body .from .parse() - .map_err(|_| Error::BadRequest(ErrorKind::InvalidParam, "Invalid `from`."))?; + .map_err(|_| err!(Request(InvalidParam("Invalid `from`."))))?; let to = body .to .parse() - .map_err(|_| Error::BadRequest(ErrorKind::InvalidParam, "Invalid `to`."))?; + .map_err(|_| err!(Request(InvalidParam("Invalid `to`."))))?; device_list_updates.extend( services diff --git a/src/service/users/keys.rs b/src/service/users/keys.rs index 6c2fce88..ed358a57 100644 --- a/src/service/users/keys.rs +++ b/src/service/users/keys.rs @@ -476,19 +476,20 @@ pub fn parse_master_key( let master_key = master_key .deserialize() - .map_err(|_| Error::BadRequest(ErrorKind::InvalidParam, "Invalid master key"))?; + .map_err(|_| err!(Request(InvalidParam("Invalid master key"))))?; + let mut master_key_ids = master_key.keys.values(); let master_key_id = master_key_ids .next() - .ok_or(Error::BadRequest(ErrorKind::InvalidParam, "Master key contained no key."))?; + .ok_or(err!(Request(InvalidParam("Master key contained no key."))))?; + if master_key_ids.next().is_some() { - return Err(Error::BadRequest( - ErrorKind::InvalidParam, - "Master key contained more than one key.", - )); + return Err!(Request(InvalidParam("Master key contained more than one key."))); } + let mut master_key_key = prefix.clone(); master_key_key.extend_from_slice(master_key_id.as_bytes()); + Ok((master_key_key, master_key)) } @@ -532,6 +533,7 @@ where { let sid = <&UserId>::try_from(user.as_str()) .map_err(|_| Error::bad_database("Invalid user ID in database."))?; + if sender_user == Some(user_id) || sid == user_id || allowed_signatures(sid) { signatures.insert(user, signature); }