ActivityPub
Friday 9 December 2022

The following is a research for the minimum requirement to have Xlog allow following the user from mastodon

  • From any account on a mastodon instance tried to search for @emad@whoispopulartoday.com the logs were the following
W, [2022-11-28T02:24:29.325631 #9]  WARN -- : Exception (ActiveRecord::RecordNotFound) while processing https://whoispopulartoday.com/.well-known/webfinger?resource=acct:emad@whoispopulartoday.com for http.rb/5.1.0 (Mastodon/4.0.2; +https://toot.community/)
W, [2022-11-28T02:24:29.482088 #13]  WARN -- : Exception (ActiveRecord::RecordNotFound) while processing https://whoispopulartoday.com/.well-known/host-meta for http.rb/5.1.0 (Mastodon/4.0.2; +https://toot.community/)
 1{
 2  "subject": "acct:emad__elsaid@toot.community",
 3  "aliases": [
 4    "https://toot.community/@emad__elsaid",
 5    "https://toot.community/users/emad__elsaid"
 6  ],
 7  "links": [
 8    {
 9      "rel": "http://webfinger.net/rel/profile-page",
10      "type": "text/html",
11      "href": "https://toot.community/@emad__elsaid"
12    },
13    {
14      "rel": "self",
15      "type": "application/activity+json",
16      "href": "https://toot.community/users/emad__elsaid"
17    },
18    {
19      "rel": "http://ostatus.org/schema/1.0/subscribe",
20      "template": "https://toot.community/authorize_interaction?uri={uri}"
21    }
22  ]
23}
1<?xml version="1.0" encoding="UTF-8"?>
2<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
3  <Link rel="lrdd" template="https://toot.community/.well-known/webfinger?resource={uri}"/>
4</XRD>
  • Added these files to xlog repo on github https://github.com/emad-elsaid…
  • this repo deploys to xlog.emadelsaid.com
  • trying the follow @xlog@xlog.emadelsaid.com still didn’t show anything. I thought maybe it crawls /@xlog and can’t find anyting. my profile on toot.community has a link tag. maybe that’s it
1<link href='https://toot.community/users/emad__elsaid' rel='alternate' type='application/activity+json'>
  • Crawling the link curl -H"Accept: application/activity+json" https://toot.community/users/emad__elsaid returns this json. which is an activity streams person https://www.w3.org/TR/activity…
  1{
  2  "@context": [
  3    "https://www.w3.org/ns/activitystreams",
  4    "https://w3id.org/security/v1",
  5    {
  6      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
  7      "toot": "http://joinmastodon.org/ns#",
  8      "featured": {
  9        "@id": "toot:featured",
 10        "@type": "@id"
 11      },
 12      "featuredTags": {
 13        "@id": "toot:featuredTags",
 14        "@type": "@id"
 15      },
 16      "alsoKnownAs": {
 17        "@id": "as:alsoKnownAs",
 18        "@type": "@id"
 19      },
 20      "movedTo": {
 21        "@id": "as:movedTo",
 22        "@type": "@id"
 23      },
 24      "schema": "http://schema.org#",
 25      "PropertyValue": "schema:PropertyValue",
 26      "value": "schema:value",
 27      "discoverable": "toot:discoverable",
 28      "Device": "toot:Device",
 29      "Ed25519Signature": "toot:Ed25519Signature",
 30      "Ed25519Key": "toot:Ed25519Key",
 31      "Curve25519Key": "toot:Curve25519Key",
 32      "EncryptedMessage": "toot:EncryptedMessage",
 33      "publicKeyBase64": "toot:publicKeyBase64",
 34      "deviceId": "toot:deviceId",
 35      "claim": {
 36        "@type": "@id",
 37        "@id": "toot:claim"
 38      },
 39      "fingerprintKey": {
 40        "@type": "@id",
 41        "@id": "toot:fingerprintKey"
 42      },
 43      "identityKey": {
 44        "@type": "@id",
 45        "@id": "toot:identityKey"
 46      },
 47      "devices": {
 48        "@type": "@id",
 49        "@id": "toot:devices"
 50      },
 51      "messageFranking": "toot:messageFranking",
 52      "messageType": "toot:messageType",
 53      "cipherText": "toot:cipherText",
 54      "suspended": "toot:suspended",
 55      "Hashtag": "as:Hashtag",
 56      "focalPoint": {
 57        "@container": "@list",
 58        "@id": "toot:focalPoint"
 59      }
 60    }
 61  ],
 62  "id": "https://toot.community/users/emad__elsaid",
 63  "type": "Person",
 64  "following": "https://toot.community/users/emad__elsaid/following",
 65  "followers": "https://toot.community/users/emad__elsaid/followers",
 66  "inbox": "https://toot.community/users/emad__elsaid/inbox",
 67  "outbox": "https://toot.community/users/emad__elsaid/outbox",
 68  "featured": "https://toot.community/users/emad__elsaid/collections/featured",
 69  "featuredTags": "https://toot.community/users/emad__elsaid/collections/tags",
 70  "preferredUsername": "emad__elsaid",
 71  "name": "emad__elsaid",
 72  "summary": "<p>A Software Engineer <a href=\"https://toot.community/tags/Ruby\" class=\"mention hashtag\" rel=\"tag\">#<span>Ruby</span></a> <a href=\"https://toot.community/tags/Golang\" class=\"mention hashtag\" rel=\"tag\">#<span>Golang</span></a><br />🇪🇬 Egyptian 📷 Youtuber 🎮 Casual gamer and 🚀 Sci-Fi addict<br />My opinions are my own</p>",
 73  "url": "https://toot.community/@emad__elsaid",
 74  "manuallyApprovesFollowers": false,
 75  "discoverable": false,
 76  "published": "2022-11-05T00:00:00Z",
 77  "devices": "https://toot.community/users/emad__elsaid/collections/devices",
 78  "publicKey": {
 79    "id": "https://toot.community/users/emad__elsaid#main-key",
 80    "owner": "https://toot.community/users/emad__elsaid",
 81    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzde2MpFVF2HpkNBzvC92\njwEx4T7BBqUULLj37sTkUj3j87shXNBq03GLLjYmTewtVRlePvQOUEvFyNljNYdT\nZjhhad2lKEGTb4mYhCNtZBqx456Lo+8RiBY/JQTwmqtfh6CLZGZ4jzv2i3W9tv5e\nU7qV8CUO+LALWD/QyIE+WiT4iZ50gc9EPD3YG0wkREDH0wmmoYbifRekAMBZyEad\n6W7VpzjDe7gJug0fOllgfwY2aCN73OBLga6Gj1cJI+j4qxG66OdFeGGDRrZU2p0t\nMJW3zfdBEiPGwJ510P5Yieb0WeAquGcsukPbZsPD7a+bm7Bk9Uk7craKUFnR98wV\n1wIDAQAB\n-----END PUBLIC KEY-----\n"
 82  },
 83  "tag": [
 84    {
 85      "type": "Hashtag",
 86      "href": "https://toot.community/tags/golang",
 87      "name": "#golang"
 88    },
 89    {
 90      "type": "Hashtag",
 91      "href": "https://toot.community/tags/ruby",
 92      "name": "#ruby"
 93    }
 94  ],
 95  "attachment": [],
 96  "endpoints": {
 97    "sharedInbox": "https://toot.community/inbox"
 98  },
 99  "icon": {
100    "type": "Image",
101    "mediaType": "image/jpeg",
102    "url": "https://files.toot.community/static/accounts/avatars/109/293/903/126/839/684/original/2e879ecd79c7238c.jpg"
103  },
104  "image": {
105    "type": "Image",
106    "mediaType": "image/jpeg",
107    "url": "https://files.toot.community/static/accounts/headers/109/293/903/126/839/684/original/96510da372657af0.jpg"
108  }
109}
  • Added the file after cleanup to github repo https://github.com/emad-elsaid…
  • Still nothing
  • I checked the code and it hits host-meta only if there is a problem fetching webfinger so removing host-meta shouldn’t be a problem
  • used ngrok locally and wrote an extension that handle these two files instead of static files and it worked

  • clicking the item shows the profile

Resources

Backlinks