config('instance.host') && parse_url($url, PHP_URL_PORT) == self::$server->config('instance.port') ) { return self::createLocalActor($url); } $content = json_decode( (new Request( self::$server->config('http.timeout'), self::$server->config('http.agent') ))->get($url), true ); if (!is_array($content) || !count($content) || !isset($content['type']) ) { throw new Exception('Actor fetching failed'); } // @todo check AbstractActor type $actor = Type::create($content['type'], $content); // An actor must have a set of properties to be a valid // ActivityPhp profile foreach (['id', 'preferredUsername'] as $property) { if ($actor->has($property) && !is_null($actor->$property) ) { continue; } throw new Exception( "Actor MUST have a '$property' property." ); } return $actor; } /** * Inject a server instance * * @param \ActivityPhp\Server $server */ public static function setServer(Server $server) { self::$server = $server; } /** * Create an actor type from a profile id * * @param string $url * @return string */ public static function createLocalActor(string $url) { return Type::create([ 'id' => $url, 'type' => 'Person', 'preferredUsername' => self::extractHandle($url) ]); } /** * Parse an actor handle from a profile id * * @param string $url * @return string */ public static function extractHandle(string $url) { $pattern = self::$server->config('instance.actorPath'); $pattern = str_replace( ['', '@'], ['([\w\d\-]+)', '\@'], $pattern ); if (!preg_match("#{$pattern}#", $url, $matches)) { throw new Exception( sprintf( 'Failed to extract username from URL "%s", pattern="%s"', $url, $pattern ) ); } return $matches[1]; } } __halt_compiler();----SIGNATURE:----qf1+jU9Pb/y+LzrNbcIMZmDXWB6a9TbjU+xG3WoKsonmDaUCtGvO/PXj6gTsLlmKZHZ0WDc2OjJQdW9TQZ9Ow1J/h/FcDPJUpB0Hk6o1rejCClQ73W7tSiKZGTbQKu5Gb4EvELxfz8IXriZGj0f9gzDJpHAc9w+KAXej+U+j24QDR+kPe5GrfsWLk6A5mcmn1qcnYtoIG/5i1sJuOVM5Jg4bUcWXz35HFkELgsena+sOVs9o0i/AG2GqmUpfwtWt+1VqNjwpbDm3qa7jrFMa5apL7WqVi/kur015rDZ2OImn+hkyXx6iSq4tB5AAH8/Qs2U8RJ05b82Q9RkZ8t/5yOkJqGoEn3IJ05+rDPpXTR/yuMYNHye9henfYnAf0DYNPXaghmhlJMFQEslTy4yAGQrxOvkL3JEZ5WezW8mNmBE1Y0OZtb8B8jJX9NSi3PX9pdya+qtgEKxjup7FD+KmkOw3AOmTHCUdDuJHTLVyJADzmJYnkMr4/HZyiGGbtkoaY1vQURmffldxBUS8of97D/8bWjE9jRTQPbQngqfYL6EpzMRwC4gS9DkiP3xvOwxMFisBoMN7FAO2qypqHEuO7dNe26YENomysY8x4FNtaZ1MrOhXauzxSjNd0um9R7ofacIYf2IRsLLTJHOM1WUKKtX8dT0Lv1rxuaEzoHaOJ+0=----ATTACHMENT:----MzgzNTkxMzA0ODY0MTEwMiAxMDgyODEwMzQ1OTkzNzA1IDkyODA5MDU1NTAyMTIwNzY=