delirehberi/webfinger

This package is abandoned and no longer maintained. No replacement package was suggested.

Webfinger Implementation

Maintainers

👁 delirehberi

Package info

github.com/delirehberi/webfinger

pkg:composer/delirehberi/webfinger

Statistics

Installs: 8

Dependents: 1

Suggesters: 0

Stars: 6

Open Issues: 0

dev-master 2019-07-21 13:08 UTC

Requires

None

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 38c3b84ebb16b7306c02d5ffc7b85219aa38daa7

  • delirehberi <delirehberi.woop@gmail.com>

This package is auto-updated.

Last update: 2020-08-21 15:40:11 UTC


README

WebFinger RFC7033 implementation for PHP. You can use your projects after with basic installation steps.

Installation

  • add to your dependencies composer require delirehberi/webfinger
  • create your WebFingerController and route it to /.well-known/webfinger
  • configure your resources.
    • add user resource for acct: requests. eg: acct:rik@florina.gov
    • add url resource for https:// request. eg: https://florina.gov/news/missing-spatio-analyst
    • add user resource for mailto: request. eg: mailto:rik@florina.gov

Example

  • $router is router object
  • $dbh pdo instance

At first, you need implement your entities from \DelirehberiWebFinger\ResourceDescriptorInterface

After that you need to write your transform method.

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;
 }

Last step is return your object in your controller.

 $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();
 });