return proper error if fail fetching and dont have profile

Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
strawberry 2024-03-04 20:12:45 -05:00 committed by June
parent 465533d32b
commit 9251727d57

View file

@ -116,7 +116,8 @@ pub async fn get_displayname_route(
body: Ruma<get_display_name::v3::Request>, body: Ruma<get_display_name::v3::Request>,
) -> Result<get_display_name::v3::Response> { ) -> Result<get_display_name::v3::Response> {
if body.user_id.server_name() != services().globals.server_name() { if body.user_id.server_name() != services().globals.server_name() {
let response = services() // Create and update our local copy of the user
if let Ok(response) = services()
.sending .sending
.send_federation_request( .send_federation_request(
body.user_id.server_name(), body.user_id.server_name(),
@ -125,29 +126,37 @@ pub async fn get_displayname_route(
field: None, // we want the full user's profile to update locally too field: None, // we want the full user's profile to update locally too
}, },
) )
.await?; .await
{
if !services().users.exists(&body.user_id)? {
services().users.create(&body.user_id, None)?;
}
// Create and update our local copy of the user for only the fields we request for services()
if !services().users.exists(&body.user_id)? { .users
services().users.create(&body.user_id, None)?; .set_displayname(&body.user_id, response.displayname.clone())
.await?;
services()
.users
.set_avatar_url(&body.user_id, response.avatar_url.clone())
.await?;
services()
.users
.set_blurhash(&body.user_id, response.blurhash.clone())
.await?;
return Ok(get_display_name::v3::Response {
displayname: response.displayname,
});
} }
}
services() if !services().users.exists(&body.user_id)? {
.users // Return 404 if this user doesn't exist and we couldn't fetch it over federation
.set_displayname(&body.user_id, response.displayname.clone()) return Err(Error::BadRequest(
.await?; ErrorKind::NotFound,
services() "Profile was not found.",
.users ));
.set_avatar_url(&body.user_id, response.avatar_url.clone())
.await?;
services()
.users
.set_blurhash(&body.user_id, response.blurhash.clone())
.await?;
return Ok(get_display_name::v3::Response {
displayname: response.displayname,
});
} }
Ok(get_display_name::v3::Response { Ok(get_display_name::v3::Response {
@ -259,7 +268,8 @@ pub async fn get_avatar_url_route(
body: Ruma<get_avatar_url::v3::Request>, body: Ruma<get_avatar_url::v3::Request>,
) -> Result<get_avatar_url::v3::Response> { ) -> Result<get_avatar_url::v3::Response> {
if body.user_id.server_name() != services().globals.server_name() { if body.user_id.server_name() != services().globals.server_name() {
let response = services() // Create and update our local copy of the user
if let Ok(response) = services()
.sending .sending
.send_federation_request( .send_federation_request(
body.user_id.server_name(), body.user_id.server_name(),
@ -268,30 +278,38 @@ pub async fn get_avatar_url_route(
field: None, // we want the full user's profile to update locally as well field: None, // we want the full user's profile to update locally as well
}, },
) )
.await?; .await
{
if !services().users.exists(&body.user_id)? {
services().users.create(&body.user_id, None)?;
}
// Create and update our local copy of the user services()
if !services().users.exists(&body.user_id)? { .users
services().users.create(&body.user_id, None)?; .set_displayname(&body.user_id, response.displayname.clone())
.await?;
services()
.users
.set_avatar_url(&body.user_id, response.avatar_url.clone())
.await?;
services()
.users
.set_blurhash(&body.user_id, response.blurhash.clone())
.await?;
return Ok(get_avatar_url::v3::Response {
avatar_url: response.avatar_url,
blurhash: response.blurhash,
});
} }
}
services() if !services().users.exists(&body.user_id)? {
.users // Return 404 if this user doesn't exist and we couldn't fetch it over federation
.set_displayname(&body.user_id, response.displayname.clone()) return Err(Error::BadRequest(
.await?; ErrorKind::NotFound,
services() "Profile was not found.",
.users ));
.set_avatar_url(&body.user_id, response.avatar_url.clone())
.await?;
services()
.users
.set_blurhash(&body.user_id, response.blurhash.clone())
.await?;
return Ok(get_avatar_url::v3::Response {
avatar_url: response.avatar_url,
blurhash: response.blurhash,
});
} }
Ok(get_avatar_url::v3::Response { Ok(get_avatar_url::v3::Response {
@ -310,7 +328,8 @@ pub async fn get_profile_route(
body: Ruma<get_profile::v3::Request>, body: Ruma<get_profile::v3::Request>,
) -> Result<get_profile::v3::Response> { ) -> Result<get_profile::v3::Response> {
if body.user_id.server_name() != services().globals.server_name() { if body.user_id.server_name() != services().globals.server_name() {
let response = services() // Create and update our local copy of the user
if let Ok(response) = services()
.sending .sending
.send_federation_request( .send_federation_request(
body.user_id.server_name(), body.user_id.server_name(),
@ -319,31 +338,31 @@ pub async fn get_profile_route(
field: None, field: None,
}, },
) )
.await?; .await
{
if !services().users.exists(&body.user_id)? {
services().users.create(&body.user_id, None)?;
}
// Create and update our local copy of the user services()
if !services().users.exists(&body.user_id)? { .users
services().users.create(&body.user_id, None)?; .set_displayname(&body.user_id, response.displayname.clone())
.await?;
services()
.users
.set_avatar_url(&body.user_id, response.avatar_url.clone())
.await?;
services()
.users
.set_blurhash(&body.user_id, response.blurhash.clone())
.await?;
return Ok(get_profile::v3::Response {
displayname: response.displayname,
avatar_url: response.avatar_url,
blurhash: response.blurhash,
});
} }
services()
.users
.set_displayname(&body.user_id, response.displayname.clone())
.await?;
services()
.users
.set_avatar_url(&body.user_id, response.avatar_url.clone())
.await?;
services()
.users
.set_blurhash(&body.user_id, response.blurhash.clone())
.await?;
return Ok(get_profile::v3::Response {
displayname: response.displayname,
avatar_url: response.avatar_url,
blurhash: response.blurhash,
});
} }
if !services().users.exists(&body.user_id)? { if !services().users.exists(&body.user_id)? {