[Bug]: Lemmy is asking for a application/ld+json webfinger where it should be jrd+json or xrd+xml
Requirements
- [X] Is this a bug report? For questions or discussions use https://lemmy.ml/c/lemmy_support
- [X] Did you check to see if this issue already exists?
- [X] Is this only a single bug? Do not put multiple bugs in one issue.
- [ ] Is this a UI / front end issue? Use the lemmy-ui repo.
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
- From a foreign instance follow a lemmy account or community
- Wait for the Lemmy server to ask for webfinger
- 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
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
Haven't been able to follow almost any Lemmy groups from Akkoma due to this error, except one for some reason: [email protected], which works just fine.
Maybe they answer differently to the webfinger request?
And maybe that community is all I need... rule
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
Does this need work for the other way around? I notice we don't have handling of this mimetype in our default nginx config
We route all requests to .well-known path to backend:
https://github.com/LemmyNet/lemmy-ansible/blob/main/templates/nginx_internal.conf#L86
Thanks for your work !