mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2026-05-26 20:49:55 +00:00
refactor: Fix errors in api/server/user.rs
This commit is contained in:
+31
-37
@@ -1,14 +1,14 @@
|
|||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
use axum::extract::State;
|
use axum::extract::State;
|
||||||
use conduwuit::{Error, Result};
|
use conduwuit::{Err, Result};
|
||||||
use futures::{FutureExt, StreamExt, TryFutureExt};
|
use futures::{FutureExt, StreamExt, TryFutureExt};
|
||||||
use ruma::api::{
|
use ruma::{
|
||||||
client::error::ErrorKind,
|
api::federation::{
|
||||||
federation::{
|
|
||||||
device::get_devices::{self, v1::UserDevice},
|
device::get_devices::{self, v1::UserDevice},
|
||||||
keys::{claim_keys, get_keys},
|
keys::{claim_keys, get_keys},
|
||||||
},
|
},
|
||||||
|
assign,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
@@ -24,25 +24,21 @@ pub(crate) async fn get_devices_route(
|
|||||||
body: Ruma<get_devices::v1::Request>,
|
body: Ruma<get_devices::v1::Request>,
|
||||||
) -> Result<get_devices::v1::Response> {
|
) -> Result<get_devices::v1::Response> {
|
||||||
if !services.globals.user_is_local(&body.user_id) {
|
if !services.globals.user_is_local(&body.user_id) {
|
||||||
return Err(Error::BadRequest(
|
return Err!(Request(InvalidParam("Tried to access user from other server.")));
|
||||||
ErrorKind::InvalidParam,
|
|
||||||
"Tried to access user from other server.",
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let user_id = &body.user_id;
|
let stream_id = services
|
||||||
Ok(get_devices::v1::Response {
|
|
||||||
user_id: user_id.clone(),
|
|
||||||
stream_id: services
|
|
||||||
.users
|
.users
|
||||||
.get_devicelist_version(user_id)
|
.get_devicelist_version(&body.user_id)
|
||||||
.await
|
.await
|
||||||
.unwrap_or(0)
|
.unwrap_or(0)
|
||||||
.try_into()?,
|
.try_into()
|
||||||
devices: services
|
.expect("device list version should fit into a UInt");
|
||||||
|
|
||||||
|
let devices = services
|
||||||
.users
|
.users
|
||||||
.all_devices_metadata(user_id)
|
.all_devices_metadata(&body.user_id)
|
||||||
.filter_map(|metadata| async move {
|
.filter_map(async |metadata| {
|
||||||
let device_id = metadata.device_id.clone();
|
let device_id = metadata.device_id.clone();
|
||||||
let device_id_clone = device_id.clone();
|
let device_id_clone = device_id.clone();
|
||||||
let device_id_string = device_id.as_str().to_owned();
|
let device_id_string = device_id.as_str().to_owned();
|
||||||
@@ -54,24 +50,29 @@ pub(crate) async fn get_devices_route(
|
|||||||
|
|
||||||
services
|
services
|
||||||
.users
|
.users
|
||||||
.get_device_keys(user_id, &device_id_clone)
|
.get_device_keys(&body.user_id, &device_id_clone)
|
||||||
.map_ok(|keys| UserDevice { device_id, keys, device_display_name })
|
.map_ok(|keys| assign!(UserDevice::new(device_id, keys), { device_display_name }))
|
||||||
.map(Result::ok)
|
.map(Result::ok)
|
||||||
.await
|
.await
|
||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
.await,
|
.await;
|
||||||
master_key: services
|
|
||||||
|
let master_key = services
|
||||||
.users
|
.users
|
||||||
.get_master_key(None, &body.user_id, &|u| u.server_name() == body.origin())
|
.get_master_key(None, &body.user_id, &|u| u.server_name() == body.origin())
|
||||||
.await
|
.await
|
||||||
.ok(),
|
.ok();
|
||||||
self_signing_key: services
|
|
||||||
|
let self_signing_key = services
|
||||||
.users
|
.users
|
||||||
.get_self_signing_key(None, &body.user_id, &|u| u.server_name() == body.origin())
|
.get_self_signing_key(None, &body.user_id, &|u| u.server_name() == body.origin())
|
||||||
.await
|
.await
|
||||||
.ok(),
|
.ok();
|
||||||
})
|
|
||||||
|
Ok(assign!(get_devices::v1::Response::new(body.user_id.clone(), stream_id), {
|
||||||
|
devices, master_key, self_signing_key
|
||||||
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// # `POST /_matrix/federation/v1/user/keys/query`
|
/// # `POST /_matrix/federation/v1/user/keys/query`
|
||||||
@@ -86,10 +87,7 @@ pub(crate) async fn get_keys_route(
|
|||||||
.iter()
|
.iter()
|
||||||
.any(|(u, _)| !services.globals.user_is_local(u))
|
.any(|(u, _)| !services.globals.user_is_local(u))
|
||||||
{
|
{
|
||||||
return Err(Error::BadRequest(
|
return Err!(Request(InvalidParam("User does not belong to this server.")));
|
||||||
ErrorKind::InvalidParam,
|
|
||||||
"User does not belong to this server.",
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let result = get_keys_helper(
|
let result = get_keys_helper(
|
||||||
@@ -102,11 +100,10 @@ pub(crate) async fn get_keys_route(
|
|||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
Ok(get_keys::v1::Response {
|
Ok(assign!(get_keys::v1::Response::new(result.device_keys), {
|
||||||
device_keys: result.device_keys,
|
|
||||||
master_keys: result.master_keys,
|
master_keys: result.master_keys,
|
||||||
self_signing_keys: result.self_signing_keys,
|
self_signing_keys: result.self_signing_keys,
|
||||||
})
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// # `POST /_matrix/federation/v1/user/keys/claim`
|
/// # `POST /_matrix/federation/v1/user/keys/claim`
|
||||||
@@ -121,14 +118,11 @@ pub(crate) async fn claim_keys_route(
|
|||||||
.iter()
|
.iter()
|
||||||
.any(|(u, _)| !services.globals.user_is_local(u))
|
.any(|(u, _)| !services.globals.user_is_local(u))
|
||||||
{
|
{
|
||||||
return Err(Error::BadRequest(
|
return Err!(Request(InvalidParam("Tried to access user from other server.")));
|
||||||
ErrorKind::InvalidParam,
|
|
||||||
"Tried to access user from other server.",
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let result =
|
let result =
|
||||||
claim_keys_helper(&services, &body.one_time_keys, Duration::from_secs(0)).await?;
|
claim_keys_helper(&services, &body.one_time_keys, Duration::from_secs(0)).await?;
|
||||||
|
|
||||||
Ok(claim_keys::v1::Response { one_time_keys: result.one_time_keys })
|
Ok(claim_keys::v1::Response::new(result.one_time_keys))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user