bridgy-fed icon indicating copy to clipboard operation
bridgy-fed copied to clipboard

support Pleroma

Open snarfed opened this issue 7 years ago • 66 comments

https://gitgud.io/lambadalambda/pleroma . haven't found a website apart from that. doesn't seem to be used very widely. claims to be OStatus compatible.

Known interop problems so far:

TODO: file issues on https://git.pleroma.social/pleroma/pleroma/-/issues for these ^

snarfed avatar Oct 16 '17 21:10 snarfed

The project meanwhile seems to have matured to its own domain and git repo:

https://git.pleroma.social/pleroma/pleroma

leenaars avatar Jan 01 '18 16:01 leenaars

Should note that it's also ActivityPub-compatible as well now.

normikoto avatar Mar 21 '18 04:03 normikoto

Pleroma seems to gain popularity. It even caused some drama on the fediverse, causing in defederation with several mastodon instances. It is said to be light on resources and I'm moving to it (if you need some assistance with testing, I'd be happy to help!)

vikanezrimaya avatar Dec 20 '18 17:12 vikanezrimaya

Pleroma is compatible with Mastodon clients, so if Mastodon is working, Pleroma should (at least theoretically) work too.

aqeeliz avatar Apr 01 '19 07:04 aqeeliz

While working on the Drupal plugin, I finally got successful requests with Pleroma. You can see a notice at https://kiwifarms.cc/notice/9zpG1WBnWG67cro7bk

@snarfed thinks to look out for:

  • Accept request: you need to pass on the 'id' from the received Follow object into the 'object'. Otherwise it won't work
  • Posting notes/reply: the id of the activity and object must be different. The object also needs the attributedTo property.

That should do it.

swentel avatar Oct 06 '20 08:10 swentel

thank you @swentel! great sleuthing, really useful info.

and funny coincidence, i've been troubleshooting Pleroma compatibility in Bridgy itself recently too, eg https://github.com/snarfed/bridgy/issues/977 .

snarfed avatar Oct 06 '20 15:10 snarfed

I'm sure this doesn't add much of any substance that you didn't already know, however, I've just configured my site to use bridgy-fed and was successfully able to reply to a mastodon post (yours @snarfed ) but not a pleroma post on my site.

The following is the feedback from webmention.app:

source= https://fed.brid.gy/
target= 502 https://fed.brid.gy/webmention
400 Client Error: Bad Request for url: https://social.nipponalba.scot/users/jk/inbox ; "error" 

Apologies in advance if once again this is down to my particular instance not playing ball.

jk-na avatar Mar 10 '21 12:03 jk-na

The following are the (debug enabled) logs of an attempt to reply to pleroma:

Mar 10 13:54:17 MatrixRock pleroma[7585]: 13:54:17.446 [info] POST /users/jk/inbox
Mar 10 13:54:17 MatrixRock pleroma[7585]: 13:54:17.448 request_id=Fmr_mvne5kH7O3MADlJi [debug] POST /users/jk/inbox
Mar 10 13:54:17 MatrixRock pleroma[7585]: 13:54:17.462 request_id=Fmr_mvne5kH7O3MADlJi [debug] Processing with Pleroma.Web.ActivityPub.ActivityPubController.inbox/2
Mar 10 13:54:17 MatrixRock pleroma[7585]:   Parameters: %{"@context" => "https://www.w3.org/ns/activitystreams", "nickname" => "jk", "object" => %{"@context" => "https://www.w3.org/ns/activitystreams", "attachment" => [%{"name" => "J K 🇯🇵🏴󠁧󠁢󠁳󠁣󠁴󠁿's avatar Wed, 10 Mar 2021 10:50:00 GMT\nRight then, if I've fixed my atom feed and added the link to bridgy fed for posts.. nginx rule added.. so long as my beehive -&gt; webmention.app process works then maybe my site is now activitypubbed.. maybe.. (https://jk.nipponalba.scot/note/6048a457/)", "type" => "Note"}], "attributedTo" => [%{"icon" => [%{"type" => "Image", "url" => "https://jk.nipponalba.scot/images/profile.jpg"}], "id" => "https://fed.brid.gy/jk.nipponalba.scot", "image" => [%{"type" => "Image", "url" => "https://jk.nipponalba.scot/images/profile.jpg"}], "name" => "J K 🇯🇵🏴󠁧󠁢󠁳󠁣󠁴󠁿 | personal site", "preferredUsername" => "jk.nipponalba.scot", "type" => "Person", "url" => "https://fed.brid.gy/r/https://jk.nipponalba.scot"}], "cc" => ["https://www.w3.org/ns/activitystreams#Public", "https://social.nipponalba.scot/users/jk", "https://social.nipponalba.scot/users/jk/followers"], "content" => "<br/><p>If you can see this, it worked!</p>", "id" => "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6048bcde/", "inReplyTo" => "https://social.nipponalba.scot/objects/1bf56236-fe1f-4f3c-9978-7b3eabcf73b5", "name" => "If you can see this, it worked!", "published" => "10 Mar 2021 12:34 GMT", "tag" => [%{"href" => "https://social.nipponalba.scot/users/jk", "type" => "Mention"}, %{"href" => "https://social.nipponalba.scot/users/jk", "type" => "Mention"}], "type" => "Note", "url" => "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6048bcde/", "urls" => [%{"value" => "https://jk.nipponalba.scot/response/6048bcde/"}, %{"value" => "https://fed.brid.gy/"}]}, "type" => "Create"}
Mar 10 13:54:17 MatrixRock pleroma[7585]:   Pipelines: [:activitypub]
Mar 10 13:54:21 MatrixRock pleroma[7585]: 13:54:21.128 request_id=Fmr_mvne5kH7O3MADlJi [debug] Couldn't parse XML: "{\n  \"subject\": \"acct:[email protected]\",\n  \"aliases\": [\n    \"https://jk.nipponalba.scot/\",\n    \"https://social.nipponalba.scot/jk\",\n    \"https://px.nipponalba.scot/jk\"\n  ],\n  \"magic_keys\": [\n    {\n      \"value\": \"data:application/magic-public-key,RSA.3Wq8cM8ZzWydoZ3ljmB5GCaMJKcooELcZVHdFY4EkB8MVPZFqn26xwVQA8k7XKov-HQM0Hd1JwiNUzzZ5-Cz2WPT1qIlnd2ZdfxHyxcTuy1PRku33Ei0JMo-STYUpTdyPED7nWW8m64EQ1WWKKA3tQ_uduSixqgtmo6yFTog0U0=.AQAB\"\n    }\n  ],\n  \"links\": [\n    {\n      \"rel\": \"http://webfinger.net/rel/profile-page\",\n      \"type\": \"text/html\",\n      \"href\": \"https://jk.nipponalba.scot/\"\n    },\n    {\n      \"rel\": \"http://webfinger.net/rel/profile-page\",\n      \"type\": \"text/html\",\n      \"href\": \"https://social.nipponalba.scot/jk\"\n    },\n    {\n      \"rel\": \"http://webfinger.net/rel/profile-page\",\n      \"type\": \"text/html\",\n      \"href\": \"https://px.nipponalba.scot/jk\"\n    },\n    {\n      \"rel\": \"http://webfinger.net/rel/avatar\",\n      \"href\": {\n        \"value\": \"https://jk.nipponalba.scot/images/profile.jpg\",\n        \"alt\": \"profile picture\"\n      }\n    },\n    {\n      \"rel\": \"canonical_uri\",\n      \"type\": \"text/html\",\n      \"href\": \"https://jk.nipponalba.scot/\"\n    },\n    {\n      \"rel\": \"self\",\n      \"type\": \"application/activity+json\",\n      \"href\": \"https://fed.brid.gy/jk.nipponalba.scot\"\n    },\n    {\n      \"rel\": \"inbox\",\n      \"type\": \"application/activity+json\",\n      \"href\": \"https://fed.brid.gy/jk.nipponalba.scot/inbox\"\n    },\n    {\n      \"rel\": \"http://schemas.google.com/g/2010#updates-from\",\n      \"type\": \"application/atom+xml\",\n      \"href\": \"http://jk.nipponalba.scot/atom.xml\"\n    },\n    {\n      \"rel\": \"hub\",\n      \"href\": \"https://bridgy-fed.superfeedr.com/\"\n    },\n    {\n      \"rel\": \"magic-public-key\",\n      \"href\": \"data:application/magic-public-key,RSA.3Wq8cM8ZzWydoZ3ljmB5GCaMJKcooELcZVHdFY4EkB8MVPZFqn26xwVQA8k7XKov-HQM0Hd1JwiNUzzZ5-Cz2WPT1qIlnd2ZdfxHyxcTuy1PRku33Ei0JMo-STYUpTdyPED7nWW8m64EQ1WWKKA3tQ_uduSixqgtmo6yFTog0U0=.AQAB\"\n    },\n    {\n      \"rel\": \"salmon\",\n      \"href\": \"https://fed.brid.gy/jk.nipponalba.scot/salmon\"\n    }\n  ]\n}"
Mar 10 13:54:21 MatrixRock pleroma[7585]: 13:54:21.130 request_id=Fmr_mvne5kH7O3MADlJi [debug] Unhandled type: "text/html"
Mar 10 13:54:21 MatrixRock pleroma[7585]: 13:54:21.131 request_id=Fmr_mvne5kH7O3MADlJi [debug] Unhandled type: "text/html"
Mar 10 13:54:21 MatrixRock pleroma[7585]: 13:54:21.131 request_id=Fmr_mvne5kH7O3MADlJi [debug] Unhandled type: "text/html"
Mar 10 13:54:21 MatrixRock pleroma[7585]: 13:54:21.132 request_id=Fmr_mvne5kH7O3MADlJi [debug] Unhandled type: nil
Mar 10 13:54:21 MatrixRock pleroma[7585]: 13:54:21.133 request_id=Fmr_mvne5kH7O3MADlJi [debug] Unhandled type: "text/html"
Mar 10 13:54:21 MatrixRock pleroma[7585]: 13:54:21.134 request_id=Fmr_mvne5kH7O3MADlJi [debug] Unhandled type: "application/activity+json"
Mar 10 13:54:21 MatrixRock pleroma[7585]: 13:54:21.136 request_id=Fmr_mvne5kH7O3MADlJi [debug] Unhandled type: "application/atom+xml"
Mar 10 13:54:21 MatrixRock pleroma[7585]: 13:54:21.137 request_id=Fmr_mvne5kH7O3MADlJi [debug] Unhandled type: nil
Mar 10 13:54:21 MatrixRock pleroma[7585]: 13:54:21.138 request_id=Fmr_mvne5kH7O3MADlJi [debug] Unhandled type: nil
Mar 10 13:54:21 MatrixRock pleroma[7585]: 13:54:21.139 request_id=Fmr_mvne5kH7O3MADlJi [debug] Unhandled type: nil
Mar 10 13:54:21 MatrixRock pleroma[7585]: 13:54:21.140 request_id=Fmr_mvne5kH7O3MADlJi [debug] Could not validate against known public keys: {:error, {:error, "acct:[email protected]"}}
Mar 10 13:54:21 MatrixRock pleroma[7585]: 13:54:21.141 request_id=Fmr_mvne5kH7O3MADlJi [debug] Signature missing or not from author, relayed Create message, fetching object from source
Mar 10 13:54:21 MatrixRock pleroma[7585]: 13:54:21.150 request_id=Fmr_mvne5kH7O3MADlJi [debug] QUERY OK source="objects" db=6.3ms queue=0.4ms idle=261.1ms
Mar 10 13:54:21 MatrixRock pleroma[7585]: SELECT o0."id", o0."data", o0."inserted_at", o0."updated_at" FROM "objects" AS o0 WHERE ((o0."data")->>'id' = $1) ["https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6048bcde/"]
Mar 10 13:54:21 MatrixRock pleroma[7585]: 13:54:21.150 request_id=Fmr_mvne5kH7O3MADlJi [debug] Fetching object https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6048bcde/ via AP
Mar 10 13:54:22 MatrixRock pleroma[7585]: 13:54:22.200 request_id=Fmr_mvne5kH7O3MADlJi [debug] Sent 200 in 4751ms
Mar 10 13:54:22 MatrixRock pleroma[7585]: 13:54:22.200 request_id=Fmr_mvne5kH7O3MADlJi [info] Sent 200 in 4754ms

jk-na avatar Mar 10 '21 13:03 jk-na

Thanks for the details!

Here's also the complete AS2 activity that Bridgy Fed sent to https://social.nipponalba.scot/users/jk/inbox , and got a 200 back for, from Bridgy Fed's log.

One thing I notice is that the object has an id, but the activity doesn't, and @swentel said above:

Posting notes/reply: the id of the activity and object must be different. The object also needs the attributedTo property.

I can look into adding an activity id.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "type": "Create",
  "object": {
    "published": "10 Mar 2021 12:34 GMT",
    "content": "<br/><p>If you can see this, it worked!</p>",
    "url": "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6048bcde/",
    "urls": [
      {"value": "https://jk.nipponalba.scot/response/6048bcde/"},
      {"value": "https://fed.brid.gy/"}
    ],
    "inReplyTo": "https://social.nipponalba.scot/objects/1bf56236-fe1f-4f3c-9978-7b3eabcf73b5",
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Note",
    "name": "If you can see this, it worked!",
    "attachment": [
      {
        "type": "Note",
        "name": "J K \ud83c\uddef\ud83c\uddf5\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f's avatar Wed, 10 Mar 2021 10:50:00 GMT\nRight then, if I've fixed my atom feed and added the link to bridgy fed for posts.. nginx rule added.. so long as my beehive -&gt; webmention.app process works then maybe my site is now activitypubbed.. maybe.. (https://jk.nipponalba.scot/note/6048a457/)"
      }
    ],
    "attributedTo": [
      {
        "url": "https://fed.brid.gy/r/https://jk.nipponalba.scot",
        "type": "Person",
        "name": "J K \ud83c\uddef\ud83c\uddf5\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f | personal site",
        "image": [
          {
            "url": "https://jk.nipponalba.scot/images/profile.jpg",
            "type": "Image"
          }
        ],
        "icon": [
          {
            "url": "https://jk.nipponalba.scot/images/profile.jpg",
            "type": "Image"
          }
        ],
        "preferredUsername": "jk.nipponalba.scot",
        "id": "https://fed.brid.gy/jk.nipponalba.scot"
      }
    ],
    "tag": [
      {
        "type": "Mention",
        "href": "https://social.nipponalba.scot/users/jk"
      },
      {
        "type": "Mention",
        "href": "https://social.nipponalba.scot/users/jk"
      }
    ],
    "id": "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6048bcde/",
    "cc": [
      "https://www.w3.org/ns/activitystreams#Public",
      "https://social.nipponalba.scot/users/jk",
      "https://social.nipponalba.scot/users/jk/followers"
    ]
  }
}

snarfed avatar Mar 10 '21 17:03 snarfed

I've added an id to outbound AS2 activities. Feel free to try again!

snarfed avatar Mar 11 '21 04:03 snarfed

I've tried again and am seeing a similar pattern to above - there are 200 responses but there are also errors relating to signatures and failures to parse xml.

Mar 11 09:42:22 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] POST /users/jk/inbox
Mar 11 09:42:22 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] Processing with Pleroma.Web.ActivityPub.ActivityPubController.inbox/2#012  Parameters: %{"@context" => "https://www.w3.org/ns/activitystreams", "id" => "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d413/#bridgy-fed-create", "nickname" => "jk", "object" => %{"@context" => "https://www.w3.org/ns/activitystreams", "attributedTo" => [%{"icon" => [%{"type" => "Image", "url" => "https://jk.nipponalba.scot/images/profile.jpg"}], "id" => "https://fed.brid.gy/jk.nipponalba.scot", "image" => [%{"type" => "Image", "url" => "https://jk.nipponalba.scot/images/profile.jpg"}], "name" => "J K 🇯🇵🏴󠁧󠁢󠁳󠁣󠁴󠁿 | personal site", "preferredUsername" => "jk.nipponalba.scot", "type" => "Person", "url" => "https://fed.brid.gy/r/https://jk.nipponalba.scot"}], "cc" => ["https://www.w3.org/ns/activitystreams#Public", "https://social.nipponalba.scot/users/jk", "https://social.nipponalba.scot/users/jk/followers"], "content" => "<br/><p>Testing</p>", "id" => "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d413/", "inReplyTo" => "https://social.nipponalba.scot/objects/c341db0a-ad7e-406a-9b9f-07b575ce9f61", "name" => "Testing", "published" => "11 Mar 2021 08:25 GMT", "tag" => [%{"href" => "https://social.nipponalba.scot/users/jk", "type" => "Mention"}, %{"href" => "https://social.nipponalba.scot/users/jk", "type" => "Mention"}], "type" => "Note", "url" => "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d413/", "urls" => [%{"value" => "https://jk.nipponalba.scot/response/6049d413/"}, %{"value" => "https://fed.brid.gy/"}]}, "type" => "Create"}#012  Pipelines: [:activitypub]
Mar 11 09:42:25 MatrixRock pleroma: [debug] QUERY OK source="users" db=1077.5ms decode=0.7ms queue=0.1ms idle=110.3ms#012SELECT distinct split_part(u0."nickname", '@', 2) FROM "users" AS u0 WHERE (u0."local" != $1) [true]
Mar 11 09:42:25 MatrixRock pleroma: [debug] QUERY OK source="users" db=4.6ms queue=0.2ms idle=194.6ms#012SELECT sum(u0."note_count") FROM "users" AS u0 WHERE (NOT (u0."nickname" IS NULL)) AND (NOT (u0."nickname" LIKE 'internal.%')) AND (u0."local" = $1) [true]
Mar 11 09:42:25 MatrixRock pleroma: [debug] QUERY OK source="users" db=4.9ms queue=1.1ms idle=197.8ms#012SELECT count(u0."id") FROM "users" AS u0 WHERE (u0."is_active" = TRUE) AND (u0."local" = TRUE) AND (NOT (u0."nickname" IS NULL)) AND (NOT (u0."invisible")) []
Mar 11 09:42:25 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] Couldn't parse XML: "{\n  \"subject\": \"acct:[email protected]\",\n  \"aliases\": [\n    \"https://jk.nipponalba.scot/\",\n    \"https://social.nipponalba.scot/jk\",\n    \"https://px.nipponalba.scot/jk\"\n  ],\n  \"magic_keys\": [\n    {\n      \"value\": \"data:application/magic-public-key,RSA.3Wq8cM8ZzWydoZ3ljmB5GCaMJKcooELcZVHdFY4EkB8MVPZFqn26xwVQA8k7XKov-HQM0Hd1JwiNUzzZ5-Cz2WPT1qIlnd2ZdfxHyxcTuy1PRku33Ei0JMo-STYUpTdyPED7nWW8m64EQ1WWKKA3tQ_uduSixqgtmo6yFTog0U0=.AQAB\"\n    }\n  ],\n  \"links\": [\n    {\n      \"rel\": \"http://webfinger.net/rel/profile-page\",\n      \"type\": \"text/html\",\n      \"href\": \"https://jk.nipponalba.scot/\"\n    },\n    {\n      \"rel\": \"http://webfinger.net/rel/profile-page\",\n      \"type\": \"text/html\",\n      \"href\": \"https://social.nipponalba.scot/jk\"\n    },\n    {\n      \"rel\": \"http://webfinger.net/rel/profile-page\",\n      \"type\": \"text/html\",\n      \"href\": \"https://px.nipponalba.scot/jk\"\n    },\n    {\n      \"rel\": \"http://webfinger.net/rel/avatar\",\n      \"href\": {\n        \"value\": \"https://jk.nipponalba.scot/images/profile.jpg\",\n        \"alt\": \"profile picture\"\n      }\n    },\n    {\n      \"rel\": \"canonical_uri\",\n      \"type\": \"text/html\",\n      \"href\": \"https://jk.nipponalba.scot/\"\n    },\n    {\n      \"rel\": \"self\",\n      \"type\": \"application/activity+json\",\n      \"href\": \"https://fed.brid.gy/jk.nipponalba.scot\"\n    },\n    {\n      \"rel\": \"inbox\",\n      \"type\": \"application/activity+json\",\n      \"href\": \"https://fed.brid.gy/jk.nipponalba.scot/inbox\"\n    },\n    {\n      \"rel\": \"http://schemas.google.com/g/2010#updates-from\",\n      \"type\": \"application/atom+xml\",\n      \"href\": \"http://jk.nipponalba.scot/atom.xml\"\n    },\n    {\n      \"rel\": \"hub\",\n      \"href\": \"https://bridgy-fed.superfeedr.com/\"\n    },\n    {\n      \"rel\": \"magic-public-key\",\n      \"href\": \"data:application/magic-public-key,RSA.3Wq8cM8ZzWydoZ3ljmB5GCaMJKcooELcZVHdFY4EkB8MVPZFqn26xwVQA8k7XKov-HQM0Hd1JwiNUzzZ5-Cz2WPT1qIlnd2ZdfxHyxcTuy1PRku33Ei0JMo-STYUpTdyPED7nWW8m64EQ1WWKKA3tQ_uduSixqgtmo6yFTog0U0=.AQAB\"\n    },\n    {\n      \"rel\": \"salmon\",\n      \"href\": \"https://fed.brid.gy/jk.nipponalba.scot/salmon\"\n    }\n  ]\n}"
Mar 11 09:42:25 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] Unhandled type: "text/html"
Mar 11 09:42:25 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] Unhandled type: "text/html"
Mar 11 09:42:25 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] Unhandled type: "text/html"
Mar 11 09:42:25 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] Unhandled type: nil
Mar 11 09:42:25 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] Unhandled type: "text/html"
Mar 11 09:42:25 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] Unhandled type: "application/activity+json"
Mar 11 09:42:25 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] Unhandled type: "application/atom+xml"
Mar 11 09:42:25 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] Unhandled type: nil
Mar 11 09:42:25 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] Unhandled type: nil
Mar 11 09:42:25 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] Unhandled type: nil
Mar 11 09:42:25 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] Could not validate against known public keys: {:error, {:error, "acct:[email protected]"}}
Mar 11 09:42:25 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] Signature missing or not from author, relayed Create message, fetching object from source
Mar 11 09:42:25 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] QUERY OK source="objects" db=5.6ms queue=0.4ms idle=258.2ms#012SELECT o0."id", o0."data", o0."inserted_at", o0."updated_at" FROM "objects" AS o0 WHERE ((o0."data")->>'id' = $1) ["https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d413/"]
Mar 11 09:42:25 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] Fetching object https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d413/ via AP
Mar 11 09:42:26 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] QUERY OK source="objects" db=6.4ms queue=0.2ms idle=348.7ms#012SELECT o0."id", o0."data", o0."inserted_at", o0."updated_at" FROM "objects" AS o0 WHERE ((o0."data")->>'id' = $1) ["https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d413/#bridgy-fed-create"]
Mar 11 09:42:26 MatrixRock pleroma: request_id=FmtAcEQM0DZ8z1UAFDvB [debug] Sent 200 in 3997ms

Not sure if perhaps: Could not validate against known public keys: {:error, {:error, "acct:[email protected]"}} or Couldn't parse XML are at all relevant?

The first of those seems similar in nature to the pixelfed error, could it be that the AP spec has it that the key needs to be formatted in a certain way (which pixelfed and pleroma perhaps require) but mastodon have a workaround in place that converts one format to the other?

jk-na avatar Mar 11 '21 09:03 jk-na

The mastodon activitypub page has the key id in the format of "https://mastodon.social/users/Gargron#main-key" rather than the webfinger format above. I may however be reading way too much into this, and it could well be a red herring.

jk-na avatar Mar 11 '21 09:03 jk-na

@jk-na those are all good clues!

I did notice one other quirk: it looks like your site's redirects to Bridgy Fed are duplicating the query parameters. eg https://jk.nipponalba.scot/.well-known/webfinger?resource=acct:[email protected] currently redirects to https://fed.brid.gy/.well-known/webfinger?resource=acct:[email protected]?resource=acct:[email protected]. Bridgy Fed still serves that request fine though, for just [email protected], so I doubt it's the cause here.

snarfed avatar Mar 11 '21 21:03 snarfed

How bizarre, I just copied and pasted the nginx redirect from the set up instructions to my proxy server, I'll double-check it though.

jk-na avatar Mar 11 '21 21:03 jk-na

Also, Couldn't parse XML is odd. ActivityPub is all JSON afaik, the term XML literally doesn't appear anywhere on https://w3c.github.io/activitypub/ , so I'm not sure where Pleroma is expecting XML.

snarfed avatar Mar 11 '21 21:03 snarfed

Based on the logs, it looks like Pleroma is trying to parse the JSON WebFinger response as XML, which explains that error and why it can't find or validate your public key. I'll try to figure out why.

snarfed avatar Mar 11 '21 21:03 snarfed

I fixed the duplication by adding a ? to the end of the rewrite target..

rewrite ^/.well-known/(host-meta|webfinger).* https://fed.brid.gy$request_uri? redirect;

Interestingly, I don't now get the webmention.app error, instead receiving a 200 response. Received the error on the second attempt.. same errors at the pleroma end.

jk-na avatar Mar 11 '21 21:03 jk-na

The following is an excerpt from a successful POST to my inbox and might provide a clue or more confusion, it is from a mastodon account, I think:

Mar 11 21:48:56 MatrixRock pleroma: [info] POST /inbox
Mar 11 21:48:56 MatrixRock pleroma: request_id=FmtoFl8HNVPrWxgAEQ-j [debug] POST /inbox
Mar 11 21:48:56 MatrixRock pleroma: request_id=FmtoFl8HNVPrWxgAEQ-j [debug] Processing with Pleroma.Web.ActivityPub.ActivityPubController.inbox/2#012  Parameters: %{"@context" => ["https://www.w3.org/ns/activitystreams", %{"atomUri" => "ostatus:atomUri", "conversation" => "ostatus:conversation", "inReplyToAtomUri" => "ostatus:inReplyToAtomUri", "ostatus" => "http://ostatus.org#", "sensitive" => "as:sensitive", "toot" => "http://joinmastodon.org/ns#", "votersCount" => "toot:votersCount"}], "actor" => "https://rage.love/users/pfx", "cc" => [], "id" => "https://rage.love/users/pfx/statuses/105873364426273091/activity", "object" => %{"atomUri" => "https://rage.love/users/pfx/statuses/105873364426273091", "attachment" => [], "attributedTo" => "https://rage.love/users/pfx", "cc" => [], "content" => "<p>mmm nectarines with the texture of a old apple</p>", "contentMap" => %{"en" => "<p>mmm nectarines with the texture of a old apple</p>"}, "conversation" => "tag:rage.love,2021-03-11:objectId=5836645:objectType=Conversation", "id" => "https://rage.love/users/pfx/statuses/105873364426273091", "inReplyTo" => nil, "inReplyToAtomUri" => nil, "published" => "2021-03-11T21:48:55Z", "replies" => %{"first" => %{"items" => [], "next" => "https://rage.love/users/pfx/statuses/105873364426273091/replies?only_other_accounts=true&page=true", "partOf" => "https://rage.love/users/pfx/statuses/105873364426273091/replies", "type" => "CollectionPage"}, "id" => "https://rage.love/users/pfx/statuses/105873364426273091/replies", "type" => "Collection"}, "sensitive" => true, "summary" => "food", "tag" => [], "to" => ["https://rage.love/users/pfx/followers"], "type" => "Note", "url" => "https://rage.love/@pfx/105873364426273091"}, "published" => "2021-03-11T21:48:55Z", "to" => ["https://rage.love/users/pfx/followers"], "type" => "Create"}#012  Pipelines: [:activitypub]
Mar 11 21:48:56 MatrixRock pleroma: request_id=FmtoFl8HNVPrWxgAEQ-j [debug] Signature: IUDKbTJA9AnMERaKNHEN8ayG9G+jrsHsy8gFGoUjA3fqcgioDGkg+Cz4S+MZnvnB5LwZRDsMNb/AoquHESVbY6GPvEVusUk0JVz8WcIKFEwDdCqoVkhW7rnXMYLBs8bJ4+qpUBKV2lfljJCE4xVLVT8L9ZHXrYaksKk3qOkAq0P1/QQqaXrkvOniVw0T33RnY5MggQyXPidc1rtxPTqlCHogvsRpWMKplr3qo4xIIM36TT2zpsvzThJBTs5q0zrd9HfCreHx8NOYyDaO95L0y5Jdnnb1wfKi9yLY45mv8oBw7yCT4oy7UWpi/zvFq1/QLvKHXqrEcz4FaJNMCxWUQw==
Mar 11 21:48:56 MatrixRock pleroma: request_id=FmtoFl8HNVPrWxgAEQ-j [debug] Sigstring: (request-target): post /inbox#012host: social.nipponalba.scot#012date: Thu, 11 Mar 2021 21:48:56 GMT#012digest: SHA-256=ZaO6N06SYi9mA9R095sODVeuVud3eiPukDra3aYwCvc=#012content-type: application/activity+json
Mar 11 21:48:56 MatrixRock pleroma: request_id=FmtoFl8HNVPrWxgAEQ-j [debug] QUERY OK source="instances" db=4.7ms queue=0.2ms idle=440.6ms#012SELECT i0."id", i0."host", i0."unreachable_since", i0."favicon", i0."favicon_updated_at", i0."inserted_at", i0."updated_at" FROM "instances" AS i0 WHERE (i0."host" = $1) ["rage.love"]
Mar 11 21:48:56 MatrixRock pleroma: request_id=FmtoFl8HNVPrWxgAEQ-j [debug] Sent 200 in 30ms

jk-na avatar Mar 11 '21 21:03 jk-na

The WebFinger spec says:

The WebFinger resource returns a JSON Resource Descriptor (JRD) as the resource representation to convey information about an entity on the Internet.

I did notice that the official mime type for JRD is application/jrd+json, but Bridgy Fed currently returns application/json. I've fixed that, feel free to try again.

snarfed avatar Mar 11 '21 22:03 snarfed

After much backslash removal, this is the bit that pleroma seems to be having with:

Couldn't parse XML: "{
			"subject": "acct:[email protected]",
			"aliases": ["https://jk.nipponalba.scot/", "https://social.nipponalba.scot/jk", "https://px.nipponalba.scot/jk"],
			"magic_keys": [{"value": "data:application/magic-public-key,RSA.3Wq8cM8ZzWydoZ3ljmB5GCaMJKcooELcZVHdFY4EkB8MVPZFqn26xwVQA8k7XKov-HQM0Hd1JwiNUzzZ5-Cz2WPT1qIlnd2ZdfxHyxcTuy1PRku33Ei0JMo-STYUpTdyPED7nWW8m64EQ1WWKKA3tQ_uduSixqgtmo6yFTog0U0=.AQAB"}],
			"links": [{"rel": "http://webfinger.net/rel/profile-page",
			         "type": "text/html",
				 "href": "https://jk.nipponalba.scot/"},
		         {"rel": "http://webfinger.net/rel/profile-page",
			 	 "type": "text/html",
			 	 "href": "https://social.nipponalba.scot/jk"},
			 {"rel": "http://webfinger.net/rel/profile-page",
			 	 "type": "text/html", 
				 "href": "https://px.nipponalba.scot/jk"},
			 {"rel": "http://webfinger.net/rel/avatar",
	                         "href": {"value": "https://jk.nipponalba.scot/images/profile.jpg",
			           	    "alt": "profile picture"}},
			 {"rel": "canonical_uri",
				 "type": "text/html",
				 "href": "https://jk.nipponalba.scot/"},
			 {"rel": "self",
				 "type": "application/activity+json",
				 "href": "https://fed.brid.gy/jk.nipponalba.scot"},
			 {"rel": "inbox",
				 "type": "application/activity+json",
				 "href": "https://fed.brid.gy/jk.nipponalba.scot/inbox"},
			 {"rel": "http://schemas.google.com/g/2010#updates-from",
				 "type": "application/atom+xml"
				 "href": "http://jk.nipponalba.scot/atom.xml"},
			 {"rel": "hub",
			   	 "href": "https://bridgy-fed.superfeedr.com/"},
			 {"rel": "magic-public-key",
				 "href": "data:application/magic-public-key,RSA.3Wq8cM8ZzWydoZ3ljmB5GCaMJKcooELcZVHdFY4EkB8MVPZFqn26xwVQA8k7XKov-HQM0Hd1JwiNUzzZ5-Cz2WPT1qIlnd2ZdfxHyxcTuy1PRku33Ei0JMo-STYUpTdyPED7nWW8m64EQ1WWKKA3tQ_uduSixqgtmo6yFTog0U0=.AQAB"},
			 {"rel": "salmon",
				 "href": "https://fed.brid.gy/jk.nipponalba.scot/salmon"}]}"

I'll try again.

jk-na avatar Mar 11 '21 22:03 jk-na

The WebFinger spec says:

The WebFinger resource returns a JSON Resource Descriptor (JRD) as the resource representation to convey information about an entity on the Internet.

I did notice that the official mime type for JRD is application/jrd+json, but Bridgy Fed currently returns application/json. I've fixed that, feel free to try again.

Still the same error.

For ease of reading, I've tried to format the payload being processed by the inbox controller, I can see some differences but I don't know what is and isn't mandatory unfortunately.

First one is the mastodon transaction from above, second is one of my attempts via bridgy fed

Processing with Pleroma.Web.ActivityPub.ActivityPubController.inbox/2#012  
Parameters: 
	%{"@context" => 
		["https://www.w3.org/ns/activitystreams", 
		 %{
			"atomUri" => "ostatus:atomUri", 
			"conversation" => "ostatus:conversation", 
			"inReplyToAtomUri" => "ostatus:inReplyToAtomUri", 
			"ostatus" => "http://ostatus.org#", "
			sensitive" => "as:sensitive", 
			"toot" => "http://joinmastodon.org/ns#", 
			"votersCount" => "toot:votersCount"
		 }
		], 
		"actor" => "https://rage.love/users/pfx", 
		"cc" => [], 
		"id" => "https://rage.love/users/pfx/statuses/105873364426273091/activity", 
		"object" => %{
				"atomUri" => "https://rage.love/users/pfx/statuses/105873364426273091", 
				"attachment" => [], 
				"attributedTo" => "https://rage.love/users/pfx", 
				"cc" => [], 
				"content" => "<p>mmm nectarines with the texture of a old apple</p>", 
				"contentMap" => %{"en" => "<p>mmm nectarines with the texture of a old apple</p>"}, 
				"conversation" => "tag:rage.love,2021-03-11:objectId=5836645:objectType=Conversation", 
				"id" => "https://rage.love/users/pfx/statuses/105873364426273091", 
				"inReplyTo" => nil, 
				"inReplyToAtomUri" => nil, 
				"published" => "2021-03-11T21:48:55Z", 
				"replies" => %{
						"first" => %{
								"items" => [], 
								"next" => "https://rage.love/users/pfx/statuses/105873364426273091/replies?only_other_accounts=true&page=true", 
								"partOf" => "https://rage.love/users/pfx/statuses/105873364426273091/replies", 
								"type" => "CollectionPage"}, 
						"id" => "https://rage.love/users/pfx/statuses/105873364426273091/replies", 
						"type" => "Collection"}, 
				"sensitive" => true, 
				"summary" => "food", 
				"tag" => [], 
				"to" => ["https://rage.love/users/pfx/followers"], 
				"type" => "Note", 
				"url" => "https://rage.love/@pfx/105873364426273091"}, 
		"published" => "2021-03-11T21:48:55Z", 
		"to" => ["https://rage.love/users/pfx/followers"], 
		"type" => "Create"}
#012  Pipelines: [:activitypub]


Processing with Pleroma.Web.ActivityPub.ActivityPubController.inbox/2#012  
Parameters: 
	%{"@context" => "https://www.w3.org/ns/activitystreams", 
	"id" => "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d880/#bridgy-fed-create", 
	"nickname" => "jk", 
	"object" => %{
		"@context" => "https://www.w3.org/ns/activitystreams", 
		"attributedTo" => [%{"icon" => [%{"type" => "Image", "url" => "https://jk.nipponalba.scot/images/profile.jpg"}], 
			"id" => "https://fed.brid.gy/jk.nipponalba.scot", 
			"image" => [%{"type" => "Image", "url" => "https://jk.nipponalba.scot/images/profile.jpg"}], 
			"name" => "J K 🇯🇵🏴󠁧󠁢󠁳󠁣󠁴󠁿 | personal site", 
			"preferredUsername" => "jk.nipponalba.scot", 
			"type" => "Person", 
			"url" => "https://fed.brid.gy/r/https://jk.nipponalba.scot"}], 
		"cc" => ["https://www.w3.org/ns/activitystreams#Public", "https://social.nipponalba.scot/users/jk", "https://social.nipponalba.scot/users/jk/followers"], 
		"content" => "<br/><p>Test #2</p>", 
		"id" => "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d880/", 
		"inReplyTo" => "https://social.nipponalba.scot/objects/c341db0a-ad7e-406a-9b9f-07b575ce9f61", 
		"name" => "Test #2", 
		"published" => "11 Mar 2021 08:44 GMT", 
		"tag" => [%{"href" => "https://social.nipponalba.scot/users/jk", "type" => "Mention"}, %{"href" => "https://social.nipponalba.scot/users/jk", "type" => "Mention"}], 
		"type" => "Note", 
		"url" => "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d880/", 
		"urls" => [%{"value" => "https://jk.nipponalba.scot/response/6049d880/"}, %{"value" => "https://fed.brid.gy/"}]
         }, 
	"type" => "Update"}

#012  Pipelines: [:activitypub]

jk-na avatar Mar 11 '21 22:03 jk-na

I had a look at my webfinger response for my pleroma account and the following is the output (I found the xml)

<?xml version="1.0" encoding="UTF-8"?>
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
   <Subject>acct:[email protected]</Subject>
   <Alias>https://social.nipponalba.scot/users/jk</Alias>
   <Link href="https://social.nipponalba.scot/users/jk" rel="http://webfinger.net/rel/profile-page" type="text/html" />
   <Link href="https://social.nipponalba.scot/users/jk" rel="self" type="application/activity+json" />
   <Link href="https://social.nipponalba.scot/users/jk" rel="self" type="application/ld+json; profile=&quot;https://www.w3.org/ns/activitystreams&quot;" />
   <Link rel="http://ostatus.org/schema/1.0/subscribe" template="https://social.nipponalba.scot/ostatus_subscribe?acct={uri}" />
</XRD>

jk-na avatar Mar 11 '21 22:03 jk-na

Thanks! Yup, that's XML-based XRD. I can try supporting that and see if it works then.

snarfed avatar Mar 11 '21 22:03 snarfed

This one is from my test mastodon account:

{
"subject":"acct:[email protected]",
"aliases":["https://mastodon.scot/@jk_na","https://mastodon.scot/users/jk_na"],
"links":[
	{"rel":"http://webfinger.net/rel/profile-page",
	 "type":"text/html","href":"https://mastodon.scot/@jk_na"},
	{"rel":"self",
	 "type":"application/activity+json",
	 "href":"https://mastodon.scot/users/jk_na"},
	{"rel":"http://ostatus.org/schema/1.0/subscribe",
	 "template":"https://mastodon.scot/authorize_interaction?uri={uri}"}
	]
}

jk-na avatar Mar 11 '21 22:03 jk-na

OK, Bridgy Fed's WebFinger now supports XRD. If you fetch it with `Accept: application/xrd' or 'application/xml', it now returns similar XRD to Pleroma's. Feel free to retry. Thanks again for all the testing!

snarfed avatar Mar 12 '21 05:03 snarfed

I think we're almost there.. the error message is smaller!

Couldn't parse XML: "{\"links\": [\n  {\n    \"rel\": \"lrdd\",\n    \"type\": \"application/json\",\n    \"template\": \"https://fed.brid.gy/.well-known/webfinger?resource={uri}\"\n   }\n  ]\n}"
Could not validate against known public keys: {:error, {:error, "acct:[email protected]"}}

When I look at the webfinger, I don't see any rel for lrdd so I'm not sure but also the subject element is empty.

<?xml version='1.0' encoding='UTF-8'?>
<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>

    <Subject></Subject>
    <Alias>https://jk.nipponalba.scot/</Alias>

    
    <Link rel='http://webfinger.net/rel/profile-page' type='text/html' href='https://jk.nipponalba.scot/' />
    
    <Link rel='http://webfinger.net/rel/profile-page' type='text/html' href='https://social.nipponalba.scot/jk' />
    
    <Link rel='http://webfinger.net/rel/profile-page' type='text/html' href='https://px.nipponalba.scot/jk' />
    
    <Link rel='http://webfinger.net/rel/avatar' type='' href='https://jk.nipponalba.scot/images/profile.jpg' />
    
    <Link rel='canonical_uri' type='text/html' href='https://jk.nipponalba.scot/' />
    
    <Link rel='self' type='application/activity+json' href='https://fed.brid.gy/jk.nipponalba.scot' />
    
    <Link rel='inbox' type='application/activity+json' href='https://fed.brid.gy/jk.nipponalba.scot/inbox' />
    
    <Link rel='http://schemas.google.com/g/2010#updates-from' type='application/atom+xml' href='http://jk.nipponalba.scot/atom.xml' />
    
    <Link rel='hub' type='' href='https://bridgy-fed.superfeedr.com/' />
    
    <Link rel='magic-public-key' type='' href='data:application/magic-public-key,RSA.3Wq8cM8ZzWydoZ3ljmB5GCaMJKcooELcZVHdFY4EkB8MVPZFqn26xwVQA8k7XKov-HQM0Hd1JwiNUzzZ5-Cz2WPT1qIlnd2ZdfxHyxcTuy1PRku33Ei0JMo-STYUpTdyPED7nWW8m64EQ1WWKKA3tQ_uduSixqgtmo6yFTog0U0=.AQAB' />
    
    <Link rel='salmon' type='' href='https://fed.brid.gy/jk.nipponalba.scot/salmon' />
    

    
    <Property xmlns:mk="http://salmon-protocol.org/ns/magic-key"
              type="http://salmon-protocol.org/ns/magic-key">
      data:application/magic-public-key,RSA.3Wq8cM8ZzWydoZ3ljmB5GCaMJKcooELcZVHdFY4EkB8MVPZFqn26xwVQA8k7XKov-HQM0Hd1JwiNUzzZ5-Cz2WPT1qIlnd2ZdfxHyxcTuy1PRku33Ei0JMo-STYUpTdyPED7nWW8m64EQ1WWKKA3tQ_uduSixqgtmo6yFTog0U0=.AQAB
    </Property>
    
</XRD>

jk-na avatar Mar 12 '21 08:03 jk-na

Thanks! I should really set up my own local Pleroma instance to do this testing. 😆

That new JSON is .well-known/host-meta, it needs to be XRD too. I'll do that.

snarfed avatar Mar 12 '21 14:03 snarfed

I'm more than happy to troubleshoot and help with the services I host, which looking at the list of compatibility issues is currently just pleroma and pixelfed as I no longer have plume, peertube, friendica or diaspora instances.

jk-na avatar Mar 12 '21 15:03 jk-na

OK, /.well-known/host-meta now defaults to XRD, as the spec says it's supposed to. Ready to retry.

snarfed avatar Mar 12 '21 22:03 snarfed

Sorry to say that it has gone back to having issues parsing /.well-known/webfinger, the property element at the end seems to be missing from the error.. so possibly it is struggling with that?

Couldn't parse XML: "{\n \"subject\": \"acct:[email protected]\",\n \"aliases\": [\n \"https://jk.nipponalba.scot/\",\n \"https://social.nipponalba.scot/jk\",\n \"https://px.nipponalba.scot/jk\"\n ],\n \"magic_keys\": [\n {\n \"value\": \"data:application/magic-public-key,RSA.3Wq8cM8ZzWydoZ3ljmB5GCaMJKcooELcZVHdFY4EkB8MVPZFqn26xwVQA8k7XKov-HQM0Hd1JwiNUzzZ5-Cz2WPT1qIlnd2ZdfxHyxcTuy1PRku33Ei0JMo-STYUpTdyPED7nWW8m64EQ1WWKKA3tQ_uduSixqgtmo6yFTog0U0=.AQAB\"\n }\n ],\n \"links\": [\n {\n \"rel\": \"http://webfinger.net/rel/profile-page\",\n \"type\": \"text/html\",\n \"href\": \"https://jk.nipponalba.scot/\"\n },\n {\n \"rel\": \"http://webfinger.net/rel/profile-page\",\n \"type\": \"text/html\",\n \"href\": \"https://social.nipponalba.scot/jk\"\n },\n {\n \"rel\": \"http://webfinger.net/rel/profile-page\",\n \"type\": \"text/html\",\n \"href\": \"https://px.nipponalba.scot/jk\"\n },\n {\n \"rel\": \"http://webfinger.net/rel/avatar\",\n \"href\": \"https://jk.nipponalba.scot/images/profile.jpg\"\n },\n {\n \"rel\": \"canonical_uri\",\n \"type\": \"text/html\",\n \"href\": \"https://jk.nipponalba.scot/\"\n },\n {\n \"rel\": \"self\",\n \"type\": \"application/activity+json\",\n \"href\": \"https://fed.brid.gy/jk.nipponalba.scot\"\n },\n {\n \"rel\": \"inbox\",\n \"type\": \"application/activity+json\",\n \"href\": \"https://fed.brid.gy/jk.nipponalba.scot/inbox\"\n },\n {\n \"rel\": \"http://schemas.google.com/g/2010#updates-from\",\n \"type\": \"application/atom+xml\",\n \"href\": \"https://jk.nipponalba.scot/atom.xml\"\n },\n {\n \"rel\": \"hub\",\n \"href\": \"https://bridgy-fed.superfeedr.com/\"\n },\n {\n \"rel\": \"magic-public-key\",\n \"href\": \"data:application/magic-public-key,RSA.3Wq8cM8ZzWydoZ3ljmB5GCaMJKcooELcZVHdFY4EkB8MVPZFqn26xwVQA8k7XKov-HQM0Hd1JwiNUzzZ5-Cz2WPT1qIlnd2ZdfxHyxcTuy1PRku33Ei0JMo-STYUpTdyPED7nWW8m64EQ1WWKKA3tQ_uduSixqgtmo6yFTog0U0=.AQAB\"\n },\n {\n \"rel\": \"salmon\",\n \"href\": \"https://fed.brid.gy/jk.nipponalba.scot/salmon\"\n }\n ]\n}"

    <Property xmlns:mk="http://salmon-protocol.org/ns/magic-key"
              type="http://salmon-protocol.org/ns/magic-key">
      data:application/magic-public-key,RSA.3Wq8cM8ZzWydoZ3ljmB5GCaMJKcooELcZVHdFY4EkB8MVPZFqn26xwVQA8k7XKov-HQM0Hd1JwiNUzzZ5-Cz2WPT1qIlnd2ZdfxHyxcTuy1PRku33Ei0JMo-STYUpTdyPED7nWW8m64EQ1WWKKA3tQ_uduSixqgtmo6yFTog0U0=.AQAB
    </Property>

jk-na avatar Mar 12 '21 23:03 jk-na

Ugh, thanks. We're back to serving JSON (JRD), and they're trying to parse it as XML (XRD), and failing.

I finally got a look at the HTTP request headers Pleroma is sending, and notably they include Accept: application/xrd+xml, application/jrd+json. We're returning JRD, with Content-Type: application/jrd+json, which they say they'll accept, but then they incorrectly try to parse it as XML. May be worth filing as a bug with them.

In the meantime, I'll work on more sophisticated Accept parsing and actual content negotiation. Ugh. Conneg is the worst. 😆

snarfed avatar Mar 12 '21 23:03 snarfed

OK! Done, we now handle their Accept header and return XRD for both host-meta and webfinger queries.

snarfed avatar Mar 14 '21 16:03 snarfed

Parsing-wise it looks better indeed, it seems like the request is being processed by pleroma but I don't see a follow up DB write.. and still getting this Could not validate against known public keys: {:error, {:error, "acct:[email protected]"}}

As per below it looks like it is passing the earlier hurdles.

Mar 14 19:45:48 MatrixRock pleroma: request_id=FmxNG-wPPPOMM-IAKYFh [debug] POST /users/jk/inbox Mar 14 19:45:48 MatrixRock pleroma: request_id=FmxNG-wPPPOMM-IAKYFh [debug] Processing with Pleroma.Web.ActivityPub.ActivityPubController.inbox/2#012 Parameters: %{"@context" => "https://www.w3.org/ns/activitystreams", "id" => "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d880/#bridgy-fed-create", "nickname" => "jk", "object" => %{"@context" => "https://www.w3.org/ns/activitystreams", "attributedTo" => [%{"icon" => [%{"type" => "Image", "url" => "https://jk.nipponalba.scot/images/profile.jpg"}], "id" => "https://fed.brid.gy/jk.nipponalba.scot", "image" => [%{"type" => "Image", "url" => "https://jk.nipponalba.scot/images/profile.jpg"}], "name" => "J K 🇯🇵🏴󠁧󠁢󠁳󠁣󠁴󠁿 | personal site", "preferredUsername" => "jk.nipponalba.scot", "type" => "Person", "url" => "https://fed.brid.gy/r/https://jk.nipponalba.scot"}], "cc" => ["https://www.w3.org/ns/activitystreams#Public", "https://social.nipponalba.scot/users/jk", "https://social.nipponalba.scot/users/jk/followers"], "content" => "<p>Test #2</p>", "id" => "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d880/", "inReplyTo" => "https://social.nipponalba.scot/objects/c341db0a-ad7e-406a-9b9f-07b575ce9f61", "name" => "Test #2", "published" => "11 Mar 2021 08:44 GMT", "tag" => [%{"href" => "https://social.nipponalba.scot/users/jk", "type" => "Mention"}, %{"href" => "https://social.nipponalba.scot/users/jk", "type" => "Mention"}], "type" => "Note", "url" => "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d880/", "urls" => [%{"value" => "https://jk.nipponalba.scot/response/6049d880/"}, %{"value" => "https://fed.brid.gy/"}]}, "type" => "Update"}#012 Pipelines: [:activitypub] Mar 14 19:45:52 MatrixRock pleroma: request_id=FmxNG-wPPPOMM-IAKYFh [debug] Could not validate against known public keys: {:error, {:error, "acct:[email protected]"}} Mar 14 19:45:52 MatrixRock pleroma: request_id=FmxNG-wPPPOMM-IAKYFh [debug] Sent 400 in 3899ms Mar 14 19:45:52 MatrixRock pleroma: request_id=FmxNG-wPPPOMM-IAKYFh [info] Sent 400 in 3901ms

jk-na avatar Mar 14 '21 19:03 jk-na

I'm wondering if maybe this is related to HTTP signatures, I know that up until recently pixelfed hadn't implemented them and I didn't see my posts from of in my pleroma feed.. will try disabling them in a little while and see if it works

jk-na avatar Mar 15 '21 07:03 jk-na

I tried disabling HTTP signature on fetches and also Strict-Transport-Security to see if the error might vanish but still I'm seeing Could not validate against known public keys: {:error, {:error, "acct:[email protected]"}}

I'm not sure if it's related but, I wonder if perhaps an actor property is required for activity and/or object? It's kind of hard to parse a huge debug log but it does seem that successful requests followed by DB activity contain at least one actor. E.g.

"actor" => "https://mythago.space/users/ghost_bird"

Mar 15 08:48:38 MatrixRock pleroma: request_id=Fmx309xY_VeYvwoAAAoD [debug] Processing with Pleroma.Web.ActivityPub.ActivityPubController.inbox/2#012 Parameters: %{"@context" => ["https://www.w3.org/ns/activitystreams", %{"Emoji" => "toot:Emoji", "atomUri" => "ostatus:atomUri", "conversation" => "ostatus:conversation", "focalPoint" => %{"@container" => "@list", "@id" => "toot:focalPoint"}, "inReplyToAtomUri" => "ostatus:inReplyToAtomUri", "ostatus" => "http://ostatus.org#", "sensitive" => "as:sensitive", "toot" => "http://joinmastodon.org/ns#", "votersCount" => "toot:votersCount"}], "actor" => "https://mythago.space/users/ghost_bird", "cc" => ["https://www.w3.org/ns/activitystreams#Public", "https://weirder.earth/users/stitchandsew"], "id" => "https://mythago.space/users/ghost_bird/statuses/105892944907997357/activity", "object" => %{"atomUri" => "https://mythago.space/users/ghost_bird/statuses/105892944907997357", "attachment" => [], "attributedTo" => "https://mythago.space/users/ghost_bird", "cc" => ["https://www.w3.org/ns/activitystreams#Public", "https://weirder.earth/users/stitchandsew"], "content" => "<p><span class=\"h-card\"><a href=\"https://weirder.earth/@stitchandsew\" class=\"u-url mention\">@<span>stitchandsew</span></a></span> :heart_trans:</p>", "conversation" => "tag:weirder.earth,2021-03-15:objectId=22484257:objectType=Conversation", "id" => "https://mythago.space/users/ghost_bird/statuses/105892944907997357", "inReplyTo" => "https://weirder.earth/users/stitchandsew/statuses/105892938932311950", "inReplyToAtomUri" => "https://weirder.earth/users/stitchandsew/statuses/105892938932311950", "published" => "2021-03-15T08:48:29Z", "replies" => %{"first" => %{"items" => [], "next" => "https://mythago.space/users/ghost_bird/statuses/105892944907997357/replies?only_other_accounts=true&page=true", "partOf" => "https://mythago.space/users/ghost_bird/statuses/105892944907997357/replies", "type" => "CollectionPage"}, "id" => "https://mythago.space/users/ghost_bird/statuses/105892944907997357/replies", "type" => "Collection"}, "sensitive" => false, "summary" => nil, "tag" => [%{"href" => "https://weirder.earth/users/stitchandsew", "name" => "@[email protected]", "type" => "Mention"}, %{"icon" => %{"mediaType" => "image/png", "type" => "Image", "url" => "https://cdn.masto.host/mythagospace/custom_emojis/images/000/000/423/original/b1cca85cf0f76c57.png"}, "id" => "https://mythago.space/emojis/423", "name" => ":heart_trans:", "type" => "Emoji", "updated" => "2020-04-29T10:46:26Z"}], "to" => ["https://mythago.space/users/ghost_bird/followers"], "type" => "Note", "url" => "https://mythago.space/@ghost_bird/105892944907997357"}, "published" => "2021-03-15T08:48:29Z", "signature" => %{"created" => "2021-03-15T08:48:29Z", "creator" => "https://mythago.space/users/ghost_bird#main-key", "signatureValue" => "jyNKFbu5pgZky9lpuPHa5IIf0d1HIDmrtU8uCXbuy/TzPrFUrjyIgS3rVoKTnajl6pMEivDr8lh8AlwSBy4uD/IpCIW5PZqAyTjbQpDQhagc7doro+H7qhZW/EU0TL3uZ+sqIlC8HRIV4PbdnT6I59ke57S5d5BCGu+eOmhoI9UKKkVUZqrcIOuBBfFffUYH/35uLyPNfNWDObUWAHL2iT65Ay07RGLAoUmS1VZZS4Gf8GS4uv5LxmdsHW8/++nTajiJ9A/RT55J7Guppa2ZfgpvLFgKmNO0V3SjBFU9tYs8GXBXbsSSi0XpyrBFE4aa3xG4ho0hVoh8ThtMKR+6PQ==", "type" => "RsaSignature2017"}, "to" => ["https://mythago.space/users/ghost_bird/followers"], "type" => "Create"}#012 Pipelines: [:activitypub]

jk-na avatar Mar 15 '21 09:03 jk-na

Very possible! I tried re-sending with an actor just now and got an opaque 400 with body "error":

$ curl -v -H 'Content-Type: application/activity+json' https://social.nipponalba.scot/users/jk/inbox -d '{"@context": "https://www.w3.org/ns/activitystreams", "id": "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d880/#bridgy-fed-create", "nickname": "jk", "actor": {"icon": {"type": "Image", "url": "https://jk.nipponalba.scot/images/profile.jpg"}, "id": "https://fed.brid.gy/jk.nipponalba.scot", "image": {"type": "Image", "url": "https://jk.nipponalba.scot/images/profile.jpg"}, "name": "J K 🇯🇵🏴󠁧󠁢󠁳󠁣󠁴󠁿 | personal site", "preferredUsername": "jk.nipponalba.scot", "type": "Person", "url": "https://fed.brid.gy/r/https://jk.nipponalba.scot"}, "object": {"@context": "https://www.w3.org/ns/activitystreams", "attributedTo": [{"icon": {"type": "Image", "url": "https://jk.nipponalba.scot/images/profile.jpg"}, "id": "https://fed.brid.gy/jk.nipponalba.scot", "image": {"type": "Image", "url": "https://jk.nipponalba.scot/images/profile.jpg"}, "name": "J K 🇯🇵🏴󠁧󠁢󠁳󠁣󠁴󠁿 | personal site", "preferredUsername": "jk.nipponalba.scot", "type": "Person", "url": "https://fed.brid.gy/r/https://jk.nipponalba.scot"}], "cc": ["https://www.w3.org/ns/activitystreams#Public", "https://social.nipponalba.scot/users/jk", "https://social.nipponalba.scot/users/jk/followers"], "content": "<p>Test #2</p>", "id": "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d880/", "inReplyTo": "https://social.nipponalba.scot/objects/c341db0a-ad7e-406a-9b9f-07b575ce9f61", "name": "Test #2", "published": "11 Mar 2021 08:44 GMT", "tag": [{"href": "https://social.nipponalba.scot/users/jk", "type": "Mention"}, {"href": "https://social.nipponalba.scot/users/jk", "type": "Mention"}], "type": "Note", "url": "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d880/", "urls": [{"value": "https://jk.nipponalba.scot/response/6049d880/"}, {"value": "https://fed.brid.gy/"}]}, "type": "Update"}'
...
< HTTP/2 400 
* Connection #0 to host social.nipponalba.scot left intact
"error"
* Closing connection 0

Here's the activity I sent:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d880/#bridgy-fed-create",
  "nickname": "jk",
  "actor": {
    "icon": {
      "type": "Image",
      "url": "https://jk.nipponalba.scot/images/profile.jpg"
    },
    "id": "https://fed.brid.gy/jk.nipponalba.scot",
    "image": {
      "type": "Image",
      "url": "https://jk.nipponalba.scot/images/profile.jpg"
    },
    "name": "J K 🇯🇵🏴󠁧󠁢󠁳󠁣󠁴󠁿 | personal site",
    "preferredUsername": "jk.nipponalba.scot",
    "type": "Person",
    "url": "https://fed.brid.gy/r/https://jk.nipponalba.scot"
  },
  "object": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "attributedTo": [
      {
        "icon": {
          "type": "Image",
          "url": "https://jk.nipponalba.scot/images/profile.jpg"
        },
        "id": "https://fed.brid.gy/jk.nipponalba.scot",
        "image": {
          "type": "Image",
          "url": "https://jk.nipponalba.scot/images/profile.jpg"
        },
        "name": "J K 🇯🇵🏴󠁧󠁢󠁳󠁣󠁴󠁿 | personal site",
        "preferredUsername": "jk.nipponalba.scot",
        "type": "Person",
        "url": "https://fed.brid.gy/r/https://jk.nipponalba.scot"
      }
    ],
    "cc": [
      "https://www.w3.org/ns/activitystreams#Public",
      "https://social.nipponalba.scot/users/jk",
      "https://social.nipponalba.scot/users/jk/followers"
    ],
    "content": "<p>Test #2</p>",
    "id": "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d880/",
    "inReplyTo": "https://social.nipponalba.scot/objects/c341db0a-ad7e-406a-9b9f-07b575ce9f61",
    "name": "Test #2",
    "published": "11 Mar 2021 08:44 GMT",
    "tag": [
      {
        "href": "https://social.nipponalba.scot/users/jk",
        "type": "Mention"
      },
      {
        "href": "https://social.nipponalba.scot/users/jk",
        "type": "Mention"
      }
    ],
    "type": "Note",
    "url": "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d880/",
    "urls": [
      {
        "value": "https://jk.nipponalba.scot/response/6049d880/"
      },
      {
        "value": "https://fed.brid.gy/"
      }
    ]
  },
  "type": "Update"
}

snarfed avatar Mar 15 '21 21:03 snarfed

OK, so between 21:37:18 (my server time - about 20 minutes ago), the logs have 7 different requests for this (not sure if that correlates to seven attempts or pleroma retries)

The first three had an Internal Server error relating to parsing.

The subsequent four didn't have that error AND didn't have the validation error.

The first block is from one of the internal server error requests and second from one of the subsequent attempts:

Mar 15 21:37:18 MatrixRock pleroma: request_id=Fmyhxiyrx7Gx5CIAArmB [error] Internal server error: %Plug.Parsers.ParseError{exception: %Jason.DecodeError{data: "{\"@context\": \"https://www.w3.org/ns/activitystreams\", \"id\": \"https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d880/#bridgy-fed-create\", \"nickname\": \"jk\", \"actor\": [{\"icon\": [{\"type\": \"Image\", \"url\": \"https://jk.nipponalba.scot/images/profile.jpg\"}], \"id\": \"https://fed.brid.gy/jk.nipponalba.scot\", \"image\": [{\"type\": \"Image\", \"url\": \"https://jk.nipponalba.scot/images/profile.jpg\"}], \"name\": \"J K 🇯🇵🏴󠁧󠁢󠁳󠁣󠁴󠁿 | personal site\", \"preferredUsername\": \"jk.nipponalba.scot\", \"type\": \"Person\", \"url\": \"https://fed.brid.gy/r/https://jk.nipponalba.scot\"}, \"object\": {\"@context\": \"https://www.w3.org/ns/activitystreams\", \"attributedTo\": [{\"icon\": [{\"type\": \"Image\", \"url\": \"https://jk.nipponalba.scot/images/profile.jpg\"}], \"id\": \"https://fed.brid.gy/jk.nipponalba.scot\", \"image\": [{\"type\": \"Image\", \"url\": \"https://jk.nipponalba.scot/images/profile.jpg\"}], \"name\": \"J K 🇯🇵🏴󠁧󠁢󠁳󠁣󠁴󠁿 | personal site\", \"preferredUsername\": \"jk.nipponalba.scot\", \"type\": \"Person\", \"url\": \"https://fed.brid.gy/r/https://jk.nipponalba.scot\"}], \"cc\": [\"https://www.w3.org/ns/activitystreams#Public\", \"https://social.nipponalba.scot/users/jk\", \"https://social.nipponalba.scot/users/jk/followers\"], \"content\": \"<p>Test #2</p>\", \"id\": \"https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d880/\", \"inReplyTo\": \"https://social.nipponalba.scot/objects/c341db0a-ad7e-406a-9b9f-07b575ce9f61\", \"name\": \"Test #2\", \"published\": \"11 Mar 2021 08:44 GMT\", \"tag\": [{\"href\": \"https://social.nipponalba.scot/users/jk\", \"type\": \"Mention\"}, {\"href\": \"https://social.nipponalba.scot/users/jk\", \"type\": \"Mention\"}], \"type\": \"Note\", \"url\": \"https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d880/\", \"urls\": [{\"value\": \"https://jk.nipponalba.scot/response/6049d880/\"}, {\"value\": \"https://fed.brid.gy/\"}]}, \"type\": \"Update\"}", position: 594, token: nil}, plug_status: 400} Mar 15 21:37:18 MatrixRock pleroma: request_id=Fmyhxiyrx7Gx5CIAArmB [debug] Converted error Plug.Parsers.ParseError to 400 response

Mar 15 21:40:00 MatrixRock pleroma: request_id=Fmyh6804JypRUkMAArxh [debug] POST /users/jk/inbox Mar 15 21:40:00 MatrixRock pleroma: request_id=Fmyh6804JypRUkMAArxh [debug] Processing with Pleroma.Web.ActivityPub.ActivityPubController.inbox/2#012 Parameters: %{"@context" => "https://www.w3.org/ns/activitystreams", "actor" => %{"icon" => [%{"type" => "Image", "url" => "https://jk.nipponalba.scot/images/profile.jpg"}], "id" => "https://fed.brid.gy/jk.nipponalba.scot", "image" => [%{"type" => "Image", "url" => "https://jk.nipponalba.scot/images/profile.jpg"}], "name" => "J K 🇯🇵🏴󠁧󠁢󠁳󠁣󠁴󠁿 | personal site", "preferredUsername" => "jk.nipponalba.scot", "type" => "Person", "url" => "https://fed.brid.gy/r/https://jk.nipponalba.scot"}, "id" => "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d880/#bridgy-fed-create", "nickname" => "jk", "object" => %{"@context" => "https://www.w3.org/ns/activitystreams", "attributedTo" => [%{"icon" => [%{"type" => "Image", "url" => "https://jk.nipponalba.scot/images/profile.jpg"}], "id" => "https://fed.brid.gy/jk.nipponalba.scot", "image" => [%{"type" => "Image", "url" => "https://jk.nipponalba.scot/images/profile.jpg"}], "name" => "J K 🇯🇵🏴󠁧󠁢󠁳󠁣󠁴󠁿 | personal site", "preferredUsername" => "jk.nipponalba.scot", "type" => "Person", "url" => "https://fed.brid.gy/r/https://jk.nipponalba.scot"}], "cc" => ["https://www.w3.org/ns/activitystreams#Public", "https://social.nipponalba.scot/users/jk", "https://social.nipponalba.scot/users/jk/followers"], "content" => "<p>Test #2</p>", "id" => "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d880/", "inReplyTo" => "https://social.nipponalba.scot/objects/c341db0a-ad7e-406a-9b9f-07b575ce9f61", "name" => "Test #2", "published" => "11 Mar 2021 08:44 GMT", "tag" => [%{"href" => "https://social.nipponalba.scot/users/jk", "type" => "Mention"}, %{"href" => "https://social.nipponalba.scot/users/jk", "type" => "Mention"}], "type" => "Note", "url" => "https://fed.brid.gy/r/https://jk.nipponalba.scot/response/6049d880/", "urls" => [%{"value" => "https://jk.nipponalba.scot/response/6049d880/"}, %{"value" => "https://fed.brid.gy/"}]}, "type" => "Update"}#012 Pipelines: [:activitypub] Mar 15 21:40:00 MatrixRock pleroma: request_id=Fmyh6804JypRUkMAArxh [debug] No signature header! Mar 15 21:40:00 MatrixRock pleroma: request_id=Fmyh6804JypRUkMAArxh [debug] Sent 400 in 21ms Mar 15 21:40:00 MatrixRock pleroma: request_id=Fmyh6804JypRUkMAArxh [info] Sent 400 in 28ms

From the latter one, we now have a no signature header error.

jk-na avatar Mar 15 '21 22:03 jk-na

.. oh, I think I see some database activity in relation to one of the requests..

edit: not write activities though, seems like a query against the users DB for https://fed.brid.gy/jk.nipponalba.scot

jk-na avatar Mar 15 '21 22:03 jk-na

Ah, yes, I didn't send an HTTP sig with these since they were manual, and you said you'd disabled sig checking. If it looks like that's the blocker, I can make Bridgy Fed add actors like this and we can try again for real.

snarfed avatar Mar 15 '21 22:03 snarfed

I had re-enabled it but can disable again when we're ready to try again, if required.

jk-na avatar Mar 15 '21 22:03 jk-na

Hi - just wondering if anymore progress was made on this?

mark4409 avatar Nov 18 '21 18:11 mark4409

@mark4409 thanks for asking! I haven't looked into it much more myself, but if you're familiar with Pleroma, feel free to try it out against a recent Pleroma version, see how it goes, and document the results. Bridgy Fed and Pleroma both support AP, so I suspect we're close!

snarfed avatar Nov 18 '21 20:11 snarfed

Does brid.gy support Pleroma too?, or would I need Bridgy Fed?

mark4409 avatar Nov 18 '21 20:11 mark4409

Yes! Unofficially at least, by pretending it's Mastodon, since the API is compatible-ish. Background: https://github.com/snarfed/bridgy/search?q=pleroma&type=issues

snarfed avatar Nov 18 '21 20:11 snarfed

Well I've not tested this but I can at least confirm that brid.gy does work with Pleroma via webmentions.

mark4409 avatar Nov 23 '21 08:11 mark4409