. * * @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); } // Validate Object if (!is_string($data->object)) { ActivityPubReturn::error("Invalid Object object, URL expected."); } // Get valid Object profile try { $object_profile = new Activitypub_explorer; $object_profile = $object_profile->lookup($data->object)[0]; } catch (Exception $e) { ActivityPubReturn::error("Invalid Object Actor URL.", 404); } try { if (!Subscription::exists($actor_profile, $object_profile)) { Subscription::start($actor_profile, $object_profile); common_debug('ActivityPubPlugin: Accepted Follow request from '.$data->actor.' to '.$data->object); ActivityPubReturn::answer(Activitypub_accept::accept_to_array(Activitypub_follow::follow_to_array($data->actor, $data->object)), 202); } else { common_debug('ActivityPubPlugin: Received a repeated Follow request from '.$data->actor.' to '.$data->object); ActivityPubReturn::error("Already following.", 409); } } catch (Exception $e) { common_debug('ActivityPubPlugin: An error ocurred processing Follow request from '.$data->actor.' to '.$data->object); ActivityPubReturn::error("Invalid Object Actor URL.", 404); }