. * * @category Plugin * @package GNUsocial * @author Diogo Cordeiro * @author Daniel Supernault * @copyright 2018 Free Software Foundation http://fsf.org * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link https://www.gnu.org/software/social/ */ if (!defined ('GNUSOCIAL')) { exit (1); } /** * ActivityPub's own Postman * * Standard workflow expects that we send an Explorer to find out destinataries' * inbox address. Then we send our postman to deliver whatever we want to send them. * * @category Plugin * @package GNUsocial * @author Diogo Cordeiro * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://www.gnu.org/software/social/ */ class Activitypub_postman { private $actor; private $to = array (); private $client; private $headers; /** * Create a postman to deliver something to someone * * @param Activitypub_profile $to array of destinataries */ public function __construct ($from, $to) { $this->actor = $from; $this->to = $to; $this->headers = array(); $this->headers[] = 'Accept: application/ld+json; profile="https://www.w3.org/ns/activitystreams"'; $this->headers[] = 'User-Agent: GNUSocialBot v0.1 - https://gnu.io/social'; } /** * Send a follow notification to remote instance */ public function follow () { $this->client = new HTTPClient (); $data = array ("@context" => "https://www.w3.org/ns/activitystreams", "type" => "Follow", "actor" => $this->actor->getUrl (), "object" => $this->to[0]->getUrl ()); $this->client->setBody (json_encode ($data)); $response = $this->client->post ($this->to[0]->getInbox (), $this->headers); } /** * Send a Undo Follow notification to remote instance */ public function undo_follow () { $this->client = new HTTPClient (); $data = array ("@context" => "https://www.w3.org/ns/activitystreams", "type" => "Undo", "actor" => $this->actor->getUrl (), "object" => array ( "type" => "Follow", "object" => $this->to[0]->getUrl () ) ); $this->client->setBody (json_encode ($data)); $response = $this->client->post ($this->to[0]->getInbox (), $this->headers); } }