Tfe

Ongi etorri tfe-ren webgunera...

2024-09-19-ean

Mastodon eta activitiy pub protokolako sarrera

0 - Sarrera

Mastodon Activity Pub protokoloan oinarritutako sare sozial bat da.
Protokoloa libre denez, nola erabil dezakegun dokumentuta dago eta errazagoa da zure inplementazio propioa egitea.
Nire kasuan,  hemen agertuko den kodigoa PHP izango da, baina edozein programazio-lengoia erabil dezakezue.

1 - Sinadura sortzeko artxiboak

Bidaltzen ditugun datuak guretik etorzen direla ziurtatzeko, sinadura bat bidaltzen dugu aldi berean.
Sinadura hori guk bakarrik sor dezakegu, eta jasotzaileak mezua jasotzean egiaztatuko du sinadura egokia dela.

Sinadura bat sortzeko lehen etapa enkriptazio-gakoak sortzea da:

$ openssl genrsa -out private.pem 2048
$ openssl rsa -in private.pem -outform PEM -pubout -out public.pem

Komando hori 2 artxibo sortuko ditu, eta artxibo horiek erabiliko ditugu sinadura egiteko.

1 - Bilaketak eta erantzunak

Edozein mastodon intantziatik bila dezakegu edozein kontua. 
Adibidez, nire kasuan @tfe@mastodon.eus kontua daukat, baina aurki dezaket mastodon.social instantziatik.
Hori lortzeko,  serbidoreak "/.well-known/webfinger" webgunea (API) aztertuko du, bilatutako kontua gehituz.

Adibidez:

https://mastodon.eus/.well-known/webfinger?resource=acct:tfe@mastodon.eus

Erantzunean oinarrizko informazio agertzen da:

{
  "subject": "acct:tfe@mastodon.eus",
  "links": [
    {
      "rel": "self",
      "type": "application/activity+json",
      "href": "https://mastodon.eus/users/tfe"
    },
    {
      "rel": "http://webfinger.net/rel/avatar",
      "type": "image/jpeg",
      "href": "https://mastodon.eus/system/accounts/avatars/109/370/411/717/837/024/original/da48e6dbd7f018c9.jpg"
    }
  ]
}

PHP inplementazio simple bat daukazue hemen.

2 - Kontuaren informazioa

Ikusi dugun bezala, bilaketa erantzutean, serbidoreak erantzuten du oinarrizko informazioa. Kontu baten informazio gehiago lortzeko, helbide bat daukagu: 
Kontuaren informazio guztia agertzen da bertan. Adibidez: https://mastodon.eus/users/tfe
Baina esteka hori nabigatzaile batekin bisitatzen badugu, ez dugu ezer ikusiko. Informazioa lortzeko, HTTP Header "Accept: application/json" ezarri behar dugu.
Adibidez, terminal leiho batean:

$ curl https://mastodon.eus/users/tfe -H "Accept: application/json"

Edo, nire inplementazioan (partiturak.eus-en) ikusgai dago: partiturak.eus-en kontuaren informazioa.

Jasotzen dugun informazioa:

{
  "id": "https://mastodon.eus/users/tfe",
  "type": "Person",
  "following": "https://mastodon.eus/users/tfe/following",
  "followers": "https://mastodon.eus/users/tfe/followers",
  "inbox": "https://mastodon.eus/users/tfe/inbox",
  "outbox": "https://mastodon.eus/users/tfe/outbox",
  "preferredUsername": "tfe",
  "name": "Tfe :belarriprest:",
.....
}

Informazio garrantzitsuak agertzen dira:

  • id: nor da
  • following eta followers: URL bat informazioa lortzeko
  • inbox eta outbox: URL bat informazioa bidaltzeko edo jasotzeko (erabiliko dugu hori hurrengo atalean)
  • publicKey: informazio horrekin jakingo dugu zein da kontuaren gakoa

publicKey beti hasten da "----BEGIN PUBLIC KEY-----"-ekin eta bukatzen da "----END PUBLIC KEY-----"-ekin.
Adibide bet aurki dezakegu hemen: https://partiturak.eus/activityPub/users/partiturak

3 - Jarraitu eta onartu

Erabiltzaileak "Jarraitu" botoian click egiten du bitartean, eskaera bat jasotzen du serbidoreak.
Erabiltzaileak "Follow" eskaera egiten du "inbox" orrian, eta json datuak horiekin:

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://mastodon.eus/058fd540-1fd9-4b8b-aad4-ec051ace5421",
  "type": "Follow",
  "actor": "https://mastodon.eus/users/tfe",
  "object": "https://partiturak.eus/activityPub/users/12345"
}

Hemen:

  • id: esteka berezi bat
  • type: Follow
  • actor: Click egiten duen kontuaren esteka
  • object: Nork jarraitu nahi dugun


Mezu mota hori jasotzean, serbidoreak galdetuko du nor da "actor"-ea, beren "inbox" esteka jakiteko:
Adibidez:

$ curl https://mastodon.eus/users/tfe -H "Accept: application/json"

Eta jarraian bidaliko diot onarpen mezua, "inbox" (https://mastodon.eus/users/tfe/inbox) helbidean.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "summary": "partiturak accepted a follow",
  "type": "Accept",
  "actor": "https://mastodon.eus/users/tfe",
  "object": "https://partiturak.eus/activityPub/users/12345"
}

Baina mezua hori bidaltzeko, gure datuak izenpetu behar  ditugu.

4 - Mezuak bidali sinadura batekin

Esan dugun bezala,  mezu bat bidali behar dugu bakoitzean sinadura bat sortuko dugu eta mezuarekin bidaliko dugu.

2_sinadura.php estekan aurkituko duzue php implementazio bat.

$headers = [
            'accept: application/activity+json, text/json',
            'host: '.$inboxUrl['host'],
            'date: '.$date,
            'digest: '.$digest,
            'signature: '.$signatureHeader,
            'content-type: application/activity+json',
        ];
$ch=curl_init($actorInbox);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 1);

Kodigo honekin edozein instantziari bidal diezaizkiokegu  mezuak.

 

 

 

 

 

Tags: Web PHP Projects