mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2025-09-30 18:42:05 +00:00
fix: Nuke explicit references to the MSC4175 tz
profile field
This commit is contained in:
parent
6b7f35a8b8
commit
e6fd3c970b
8 changed files with 20 additions and 191 deletions
22
Cargo.lock
generated
22
Cargo.lock
generated
|
@ -4107,7 +4107,7 @@ checksum = "88f8660c1ff60292143c98d08fc6e2f654d722db50410e3f3797d40baaf9d8f3"
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma"
|
name = "ruma"
|
||||||
version = "0.10.1"
|
version = "0.10.1"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"assign",
|
"assign",
|
||||||
"js_int",
|
"js_int",
|
||||||
|
@ -4127,7 +4127,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-appservice-api"
|
name = "ruma-appservice-api"
|
||||||
version = "0.10.0"
|
version = "0.10.0"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"js_int",
|
"js_int",
|
||||||
"ruma-common",
|
"ruma-common",
|
||||||
|
@ -4139,7 +4139,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-client-api"
|
name = "ruma-client-api"
|
||||||
version = "0.18.0"
|
version = "0.18.0"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"as_variant",
|
"as_variant",
|
||||||
"assign",
|
"assign",
|
||||||
|
@ -4162,7 +4162,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-common"
|
name = "ruma-common"
|
||||||
version = "0.13.0"
|
version = "0.13.0"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"as_variant",
|
"as_variant",
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
|
@ -4194,7 +4194,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-events"
|
name = "ruma-events"
|
||||||
version = "0.28.1"
|
version = "0.28.1"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"as_variant",
|
"as_variant",
|
||||||
"indexmap 2.11.1",
|
"indexmap 2.11.1",
|
||||||
|
@ -4219,7 +4219,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-federation-api"
|
name = "ruma-federation-api"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"headers",
|
"headers",
|
||||||
|
@ -4241,7 +4241,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-identifiers-validation"
|
name = "ruma-identifiers-validation"
|
||||||
version = "0.9.5"
|
version = "0.9.5"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"js_int",
|
"js_int",
|
||||||
"thiserror 2.0.16",
|
"thiserror 2.0.16",
|
||||||
|
@ -4250,7 +4250,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-identity-service-api"
|
name = "ruma-identity-service-api"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"js_int",
|
"js_int",
|
||||||
"ruma-common",
|
"ruma-common",
|
||||||
|
@ -4260,7 +4260,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-macros"
|
name = "ruma-macros"
|
||||||
version = "0.13.0"
|
version = "0.13.0"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"proc-macro-crate",
|
"proc-macro-crate",
|
||||||
|
@ -4275,7 +4275,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-push-gateway-api"
|
name = "ruma-push-gateway-api"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"js_int",
|
"js_int",
|
||||||
"ruma-common",
|
"ruma-common",
|
||||||
|
@ -4287,7 +4287,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruma-signatures"
|
name = "ruma-signatures"
|
||||||
version = "0.15.0"
|
version = "0.15.0"
|
||||||
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980"
|
source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
"ed25519-dalek",
|
"ed25519-dalek",
|
||||||
|
|
|
@ -352,7 +352,7 @@ version = "0.1.2"
|
||||||
[workspace.dependencies.ruma]
|
[workspace.dependencies.ruma]
|
||||||
git = "https://forgejo.ellis.link/continuwuation/ruwuma"
|
git = "https://forgejo.ellis.link/continuwuation/ruwuma"
|
||||||
#branch = "conduwuit-changes"
|
#branch = "conduwuit-changes"
|
||||||
rev = "196574e4102b3c93427909aa229be0ceacaa8980"
|
rev = "78135227dceb9ce5eb9515b4ae85d452cdcabac8"
|
||||||
features = [
|
features = [
|
||||||
"compat",
|
"compat",
|
||||||
"rand",
|
"rand",
|
||||||
|
|
|
@ -10,7 +10,7 @@ use conduwuit::{
|
||||||
use conduwuit_service::Services;
|
use conduwuit_service::Services;
|
||||||
use futures::{
|
use futures::{
|
||||||
StreamExt, TryStreamExt,
|
StreamExt, TryStreamExt,
|
||||||
future::{join, join3, join4},
|
future::{join, join3},
|
||||||
};
|
};
|
||||||
use ruma::{
|
use ruma::{
|
||||||
OwnedMxcUri, OwnedRoomId, UserId,
|
OwnedMxcUri, OwnedRoomId, UserId,
|
||||||
|
@ -226,7 +226,8 @@ pub(crate) async fn get_avatar_url_route(
|
||||||
|
|
||||||
/// # `GET /_matrix/client/v3/profile/{userId}`
|
/// # `GET /_matrix/client/v3/profile/{userId}`
|
||||||
///
|
///
|
||||||
/// Returns the displayname, avatar_url, blurhash, and tz of the user.
|
/// Returns the displayname, avatar_url, blurhash, and custom profile fields of
|
||||||
|
/// the user.
|
||||||
///
|
///
|
||||||
/// - If user is on another server and we do not have a local copy already,
|
/// - If user is on another server and we do not have a local copy already,
|
||||||
/// fetch profile over federation.
|
/// fetch profile over federation.
|
||||||
|
@ -260,9 +261,6 @@ pub(crate) async fn get_profile_route(
|
||||||
services
|
services
|
||||||
.users
|
.users
|
||||||
.set_blurhash(&body.user_id, response.blurhash.clone());
|
.set_blurhash(&body.user_id, response.blurhash.clone());
|
||||||
services
|
|
||||||
.users
|
|
||||||
.set_timezone(&body.user_id, response.tz.clone());
|
|
||||||
|
|
||||||
for (profile_key, profile_key_value) in &response.custom_profile_fields {
|
for (profile_key, profile_key_value) in &response.custom_profile_fields {
|
||||||
services.users.set_profile_key(
|
services.users.set_profile_key(
|
||||||
|
@ -276,7 +274,6 @@ pub(crate) async fn get_profile_route(
|
||||||
displayname: response.displayname,
|
displayname: response.displayname,
|
||||||
avatar_url: response.avatar_url,
|
avatar_url: response.avatar_url,
|
||||||
blurhash: response.blurhash,
|
blurhash: response.blurhash,
|
||||||
tz: response.tz,
|
|
||||||
custom_profile_fields: response.custom_profile_fields,
|
custom_profile_fields: response.custom_profile_fields,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -294,15 +291,10 @@ pub(crate) async fn get_profile_route(
|
||||||
.collect()
|
.collect()
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
// services.users.timezone will collect the MSC4175 timezone key if it exists
|
let (avatar_url, blurhash, displayname) = join3(
|
||||||
custom_profile_fields.remove("us.cloke.msc4175.tz");
|
|
||||||
custom_profile_fields.remove("m.tz");
|
|
||||||
|
|
||||||
let (avatar_url, blurhash, displayname, tz) = join4(
|
|
||||||
services.users.avatar_url(&body.user_id).ok(),
|
services.users.avatar_url(&body.user_id).ok(),
|
||||||
services.users.blurhash(&body.user_id).ok(),
|
services.users.blurhash(&body.user_id).ok(),
|
||||||
services.users.displayname(&body.user_id).ok(),
|
services.users.displayname(&body.user_id).ok(),
|
||||||
services.users.timezone(&body.user_id).ok(),
|
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
|
@ -310,7 +302,6 @@ pub(crate) async fn get_profile_route(
|
||||||
avatar_url,
|
avatar_url,
|
||||||
blurhash,
|
blurhash,
|
||||||
displayname,
|
displayname,
|
||||||
tz,
|
|
||||||
custom_profile_fields,
|
custom_profile_fields,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,7 @@ use ruma::{
|
||||||
client::{
|
client::{
|
||||||
error::ErrorKind,
|
error::ErrorKind,
|
||||||
membership::mutual_rooms,
|
membership::mutual_rooms,
|
||||||
profile::{
|
profile::{delete_profile_key, get_profile_key, set_profile_key},
|
||||||
delete_profile_key, delete_timezone_key, get_profile_key, get_timezone_key,
|
|
||||||
set_profile_key, set_timezone_key,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
federation,
|
federation,
|
||||||
},
|
},
|
||||||
|
@ -60,62 +57,6 @@ pub(crate) async fn get_mutual_rooms_route(
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/// # `DELETE /_matrix/client/unstable/uk.tcpip.msc4133/profile/:user_id/us.cloke.msc4175.tz`
|
|
||||||
///
|
|
||||||
/// Deletes the `tz` (timezone) of a user, as per MSC4133 and MSC4175.
|
|
||||||
///
|
|
||||||
/// - Also makes sure other users receive the update using presence EDUs
|
|
||||||
pub(crate) async fn delete_timezone_key_route(
|
|
||||||
State(services): State<crate::State>,
|
|
||||||
body: Ruma<delete_timezone_key::unstable::Request>,
|
|
||||||
) -> Result<delete_timezone_key::unstable::Response> {
|
|
||||||
let sender_user = body.sender_user();
|
|
||||||
|
|
||||||
if *sender_user != body.user_id && body.appservice_info.is_none() {
|
|
||||||
return Err!(Request(Forbidden("You cannot update the profile of another user")));
|
|
||||||
}
|
|
||||||
|
|
||||||
services.users.set_timezone(&body.user_id, None);
|
|
||||||
|
|
||||||
if services.config.allow_local_presence {
|
|
||||||
// Presence update
|
|
||||||
services
|
|
||||||
.presence
|
|
||||||
.ping_presence(&body.user_id, &PresenceState::Online)
|
|
||||||
.await?;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(delete_timezone_key::unstable::Response {})
|
|
||||||
}
|
|
||||||
|
|
||||||
/// # `PUT /_matrix/client/unstable/uk.tcpip.msc4133/profile/:user_id/us.cloke.msc4175.tz`
|
|
||||||
///
|
|
||||||
/// Updates the `tz` (timezone) of a user, as per MSC4133 and MSC4175.
|
|
||||||
///
|
|
||||||
/// - Also makes sure other users receive the update using presence EDUs
|
|
||||||
pub(crate) async fn set_timezone_key_route(
|
|
||||||
State(services): State<crate::State>,
|
|
||||||
body: Ruma<set_timezone_key::unstable::Request>,
|
|
||||||
) -> Result<set_timezone_key::unstable::Response> {
|
|
||||||
let sender_user = body.sender_user();
|
|
||||||
|
|
||||||
if *sender_user != body.user_id && body.appservice_info.is_none() {
|
|
||||||
return Err!(Request(Forbidden("You cannot update the profile of another user")));
|
|
||||||
}
|
|
||||||
|
|
||||||
services.users.set_timezone(&body.user_id, body.tz.clone());
|
|
||||||
|
|
||||||
if services.config.allow_local_presence {
|
|
||||||
// Presence update
|
|
||||||
services
|
|
||||||
.presence
|
|
||||||
.ping_presence(&body.user_id, &PresenceState::Online)
|
|
||||||
.await?;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(set_timezone_key::unstable::Response {})
|
|
||||||
}
|
|
||||||
|
|
||||||
/// # `PUT /_matrix/client/unstable/uk.tcpip.msc4133/profile/{user_id}/{field}`
|
/// # `PUT /_matrix/client/unstable/uk.tcpip.msc4133/profile/{user_id}/{field}`
|
||||||
///
|
///
|
||||||
/// Updates the profile key-value field of a user, as per MSC4133.
|
/// Updates the profile key-value field of a user, as per MSC4133.
|
||||||
|
@ -274,70 +215,12 @@ pub(crate) async fn delete_profile_key_route(
|
||||||
Ok(delete_profile_key::unstable::Response {})
|
Ok(delete_profile_key::unstable::Response {})
|
||||||
}
|
}
|
||||||
|
|
||||||
/// # `GET /_matrix/client/unstable/uk.tcpip.msc4133/profile/:user_id/us.cloke.msc4175.tz`
|
|
||||||
///
|
|
||||||
/// Returns the `timezone` of the user as per MSC4133 and MSC4175.
|
|
||||||
///
|
|
||||||
/// - If user is on another server and we do not have a local copy already fetch
|
|
||||||
/// `timezone` over federation
|
|
||||||
pub(crate) async fn get_timezone_key_route(
|
|
||||||
State(services): State<crate::State>,
|
|
||||||
body: Ruma<get_timezone_key::unstable::Request>,
|
|
||||||
) -> Result<get_timezone_key::unstable::Response> {
|
|
||||||
if !services.globals.user_is_local(&body.user_id) {
|
|
||||||
// Create and update our local copy of the user
|
|
||||||
if let Ok(response) = services
|
|
||||||
.sending
|
|
||||||
.send_federation_request(
|
|
||||||
body.user_id.server_name(),
|
|
||||||
federation::query::get_profile_information::v1::Request {
|
|
||||||
user_id: body.user_id.clone(),
|
|
||||||
field: None, // we want the full user's profile to update locally as well
|
|
||||||
},
|
|
||||||
)
|
|
||||||
.await
|
|
||||||
{
|
|
||||||
if !services.users.exists(&body.user_id).await {
|
|
||||||
services.users.create(&body.user_id, None, None).await?;
|
|
||||||
}
|
|
||||||
|
|
||||||
services
|
|
||||||
.users
|
|
||||||
.set_displayname(&body.user_id, response.displayname.clone());
|
|
||||||
|
|
||||||
services
|
|
||||||
.users
|
|
||||||
.set_avatar_url(&body.user_id, response.avatar_url.clone());
|
|
||||||
|
|
||||||
services
|
|
||||||
.users
|
|
||||||
.set_blurhash(&body.user_id, response.blurhash.clone());
|
|
||||||
|
|
||||||
services
|
|
||||||
.users
|
|
||||||
.set_timezone(&body.user_id, response.tz.clone());
|
|
||||||
|
|
||||||
return Ok(get_timezone_key::unstable::Response { tz: response.tz });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if !services.users.exists(&body.user_id).await {
|
|
||||||
// Return 404 if this user doesn't exist and we couldn't fetch it over
|
|
||||||
// federation
|
|
||||||
return Err(Error::BadRequest(ErrorKind::NotFound, "Profile was not found."));
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(get_timezone_key::unstable::Response {
|
|
||||||
tz: services.users.timezone(&body.user_id).await.ok(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/// # `GET /_matrix/client/unstable/uk.tcpip.msc4133/profile/{userId}/{field}}`
|
/// # `GET /_matrix/client/unstable/uk.tcpip.msc4133/profile/{userId}/{field}}`
|
||||||
///
|
///
|
||||||
/// Gets the profile key-value field of a user, as per MSC4133.
|
/// Gets the profile key-value field of a user, as per MSC4133.
|
||||||
///
|
///
|
||||||
/// - If user is on another server and we do not have a local copy already fetch
|
/// - If user is on another server and we do not have a local copy already fetch
|
||||||
/// `timezone` over federation
|
/// the value over federation
|
||||||
pub(crate) async fn get_profile_key_route(
|
pub(crate) async fn get_profile_key_route(
|
||||||
State(services): State<crate::State>,
|
State(services): State<crate::State>,
|
||||||
body: Ruma<get_profile_key::unstable::Request>,
|
body: Ruma<get_profile_key::unstable::Request>,
|
||||||
|
@ -373,10 +256,6 @@ pub(crate) async fn get_profile_key_route(
|
||||||
.users
|
.users
|
||||||
.set_blurhash(&body.user_id, response.blurhash.clone());
|
.set_blurhash(&body.user_id, response.blurhash.clone());
|
||||||
|
|
||||||
services
|
|
||||||
.users
|
|
||||||
.set_timezone(&body.user_id, response.tz.clone());
|
|
||||||
|
|
||||||
match response.custom_profile_fields.get(&body.key_name) {
|
match response.custom_profile_fields.get(&body.key_name) {
|
||||||
| Some(value) => {
|
| Some(value) => {
|
||||||
profile_key_value.insert(body.key_name.clone(), value.clone());
|
profile_key_value.insert(body.key_name.clone(), value.clone());
|
||||||
|
|
|
@ -22,12 +22,9 @@ use crate::{client, server};
|
||||||
pub fn build(router: Router<State>, server: &Server) -> Router<State> {
|
pub fn build(router: Router<State>, server: &Server) -> Router<State> {
|
||||||
let config = &server.config;
|
let config = &server.config;
|
||||||
let mut router = router
|
let mut router = router
|
||||||
.ruma_route(&client::get_timezone_key_route)
|
|
||||||
.ruma_route(&client::get_profile_key_route)
|
.ruma_route(&client::get_profile_key_route)
|
||||||
.ruma_route(&client::set_profile_key_route)
|
.ruma_route(&client::set_profile_key_route)
|
||||||
.ruma_route(&client::delete_profile_key_route)
|
.ruma_route(&client::delete_profile_key_route)
|
||||||
.ruma_route(&client::set_timezone_key_route)
|
|
||||||
.ruma_route(&client::delete_timezone_key_route)
|
|
||||||
.ruma_route(&client::appservice_ping)
|
.ruma_route(&client::appservice_ping)
|
||||||
.ruma_route(&client::get_supported_versions_route)
|
.ruma_route(&client::get_supported_versions_route)
|
||||||
.ruma_route(&client::get_register_available_route)
|
.ruma_route(&client::get_register_available_route)
|
||||||
|
|
|
@ -20,9 +20,7 @@ use ruma::{
|
||||||
client::{
|
client::{
|
||||||
directory::get_public_rooms,
|
directory::get_public_rooms,
|
||||||
error::ErrorKind,
|
error::ErrorKind,
|
||||||
profile::{
|
profile::{get_avatar_url, get_display_name, get_profile, get_profile_key},
|
||||||
get_avatar_url, get_display_name, get_profile, get_profile_key, get_timezone_key,
|
|
||||||
},
|
|
||||||
voip::get_turn_server_info,
|
voip::get_turn_server_info,
|
||||||
},
|
},
|
||||||
federation::{authentication::XMatrix, openid::get_openid_userinfo},
|
federation::{authentication::XMatrix, openid::get_openid_userinfo},
|
||||||
|
@ -89,8 +87,7 @@ pub(super) async fn auth(
|
||||||
| &get_profile::v3::Request::METADATA
|
| &get_profile::v3::Request::METADATA
|
||||||
| &get_profile_key::unstable::Request::METADATA
|
| &get_profile_key::unstable::Request::METADATA
|
||||||
| &get_display_name::v3::Request::METADATA
|
| &get_display_name::v3::Request::METADATA
|
||||||
| &get_avatar_url::v3::Request::METADATA
|
| &get_avatar_url::v3::Request::METADATA => {
|
||||||
| &get_timezone_key::unstable::Request::METADATA => {
|
|
||||||
if services.server.config.require_auth_for_profile_requests {
|
if services.server.config.require_auth_for_profile_requests {
|
||||||
match token {
|
match token {
|
||||||
| Token::Appservice(_) | Token::User(_) => {
|
| Token::Appservice(_) | Token::User(_) => {
|
||||||
|
|
|
@ -83,7 +83,6 @@ pub(crate) async fn get_profile_information_route(
|
||||||
let mut displayname = None;
|
let mut displayname = None;
|
||||||
let mut avatar_url = None;
|
let mut avatar_url = None;
|
||||||
let mut blurhash = None;
|
let mut blurhash = None;
|
||||||
let mut tz = None;
|
|
||||||
let mut custom_profile_fields = BTreeMap::new();
|
let mut custom_profile_fields = BTreeMap::new();
|
||||||
|
|
||||||
match &body.field {
|
match &body.field {
|
||||||
|
@ -107,7 +106,6 @@ pub(crate) async fn get_profile_information_route(
|
||||||
displayname = services.users.displayname(&body.user_id).await.ok();
|
displayname = services.users.displayname(&body.user_id).await.ok();
|
||||||
avatar_url = services.users.avatar_url(&body.user_id).await.ok();
|
avatar_url = services.users.avatar_url(&body.user_id).await.ok();
|
||||||
blurhash = services.users.blurhash(&body.user_id).await.ok();
|
blurhash = services.users.blurhash(&body.user_id).await.ok();
|
||||||
tz = services.users.timezone(&body.user_id).await.ok();
|
|
||||||
custom_profile_fields = services
|
custom_profile_fields = services
|
||||||
.users
|
.users
|
||||||
.all_profile_keys(&body.user_id)
|
.all_profile_keys(&body.user_id)
|
||||||
|
@ -116,15 +114,10 @@ pub(crate) async fn get_profile_information_route(
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// services.users.timezone will collect the MSC4175 timezone key if it exists
|
|
||||||
custom_profile_fields.remove("us.cloke.msc4175.tz");
|
|
||||||
custom_profile_fields.remove("m.tz");
|
|
||||||
|
|
||||||
Ok(get_profile_information::v1::Response {
|
Ok(get_profile_information::v1::Response {
|
||||||
displayname,
|
displayname,
|
||||||
avatar_url,
|
avatar_url,
|
||||||
blurhash,
|
blurhash,
|
||||||
tz,
|
|
||||||
custom_profile_fields,
|
custom_profile_fields,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -1148,34 +1148,6 @@ impl Service {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the timezone of a user.
|
|
||||||
pub async fn timezone(&self, user_id: &UserId) -> Result<String> {
|
|
||||||
// TODO: transparently migrate unstable key usage to the stable key once MSC4133
|
|
||||||
// and MSC4175 are stable, likely a remove/insert in this block.
|
|
||||||
|
|
||||||
// first check the unstable prefix then check the stable prefix
|
|
||||||
let unstable_key = (user_id, "us.cloke.msc4175.tz");
|
|
||||||
let stable_key = (user_id, "m.tz");
|
|
||||||
self.db
|
|
||||||
.useridprofilekey_value
|
|
||||||
.qry(&unstable_key)
|
|
||||||
.or_else(|_| self.db.useridprofilekey_value.qry(&stable_key))
|
|
||||||
.await
|
|
||||||
.deserialized()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Sets a new timezone or removes it if timezone is None.
|
|
||||||
pub fn set_timezone(&self, user_id: &UserId, timezone: Option<String>) {
|
|
||||||
// TODO: insert to the stable MSC4175 key when it's stable
|
|
||||||
let key = (user_id, "us.cloke.msc4175.tz");
|
|
||||||
|
|
||||||
if let Some(timezone) = timezone {
|
|
||||||
self.db.useridprofilekey_value.put_raw(key, &timezone);
|
|
||||||
} else {
|
|
||||||
self.db.useridprofilekey_value.del(key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(not(feature = "ldap"))]
|
#[cfg(not(feature = "ldap"))]
|
||||||
pub async fn search_ldap(&self, _user_id: &UserId) -> Result<Vec<(String, bool)>> {
|
pub async fn search_ldap(&self, _user_id: &UserId) -> Result<Vec<(String, bool)>> {
|
||||||
Err!(FeatureDisabled("ldap"))
|
Err!(FeatureDisabled("ldap"))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue