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:----dmGtNYUmeNEiCO3nxPX/BEI7Y88Pvpu1gK+TqnnK3p24wj7/2jt/hnTkd/AnXUuTWCcDhtKujySvtyEBzMVGZIdvoL4auf6W8I5SXJsExVcgUXJJI0Acpp4ZRAUuQK6QA0rhDaz/zWQsKCVXABkWGVAKXtov4TZSr7337f1Wtkiue3vuUOuVgyILv5BnROtXvZupWqBqTpa960sd083V+HVIq4Aaq7QPvzPmWbjLAENB+U6SpeRZe5Rz+itn2neaENTmGpPbIPZugaYgLjVRnUOIcb5COafFRFBtMKT16dPcEeBoujmYTfJBdnFyahuStN85KQtqYHClFH8igtTt1pqvPypYGXDgCiJ4MbNGO5xKe/Y7QVHhhRVnxe6o6qolUXf8zBrRaZaW1DY7D+jQzGqETduhJoczkrU3n5w6uFAvAV+ZtWLQaKYkiOwt8dg6y9geDjzbFuorCQoJNs20YSVKFdTqVGVyx5fdf1xkmdnwilN+JyWwOQAlbMIovt2zQolI9EnDjl/nJlt07vGodCQ/y1KYnOypmjJsBQrWg9TmRAWBBxr1FKPMltAlZGzlD3pae7B23GsSZka4XE9NuyKKqHU2TZaDMUN7YFyqiMoTJ1vLUs5RX5te98+LQfpNaykbhg2acXdbAG6ekIPH4LzUur+ei74dXXNsGNZV+EM=----ATTACHMENT:----NDA1MjA0ODAzNjM3NzY0OSA0NzUwMTI4MzEzNzE4Mjk1IDg1NDgxNDc4MzgxMjE2MjM=