LemmyNet / lemmy

🐀 A link aggregator and forum for the fediverse
https://join-lemmy.org
GNU Affero General Public License v3.0
13.13k stars 866 forks source link

[Bug]: Lemmy is asking for a application/ld+json webfinger where it should be jrd+json or xrd+xml #3222

Closed Cl0v1s closed 1 year ago

Cl0v1s commented 1 year ago

Requirements

Summary

When trying to follow a Lemmy instance from external softwares (such as Akkoma), Lemmy starts webfinger queries accepting only a application/ld+json MIME type where it should be jrd+json or xrd+xml https://datatracker.ietf.org/doc/html/rfc7033#page-11

This leads to fails on the foreign server.

Steps to Reproduce

  1. From a foreign instance follow a lemmy account or community
  2. Wait for the Lemmy server to ask for webfinger
  3. Foreign instance fails to answer because of the wrong MIME type

(With foreign instance being pleroma / akkoma)

Technical Details

Crash on Akkoma side, after the Lemmy request:

[error] Internal server error: %Phoenix.NotAcceptableError{message: "no supported media type in accept header.\n\nExpected one of [\"json\", \"jrd+json\", \"xml\", \"xrd+xml\"] but got the following formats:\n\n  * \" application/ld+json\" with extensions: [\"activity+json\", \"application/ld+json\"]\n  \"application/activity+json\" with extensions: [\"activity+json\", \"\"]\n\nTo accept custom formats, register them under the :mime library\nin your config/config.exs file:\n\n    config :mime, :types, %{\n      \"application/xml\" => [\"xml\"]\n    }\n\nAnd then run `mix deps.clean --build mim 
` to force it to be recompiled.\n", accepts: ["json", "jrd+json", "xml", "xrd+xml"], plug_status: 406}

Version

BE: 0.17.4

Lemmy Instance URL

lemmy.world

wakest commented 1 year ago

I posted about an issue about webfinger searching of lemmy posts in mastodon now not working here and someone mentioned I should mention it in this issue as well in case its related

pimeys commented 1 year ago

Haven't been able to follow almost any Lemmy groups from Akkoma due to this error, except one for some reason: !196@lemmy.blahaj.zone, which works just fine.

Maybe they answer differently to the webfinger request?

And maybe that community is all I need... rule

Houkime commented 1 year ago

The root of this issue is in activitypub_federation crate. Webfinger is resolved using generic object fetching here: https://github.com/LemmyNet/activitypub-federation-rust/blob/af92e0d53204a2ccd13bc0db3c58de24bff646bf/src/fetch/webfinger.rs#L39C26-L39C43

And the function for fetching, which due to it being generic has nothing to do with webfinger, accepts only one MIME type and it is activity+json https://github.com/LemmyNet/activitypub-federation-rust/blob/af92e0d53204a2ccd13bc0db3c58de24bff646bf/src/fetch/mod.rs#L54

lionirdeadman commented 1 year ago

Does this need work for the other way around? I notice we don't have handling of this mimetype in our default nginx config

Nutomic commented 1 year ago

We route all requests to .well-known path to backend:

https://github.com/LemmyNet/lemmy-ansible/blob/main/templates/nginx_internal.conf#L86

Cl0v1s commented 1 year ago

Thanks for your work !