Mit Solid nach Mastodon posten, geht das?

Ein Blogpost bei Mastodon beschreibt, wie man quasi „manuell“ über das ActivityPub Protokoll auf einen Mastodon-Toot antworten kann.

We want to send a Mastodon user a message from our own, non-Mastodon server.

Ich dachte mir: Das muss doch auch mit einem Solid Pod klappen. Angelehnt an den Originalartikel ist unser Ziel in diesem Artikel daher:

Wir wollen einem Mastodon User eine Nachricht von unserem Solid Pod senden.

Los geht’s! 🚀

Der „Actor“

Idealerweise würden wir natürlich mit unserer Solid Web ID tätig werden, da ich aber im ersten Schritt möglichst wenig vom Originalartikel abweichen möchte (um mögliche Probleme zu vermeiden), habe ich mir wie dort beschrieben ein Schlüsselpaar angelegt und das fertige JSON-LD für den Actor auf meinem Solid Pod veröffentlicht. Leider ist der Data Browser Stand heute nicht in der Lage die Rohdaten aufzubereiten. Ein klassisches curl zeigt aber, dass es geklappt hat:

> curl https://angelo.veltens.org/profile/actor

{
  "@context": [
  "https://www.w3.org/ns/activitystreams",
  "https://w3id.org/security/v1"
  ],
  "id": "https://angelo.veltens.org/profile/actor",
  "type": "Person",
  "preferredUsername": "angelo",
  "inbox": "https://angelo.veltens.org/inbox",
  "icon": {
    "type": "Image",
    "mediaType": "image/jpeg",
    "url": "https://angelo.veltens.org/profile/me.jpg"
  },
  "publicKey": {
  "id": "https://angelo.veltens.org/profile/actor#main-key",
  "owner": "https://angelo.veltens.org/profile/actor",
  "publicKeyPem": "-----BEGIN PUBLIC KEY..."
}
}

Ich hab auch gleich noch ein Profilbild (icon) dazu gepackt, damit es etwas persönlicher aussieht und auch meine normale Solid Inbox verlinkt.

Webfinger

Auch die statische Webfinger Datei ist leicht platziert, da der Node Solid Server einen .well-known Ordner von Haus aus mitbringt. Nun lässt sich das Profil schon über die Mastodon-Suchleiste auffinden 🎉

Der auf dem Solid-Pod platzierte Actor ist über Mastodon auffindbar

So weit so gut!

Die Nachricht

Auch die Nachricht verfasse ich wieder als JSON-LD und lege sie in meinem Pod ab:

{
  "@context": "https://www.w3.org/ns/activitystreams",

  "id": "https://angelo.veltens.org/public/toots/hello-solid#create",
  "type": "Create",
  "actor": "https://angelo.veltens.org/profile/actor",

  "object": {
    "id": "https://angelo.veltens.org/public/toots/hello-solid#note",
    "type": "Note",
    "published": "2020-07-12T20:26:27+0200",
    "attributedTo": "https://angelo.veltens.org/profile/actor",
    "inReplyTo": "https://mastodon.social/@Gargron/100254678717223630",
    "content": "<p>Hello from Solid</p>",
    "to": "https://www.w3.org/ns/activitystreams#Public"
  }
}

Für den folgenden Schritt, brauchen wir die Datei aber auch auf dem lokalen Rechner.

Das Skript

Für die Erzeugung einer gültigen HTTP-Signature brauchen wir ein Skript, wie im Originalpost bereits beschrieben. Dort müssen wir noch unsere eigene keyId hinterlegen und ggf. den Namen der JSON-Datei an unsere anpassen, aber dann kann es schon losgehen.

Das Skript gibt leider keine Auskunft, ob es geklappt hat. Bei mir war es so, dass mein Post partout nicht bei Mastodon erscheinen wollte. Ich habe das Skript daher erstmal so umgeschrieben, dass es ein curl Kommando erzeugt, das ich manuell ausführen und besser debuggen kann:

Trotzdem hat die Antwort auf den Post von @Gargon erstmal nicht funktioniert. Der Server antwortete mit 202 (Accepted), aber die Nachricht erschien immer noch nicht! 😒

Der Durchbruch ⛏

Im SocialHub Forum gibt es ein paar Spekulationen woran es liegen könnte. Der Node Solid Server geht z.B. nicht korrekt mit dem Mime-Type application/activity+json um, und versteht auch JSON-LD Profile nicht korrekt.

Letztlich habe ich es aber doch noch geschafft einen Post abzusetzen, der auch auf Mastodon sichtbar wird. Bei mastodon.online hat es funktioniert. Dort hatte ich mir zuvor einen nativen Account angelegt, um die Webfinger-Suche zu testen. Auf einen Post dieses Accounts konnte ich dann auch mit meinem Solid-Actor antworten. Möglicherweise liegt es daran, dass die mastodon.online Instanz den Actor durch die vorherige Suche schon kannte, aber sicher weiß ich es nicht.

Hier ist jedenfalls das Ergebnis:

Bonus: Inbox-Nachrichten

Bereits kurz nachdem ich erstmals meinen Actor auf mastodon.online suchte, fiel mir auf, dass dieser Server seitdem Änderungen in meine Inbox kommunizierte.

Warum also nicht mal eine Direktnachricht ausprobieren? 💌

Mit dem Mastodon Account schreibe ich meinen Solid-Actor an

Die Nachricht konnte problemlos abgesetzt werden und erschien kurz darauf in der Inbox meines Solid-Pods. Da der Data Browser nicht in der Lage ist JSON-LD Daten anzuzeigen, habe ich die Daten kurzerhand manuell nach Turtle konvertiert:

Nach der manuellen Konvertierung kann auch der Data Browser die Daten anzeigen.

Fazit

Es funktioniert! Ein Solid Pod eignet sich grundsätzlich, um einen ActivityPub Actor und Posts zu beherbergen. Die LDP Inbox ist in der Lage Nachrichten von Mastodon zu empfangen. Hier und da hakt es noch und das alles ist natürlich weit entfernt von einer praktischen Benutzbarkeit. Es zeigt aber, dass Solid und ActivityPub sich technisch gut ergänzen. Einen Solid Server kompatibel zu gestalten dürfte keine große Herausforderung sein. Wenn die Daten dann auch noch hübsch dargestellt werden, bietet ein Solid Pod ein Tor zum Fediverse.

Schreibe einen Kommentar