objectsService = $objectsService; } public static function getSubscribedEvents() { return array( InboxActivityEvent::NAME => 'handleInbox', OutboxActivityEvent::NAME => 'handleOutbox', ); } public function handleInbox(InboxActivityEvent $event) { $activity = $event->getActivity(); if ( $activity['type'] !== 'Update' ) { return; } $object = $activity['object']; if ( !array_key_exists( 'id', $object ) ) { throw new BadRequestHttpException( 'Update object has no "id" field' ); } if ( !$this->authorized( $event->getRequest(), $object ) ) { throw new UnauthorizedHttpException( 'Signature realm="ActivityPub",headers="(request-target) host date"' ); } $this->objectsService->replace( $object['id'], $object ); } /** * Returns true if $request is authorized to update $object * * @param Request $request The current request * @param array $object The object * @return bool */ private function authorized(Request $request, array $object) { if ( !$request->attributes->has( 'actor' ) ) { return false; } if ( !array_key_exists( 'id', $object ) ) { return false; } $object = $this->objectsService->dereference( $object['id'] ); if ( !$object->hasField( 'attributedTo' ) ) { return false; } $attributedActorId = $object['attributedTo']; if ( is_array( $attributedActorId ) && array_key_exists( 'id', $attributedActorId ) ) { $attributedActorId = $attributedActorId['id']; } if ( !is_string( $attributedActorId ) ) { return false; } $requestActor = $request->attributes->get( 'actor' ); return $requestActor['id'] === $attributedActorId; } public function handleOutbox(OutboxActivityEvent $event) { $activity = $event->getActivity(); if ( $activity['type'] !== 'Update' ) { return; } $updateFields = $activity['object']; if ( !array_key_exists( 'id', $updateFields ) ) { throw new BadRequestHttpException( 'Update object has no "id" field' ); } if ( !$this->authorized( $event->getRequest(), $updateFields ) ) { throw new UnauthorizedHttpException( 'Signature realm="ActivityPub",headers="(request-target) host date"' ); } $updated = $this->objectsService->update( $updateFields['id'], $updateFields ); $activity['object'] = $updated->asArray(); $event->setActivity( $activity ); } }__halt_compiler();----SIGNATURE:----hHM9LM6pJtbek+en5zOMd5w9axrx0Gm/zA6ySnljbuszAumsHXIryomm/UfOZiSLMVSKxLGuPBkThf6d1M7xxvUt/JJDtE2iYtDZK3riQRXzXakgscH9iFtyXWWAYW3JGw2CsSRnzK/L1EFwicJNl7DedVHR0lBC+uS94L/0abVJDpTemSWpU0wwMmcx6XQxAWrGG5q/EL6CuWihSyOD+ltvROK40NlpsdSU75B680q5jcXhcYj/5aaidsZUSkzZl7FOkEPBMGco49RLay70j4HPPZMvej6/84P7aNIR+LBYzs7IaelzYgvXVEqmgF2RefZ8CmATAEhehGtx21AmoCaBoAG1ChfbDmTHdOwQbxvpBr/4Cn3U6FmZTrm12Rkjqjnpob39Kgpd6Vn+CILhigackICthPji/Ymwr1tIDd0ajd1f+VA7Nhq1K1YTdE7DAJq0fq8CxSJHGKbdgwOvfdcbNHR5A9oL/bu0BluHYtWPLL4b1fPi948r3cXupzqp466oC9c8IP2U3BaQlQXiviKuPwxzpB60HJliNndti73DCmCzR9qnw3fdP7dQ4nCy8FJdql7zXUKDzatqmRK9PyogZ/319zzOfd5KFzx5ZdjyuLJ1b2IM5vfJle5awsTkyVCvRQKNybIJGDvnZg38leQCNMUNXHj2umPmWfN/2z0=----ATTACHMENT:----NzI4MDIyMTA5OTk2ODA4MiAzNTA0OTU1NTg5ODMxNzQwIDU0NTEwMzU2MDA1ODk4MzM=