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:----ZHcc5sLbw9Kti+wcEglPgWzR64oSfWS6b4IQsjKwK10LEiogc98jlkPrB0RJ0HR88qr6IEMX10cNJhXuLT4wdOhNbOWtIFn76wZlgUZ+ZuY2BomBTZMQ5sueTy07kO26XielDSs2lNWJC0B/2XjBqMCjje7nqH6Ayc1qHCFu1o6N1tE2Ta7ApowMusBlHsUdR+54LF0VhBbOXNY+6T981fXij0Zrr9EJkXNKyJHyy3JAs9xQTo7BJrIaLmKTMl7RuTy6Z7wof+sswEMnxGLQmlrVdKoA0Dr6kl71qPdlj/iRWL8FoFqxWTv2srwhDhh6ZVQJQktnRFwmzQ1Nplns0oPxm0w2qfPDuKbSmq8qAoOKy75u+wEnmno8MMUxcZrnwf2uesQJNg7E8d37o2IWmYvmxzdtGUAFk7uB9nBqoejd19s3qa8/hSSvDMBJ27y8+wZMy4/pFnirCfX8nZ+H66OMsATWg3AUleF39VgUwZ7UkqAfTbz1hTvsOUAmpxlyqK82gEch2kwiDdIYB5udnq22lu/dWbVEps9+R+qbuZnKoaNhLGj1wUCiUUkMGol9V/b6wywveAqF10wBjwvvkbRW6HL2G8JrgLFlP3B9CEZkMUFbDpNx7tIFFvv+9JOrTx54bL/hht1NbM+1m1+B0mHOwFMx39ScTAOsHbSXesk=----ATTACHMENT:----NDMxNDIxNjIxMTYwMjIwNCA5NjY1MjE0NDQyNDEzMjM0IDg0MDgwNjUyNzQ3NDMyNQ==