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:----h/nB5upked1Ue5npJYmQgANILggP6NOsUqc4FA7eAaYxCN3S+idwlhfqLXhlBPFK9ByuS10ltGTnGbcmkAZJyqYHZ1B5VV+YGX1jGgpbU/gqf/iEaLntHvhUd0UbUVXsSj33Z3Z8IH0FFgvR9LybjpusoJeEdQvgAWgEy5SVhoyfbWisbvY0Pjlt6/rxy9Xmd3tkV9yigjYhvGhUzfZEGhDTEFFEHsCHRh61lq8WfND/xclK4mqB4qvnJWAJJLBgi0oDYLsITJAOyv2IEFs7MdB+TW5V14v5j+ugUm51n0gqkWkecDS1vsvGKq1CHrqX1srBzyGwvrKwbGArVpuISJGiKq6UrtpdCTnJLb9LEOG6qKaiQHme5L0qAe78fAyYm4ufoWfYWryY/7f568mrNYlyvIL05GCCu3LNPTnvWzi8ojvn7FfjhrAU8FMpFbI1T6K9/9kcQ7S2l5N2Lajan4jCAa32p23osf32VfB5+PoXYwilKx7erzff4TdEQ9K0yQnBrhbfoZSF1MwWkRFEJUT4wWdfAnyjgtr70eZFDQ7epPLwn++5/e2eeAZ5bFUyyZ33a/0v75VnlUaCKKtL5zCh8lpbYi4y92vhQGlfY5bg+vsC9rgHnm1lFL4p3FZyNUut1ytchwugYJEH2/rBaX6GiiEt5zcm5jQ7wQvfRYI=----ATTACHMENT:----MzY4MTQ2NTY4NDA2NDgxOCAyNjc5OTcyMTM3OTA3MjA4IDc2NTgxODQ1ODAxMDQzMTk=