delirehberi / webfinger
此软件包已被废弃且不再维护。没有建议的替代软件包。
Webfinger 实现
dev-master
2019-07-21 13:08 UTC
Requires (Dev)
- phpunit/phpunit: ^7
This package is auto-updated.
Last update: 2020-08-21 15:40:11 UTC
README
PHP 的 WebFinger RFC7033 实现。您可以在基本安装步骤之后使用您的项目。
安装
- 将以下依赖项添加到您的项目中:
composer require delirehberi/webfinger
- 创建您的 WebFingerController 并将其路由到
/.well-known/webfinger
- 配置您的资源。
- 为
acct:
请求添加用户资源。例如:acct:rik@florina.gov
- 为
https://
请求添加 URL 资源。例如:https://florina.gov/news/missing-spatio-analyst
- 为
mailto:
请求添加用户资源。例如:mailto:rik@florina.gov
- 为
示例
$router
是路由对象$dbh
pdo 实例
首先,您需要从 \DelirehberiWebFinger\ResourceDescriptorInterface
实现您的实体。
然后,您需要编写您的转换方法。
public function transform(): \DelirehberiWebFinger\JsonRD { $data = new \DelirehberiWebFinger\JsonRD(); $data ->setSubject("acct:" . $this->getEmail()); $data->addAlias('https://www.example.com/~' . $this->getUsername() . "/"); $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; }
最后一步是在您的控制器中返回您的对象。
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); $router->add('/.well-known/webfinger',function(Request $req)use($dbh){ $userAdapter = new \DelirehberiWebFinger\Adapter\ArrayAdapter(); $userAdapter->add($user); $userAdapter->setScheme(\DelirehberiWebFinger\Constants::Account); $userAdapter->setFilter(function(User $user,string $query){ if($user->getEmail()==$query){ return true; } return false; }); $contentAdapter = new \DelirehberiWebFinger\Adapter\SqlQueryAdapter(); $contentAdapter->setPdoInstance($dbg); $contentAdapter->setQuery("select * from contents where slug=:data"); $contentAdapter->addModifier(function($url)use($router){ $url = parse_url($url); $parse = $router->match($url['path'); return $parse['slug']??false; }); $contentAdapter->setScheme(\DelirehberiWebFinger\Constants::Content); $webfinger = new \DelirehberiWebFinger\WebFinger(); $webfinger->addResource($userAdapter); $webfinger->addResource($contentAdapter); $data = $webfinger->response($req->getQuery()); if($data===null){ //header 404 return ""; } // don't forget add content-type to your response header // eg: Content-Type: application/jrd+json return $data->transform()->toJSON(); });