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:----eBIrp9aMmt2iRStiyjLpQwAdIFCaFZ4/AtZ7gspPOHbnEmeVWIzl+X0oYWnZWERp9JueGtBTh2VsAnhGGnJOIc/0+Lw3MTjeZpwfF7iAq8kVvLTCXypx1OVPnqnhKh2GsRIbWQNSDDsKI2Dis+9DwKplspRnws0T70nYX7gvvZgTmJ2K+P2ZWKT/DaWZR/iFlOmJw55bdu8qjGbmgp5OWgf8lr/jMqKK/J+Wq8xpSfIUU0nb5sR25OK5QSGCWgITwMdSzz1btYIs5keOaueYzHItQUjK7Qov/Q1o+zYtFJSOOqaYszFekC3wbZ9nU6CrRrlx1fqUUviMjEWSRuzRf5GO3Jcfz1dbyIS2vvLjtLf8a8lrfLiiyidACVju8p+70bVhkmR0WQQNCO56bUzxOQr4IBUqezois3laxBrSqvDJVq3HacPKm2XYiBFr804HDT4DvbqnYSUXEoKipwqTd/eHnpB5PdTSwAUd7ISDvsECk+t+zeOnhFm3go9IA8a/b6bp3WimTJJedHo7qteP+pyYOOP8kEw0QHTf8gc2DN2+RvvqeLRFQ2hcreRL1h0Ocn79ksIbVTG2kgWzf2yXgk6uQ7cf+fjszghS8Yg3nUsB/vWi89+iWYQPWs8BJgpvVDKOjVotc9WK4TIipvSud5+7zh9/2XxF6W1oimg4H4Q=----ATTACHMENT:----OTYwODU4OTYyMjA3Mjc5OSA3ODc3MjIyNTAyNzY4NTA1IDEyNzg5MjU0NTMwMTQ1NTk=