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:----K9nIKwnRPRs/aOCcQ3anLqY9IJhlAaZjsdDWfggFYliI3cb9bpzTTfIw05vrPizEMnZfEgBH+GG7b92OpP0i+sq7kgHfewHPpR7Y81UXmRhGMCPBAqT8LmUB9CL1Bfy3ksOYYc+NuICvos1FkH0u5NovL0TJsqxTCY0b9ucC8sL3lQnfswcfEjSbdvbDFXSR9j9iY7Dj/hqzDV1wm6B7YacNqvNGOB0A72OF26+Gzw8Hpp9W/uqo/Y7/hqaVxVMEbhuh3F76fvPWEJJ4JmHhnwRIFzzl07qr2FTd/v/7J3qbQpKAcKIZ4Ang+YAMdZKd3Ln510S+UxUexblDeUzU9K7BRe1z90Ki4LJ/PFfrtt6Dcp5PmG0cfDYylpAwuBhq1Vssg8moEdDR4Fge5rbTrch3aD2OtwIco/20itC3/nt66g0wdus/3gyopbovX0c7UFxNDSci9xCh78mqyoAEzi/WEXYjxmy93mSljJ9B+eU02Zonc70qGYTerDDq80l+322pbX+yYMM9TuzibaOSdXQJEy+shNmeaZfhze819vEx6TjrUM1s6kwv8DTR/1Iz1S931OocmLeKplO5RnQf+mwgEdbK1XoxSD6bYlRcU/9wcpChevRCgfI2HdOg9o+mGRcUec2/WaNdBipYlHxVNd8q90L/lPsgZN3tkJouoOA=----ATTACHMENT:----OTk0MjA0ODkxNzQ1ODAxMCA5NDE3NTM4NDcyNDAwODc3IDU0OTQwMjU4MzE4NzgzMzg=