setSubject("acct:" . $this->getEmail()); $data->addAlias('https://www.example.com/~' . $this->getUsername() . "/"); $link = new DelirehberiWebFinger\JsonRDLink(); $link->setRel('http://openid.net/specs/connect/1.0/issuer') ->setHref('https://openid.example.com'); $data->addLink($link); $link = new DelirehberiWebFinger\JsonRDLink(); $link->setRel('http://webfinger.example/rel/profile-page') ->setHref('https://www.example.com/~' . $this->getUsername() . "/"); $data->addLink($link); $link = new DelirehberiWebFinger\JsonRDLink(); $link->setRel('http://webfinger.example/rel/businesscard') ->setHref('https://www.example.com/~' . $this->getUsername() . "/" . $this->getVcardUrl()); $data->addLink($link); $data->addProperty('http://example.com/ns/role', 'employee'); return $data; } public function getVcardUrl() { return "bob.vcf"; } public function getUsername() { return "bob"; } public function getEmail() { return 'bob@example.com'; } }); } public function exampleUserAdapter() { $user = $this->exampleUser(); $userAdapter = new DelirehberiWebFinger\Adapter\ArrayAdapter(); $userAdapter->add($user); $userAdapter->setScheme(DelirehberiWebFinger\Constants::Account); $userAdapter->setFilter(function ($user, string $query) { if ($user->getEmail() == $query) { return true; } return false; }); return $userAdapter; } public function testArrayAdapterForAcct() { $userAdapter = $this->exampleUserAdapter(); $webfinger = new DelirehberiWebFinger\WebFinger(); $webfinger->addResource($userAdapter); try { $data = $webfinger->response("?resource=acct:bob@example.com"); } catch (Exception $a) { echo $a->getMessage(); } $result = $data->toJSON(); $this->assertEquals(self::BOB_RESPONSE, $result); } public function testArrayAdapterForHttps() { $content = (new class implements DelirehberiWebFinger\ResourceDescriptorInterface { public function transform(): DelirehberiWebFinger\JsonRD { $data = new DelirehberiWebFinger\JsonRD(); $data ->setSubject($this->getFullUrl()); $data->addAlias('https://www.example.com/blog/' . $this->getId()); $data->addProperty('http://blgx.example.net/ns/version', "1.3"); $link = new DelirehberiWebFinger\JsonRDLink(); $link->setRel('copyright') ->setHref('http://www.example.com/copyright'); $data->addLink($link); $link = new DelirehberiWebFinger\JsonRDLink(); $link->setRel('author') ->setHref($this->getAuthorUrl()) ->addTitle('en_US', $this->getAuthorTitle()) ->addTitle('tr_TR', $this->getAuthorTitle('tr_TR')) ->addProperty('http://example.com/role', 'editor'); $data->addLink($link); return $data; } public function getId() { return 10; } public function getAuthorTitle($locale = 'en_US') { $titles = [ 'en_US' => "Steve`s world", 'tr_TR' => 'Steve`in dünyası', ]; return $titles[$locale]; } public function getSlug() { return "hello-world"; } public function getFullUrl() { return "http://blog.example.com/" . $this->getSlug(); } public function getAuthorUrl() { return "http://blog.example.com/author/steve"; } }); $contentAdapter = new DelirehberiWebFinger\Adapter\ArrayAdapter(); $contentAdapter ->add($content) ->setScheme(DelirehberiWebFinger\Constants::Content); $contentAdapter->addModifier(function ($query) { $url = parse_url($query); if (!isset($url['path'])) { return null; } $path = trim($url['path'], '/'); return $path; }); $contentAdapter->setFilter(function ($content, $query) { if ($content->getSlug() == $query) { return true; } return false; }); $webfinger = new DelirehberiWebFinger\WebFinger(); $webfinger->addResource($contentAdapter); try { $data = $webfinger->response("?resource=http://blog.example.com/hello-world"); } catch (Exception $e) { var_dump($e->getMessage()); } $this->assertEquals(self::CONTENT_RESPONSE, $data->toJSON()); } public function testArrayAdapterAcctForRel() { $userAdapter = $this->exampleUserAdapter(); $webfinger = new DelirehberiWebFinger\WebFinger(); $webfinger->addResource($userAdapter); try { $data = $webfinger->response("?resource=acct:bob@example.com&rel=http://openid.net/specs/connect/1.0/issuer"); } catch (Exception $e) { var_dump($e->getMessage()); } $this->assertEquals(self::REL_BOB_RESPONSE, $data->toJSON()); } }__halt_compiler();----SIGNATURE:----EDAUZUq6qazVfWJ4VJvJuPJVq7mMGiKZebIgJJcJyRmR0mUSalCqFY62v+AM/7zGlcM0bE83aM974TN1ljNUdxtYP5/8+FUSDpOq/T/PtZz+1m0od6diq7jkzyDC/tHzPu5Dokss4oLRTLbSXrldmGXiVXE8vxcQcT8oY5PvG7MsaX/01K7KLrlEELRPazTajLeFy+odOgL7MITXcjoqqtIvnM+QrqLoPW3fRKAI0OryPo5OZJz5l4nmohDiJTXDMZ2t+yShgqOlNoHG0RksmuvlhZkXqR7+xvHXplGTDBdPSvL0et/Yq1EoDA32aXrQkl3wvM19ThyO/ZTGiOaeN54I3Bchqw4+pshACXZGB/lWl3Ih47opFjhnH9x2QqTUUnCr9lHD/wd0iZ8c/Q7UR5QbkBBP/RD1WRxYEnQTwe5cWsNJw0hHiklw/FwHPDCm3CV0kpce4HOKy/cqd7lUEt4e/87nEdfuYuJMRRirI+juRmvRc7m1txuM2msrlHMRfUVlGBl/UTQpq8jjyOvAoZLZF14WKeBDzvKBA8iRi/L05lN46Kn+53lOpgn9oTDtKIFJwB59pjmj0MdNorTIv078G22EBWg3jCmTZhQSDewpy8awY9h5MpC6hCMfV5GxU2Uwc0AwEdu3lDF2mA/CSuZeJWgTMoG3BEtisfaRRVA=----ATTACHMENT:----MTY2NTQ0MjEwNDM2NzY5NSAyNDkwMTUyMjk4MzMwMTUzIDU2NjUyNzQ5MTM1NTc1NDM=