@ -38,6 +38,12 @@ async fn get_webfinger_response(
) -> Result < HttpResponse , LemmyError > {
let name = extract_webfinger_name ( & info . resource , & context ) ? ;
let links = if name = = context . settings ( ) . hostname {
// webfinger response for instance actor (required for mastodon authorized fetch)
let url = Url ::parse ( & context . settings ( ) . get_protocol_and_hostname ( ) ) ? ;
vec! [ webfinger_link_for_actor ( Some ( url ) , "none" , & context ) ]
} else {
// webfinger response for user/community
let user_id : Option < Url > = Person ::read_from_name ( & mut context . pool ( ) , name , false )
. await
. ok ( )
@ -56,14 +62,18 @@ async fn get_webfinger_response(
// Mastodon seems to prioritize the last webfinger item in case of duplicates. Put
// community last so that it gets prioritized. For Lemmy the order doesnt matter.
let links = vec! [
vec! [
webfinger_link_for_actor ( user_id , "Person" , & context ) ,
webfinger_link_for_actor ( community_id , "Group" , & context ) ,
]
}
. into_iter ( )
. flatten ( )
. collect ( ) ;
. collect ::< Vec < _ > > ( ) ;
if links . is_empty ( ) {
Ok ( HttpResponse ::NotFound ( ) . finish ( ) )
} else {
let json = Webfinger {
subject : info . resource . clone ( ) ,
links ,
@ -76,6 +86,7 @@ async fn get_webfinger_response(
. json ( json ) ,
)
}
}
fn webfinger_link_for_actor (
url : Option < Url > ,