ActivityPub

Diese Seite unterstützt nun eine Untermenge von ActivityPub…

…also den Teil, der sich statisch implementieren lässt. Grundsätzlich nicht wirklich schwer, zu mal es auch einige Artikel zu dem Thema gibt:

Umsetzung

Die Seite stellt drei Dateien bereit:

  • /.well-known/webfinger – statische JRD-Datei, die acct:cmahnke@christianmahnke.de auflöst und auf den Actor verweist
  • /@cmahnke.json – ein statisches ActivityStreams-Person-Objekt, das als Profil dient und auf den echten Mastodon-Account unter openbiblio.social verlinkt
  • /outbox.json – eine OrderedCollection, die die Blogartikel als Create/Note-Objekte auflistet

Umgesetzt ist das über eigene Output-Formates in Hugo (activity-pub-actor und activity-pub-outbox mit dem Medientyp application/activity+json), die Dateien werden also direkt beim Build erzeugt.

Grenzen

Da die Seite rein statisch ausgeliefert wird, fehlt jeder serverseitige Teil des Protokolls: Es gibt kein inbox-Endpunkt, daher sind Folgen, Erwähnungen, Antworten und Löschen nicht möglich. Der Actor dient also nur zur Auffindbarkeit und verweist auf den echten Mastodon-Account. Auch werden die Beiträge aus der Outbox nicht automatisch in Mastodon-Timelines nachgeladen – dort bleiben die Artikel über den echten Account sichtbar.

Hinzu kommt die Auslieferung durch GitHub Pages: Die Content-Types ergeben sich dort allein aus der Dateiendung gemäß einer festen MIME-Typ-Liste, eigene Header lassen sich nicht setzen. Dadurch wird /.well-known/webfinger als application/octet-stream ausgeliefert (statt application/jrd+json), die beiden JSON-Dateien als application/json (statt application/activity+json). Mastodon akzeptiert seit der Behebung von GHSA-jhrq-qvrm-qr36 beim Abruf von Actoren nur noch letztere Medientypen, sodass sich der Account von dort derzeit nicht auflösen lässt. Aber Webfinger-Auflösung selbst funktioniert…

Tests

Die Webfinger-Auflösung lässt sich unter https://webfinger.net/lookup/ prüfen. Auf der Kommandozeile bietet sich der in Rust geschriebene webfinger-cli an: cargo install webfinger-cli --locked, anschließend webfinger acct:cmahnke@christianmahnke.de.