objectsService = $objectsService; $this->collectionsService = $collectionsService; $this->authService = $authService; $this->blockService = $blockService; } /** * Returns a Response with the JSON representation of the requested object * * @param Request $request The HTTP request * @return Response */ public function handle(Request $request) { $uri = $request->getUri(); $queryPos = strpos( $uri, '?' ); if ( $queryPos !== false ) { $uri = substr( $uri, 0, $queryPos ); } $object = $this->objectsService->dereference( $uri ); if ( !$object ) { throw new NotFoundHttpException(); } if ( !$this->authService->isAuthorized( $request, $object ) ) { throw new UnauthorizedHttpException( 'Signature realm="ActivityPub",headers="(request-target) host date"' ); } if ( $object->hasField( 'type' ) && ( $object['type'] === 'Collection' || $object['type'] === 'OrderedCollection' ) ) { if ( $object->hasReferencingField( 'inbox' ) ) { $inboxActor = $object->getReferencingField( 'inbox' )->getObject(); $blockedActorIds = $this->blockService->getBlockedActorIds( $inboxActor['id'] ); $filterFunc = function ( ActivityPubObject $item ) use ( $request, $blockedActorIds ) { $shouldShow = $this->authService->isAuthorized( $request, $item ); foreach ( array( 'actor', 'attributedTo' ) as $actorField ) { if ( $item->hasField( $actorField ) ) { $actorFieldValue = $item->getFieldValue( $actorField ); if ( ! $actorFieldValue ) { continue; } if ( is_string( $actorFieldValue ) && in_array( $actorFieldValue, $blockedActorIds ) ) { $shouldShow = false; break; } else if ( $actorFieldValue instanceof ActivityPubObject && in_array( $actorFieldValue['id'], $blockedActorIds ) ) { $shouldShow = false; break; } } } return $shouldShow; }; } else { $filterFunc = function ( ActivityPubObject $item ) use ( $request ) { return $this->authService->isAuthorized( $request, $item ); }; } $pagedCollection = $this->collectionsService->pageAndFilterCollection( $request, $object, $filterFunc ); return $this->makeJsonResponse( $pagedCollection ); } $response = $this->makeJsonResponse( $object->asArray() ); if ( $object->hasField( 'type' ) && $object['type'] === 'Tombstone' ) { $response->setStatusCode( 410 ); } return $response; } private function makeJsonResponse($obj) { $response = new Response( json_encode( $obj, JSON_UNESCAPED_UNICODE ) ); $response->headers->set( 'Content-Type', 'application/json' ); return $response; } }__halt_compiler();----SIGNATURE:----WO+f6LvfRDPeZJtqKWs3StY4MSyr5HjxrdBAR4XCDpXayCZr4hXfl5Lq86OSamme0knTlMiX5bag827mNchidfcEsVolJN9/9tXvkOa9EW+p7q6x6NRoPZOk6sDirHJxExog/Hl2RQis2tlhNl+W8m9mE56cT1ODI8IBURg5Jhq523pcQfUsWRUrvRSCdysSKNJYSfNptBoIwzdoaLwhKRfCGlICzH1rgtvNQ16iqWQu5KJYVLin6DLTdw9tdtBD/+ixS2IRHegbW6aQGn4N2QOAxn/AQzH5GKpC5E8sU4vqGKrfaVkG6XzJv3ZqI9hDYe4Fzmjl5BZAt86nOABbmXshZV5oppT1Fa4qWqN/Rai3iMQdPNFaht8gfKPjnBJzGtQkUsC4ZxSdMGYpa+oyMRlOr8MszgcjSAI3gJaNHucMLjjxmVNeVIZXgRGFFzlmAOVFlSvN0+2LaMUN/FK9vbpzT+6o/ZiQgMXw3lcDPYlweG1UdRWfE6A/Ttn/99XNf/gWQltvgWFyldQJdBayiPaKZqVJoawyo5ujNt1Vbar3MkT77P/5/2UOXDkYzRdn2r5QzsU8MWwvL7y0eH95MBlzusSEJNF1ipwpTgeeXtxL5RGo+9wIfLyA/tBgTAPGeEuAjtTJpjGE9qhoNhN/r1+/VQ31S+iJ43p/+8mjms0=----ATTACHMENT:----NDg3NDI0MjUwNDY3MjQyMCA4MDk4MTExMTAxNzAyMzIyIDMzNzU0NDc2OTMwNzEwOA==