]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/xrds.php
Moved the public XRDS from the OpenID plugin to core
[quix0rs-gnu-social.git] / actions / xrds.php
index 8ba89fec0ff7c56a262ebaa29374ba9a8c0b8359..8f09557d185ce34ca3d2a566ddffc76860961f05 100644 (file)
@@ -36,6 +36,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
 require_once INSTALLDIR.'/lib/omb.php';
 require_once INSTALLDIR.'/extlib/libomb/service_provider.php';
 require_once INSTALLDIR.'/extlib/libomb/xrds_mapper.php';
+require_once INSTALLDIR.'/lib/xrdsoutputter.php';
 
 /**
  * XRDS for OpenMicroBlogging
@@ -49,6 +50,8 @@ require_once INSTALLDIR.'/extlib/libomb/xrds_mapper.php';
  */
 class XrdsAction extends Action
 {
+    var $user;
+
     /**
      * Is read only?
      *
@@ -58,60 +61,87 @@ class XrdsAction extends Action
     {
         return true;
     }
-
-    /**
-     * Class handler.
-     *
-     * @param array $args query arguments
-     *
-     * @return void
-     */
-    function handle($args)
+    
+    function prepare($args)
     {
-        parent::handle($args);
+        parent::prepare($args);
         $nickname = $this->trimmed('nickname');
-        $user     = User::staticGet('nickname', $nickname);
-        if (!$user) {
+        $this->user     = User::staticGet('nickname', $nickname);
+        if (!$this->user) {
             $this->clientError(_('No such user.'));
             return;
         }
-        $this->showXrds($user);
+        return true;
     }
 
     /**
-     * Show XRDS for a user.
+     * Class handler.
      *
-     * @param class $user XRDS for this user.
+     * @param array $args query arguments
      *
      * @return void
      */
-    function showXrds($user)
+    function handle($args)
     {
-        $srv = new OMB_Service_Provider(profile_to_omb_profile($user->uri,
-                                        $user->getProfile()));
-        /* Use libomb’s default XRDS Writer. */
-        $xrds_writer = null;
-        $srv->writeXRDS(new Laconica_XRDS_Mapper(), $xrds_writer);
-    }
-}
+        parent::handle($args);
+        $xrdsOutputter = new XRDSOutputter();
+        $xrdsOutputter->startXRDS();
 
-class Laconica_XRDS_Mapper implements OMB_XRDS_Mapper
-{
-    protected $urls;
+        Event::handle('StartUserXRDS', array($this,&$xrdsOutputter));
 
-    public function __construct()
-    {
-        $this->urls = array(
-            OAUTH_ENDPOINT_REQUEST => 'requesttoken',
-            OAUTH_ENDPOINT_AUTHORIZE => 'userauthorization',
-            OAUTH_ENDPOINT_ACCESS => 'accesstoken',
-            OMB_ENDPOINT_POSTNOTICE => 'postnotice',
-            OMB_ENDPOINT_UPDATEPROFILE => 'updateprofile');
-    }
+        //oauth
+        $xrdsOutputter->elementStart('XRD', array('xmlns' => 'xri://$xrd*($v*2.0)',
+                                          'xml:id' => 'oauth',
+                                          'xmlns:simple' => 'http://xrds-simple.net/core/1.0',
+                                          'version' => '2.0'));
+        $xrdsOutputter->element('Type', null, 'xri://$xrds*simple');
+        $xrdsOutputter->showXrdsService(OAUTH_ENDPOINT_REQUEST,
+                            common_local_url('requesttoken'),
+                            array(OAUTH_AUTH_HEADER, OAUTH_POST_BODY, OAUTH_HMAC_SHA1));
+        $xrdsOutputter->showXrdsService( OAUTH_ENDPOINT_AUTHORIZE,
+                            common_local_url('userauthorization'),
+                            array(OAUTH_AUTH_HEADER, OAUTH_POST_BODY, OAUTH_HMAC_SHA1),
+                            null,
+                            $this->user->getIdentifierURI());
+        $xrdsOutputter->showXrdsService(OAUTH_ENDPOINT_ACCESS,
+                            common_local_url('accesstoken'),
+                            array(OAUTH_AUTH_HEADER, OAUTH_POST_BODY, OAUTH_HMAC_SHA1),
+                            null,
+                            $this->user->getIdentifierURI());
+        $xrdsOutputter->showXrdsService(OAUTH_ENDPOINT_RESOURCE,
+                            null,
+                            array(OAUTH_AUTH_HEADER, OAUTH_POST_BODY, OAUTH_HMAC_SHA1),
+                            null,
+                            $this->user->getIdentifierURI());
+        $xrdsOutputter->elementEnd('XRD');
+        
+        //omb
+        $xrdsOutputter->elementStart('XRD', array('xmlns' => 'xri://$xrd*($v*2.0)',
+                                          'xml:id' => 'oauth',
+                                          'xmlns:simple' => 'http://xrds-simple.net/core/1.0',
+                                          'version' => '2.0'));
+        $xrdsOutputter->element('Type', null, 'xri://$xrds*simple');
+        $xrdsOutputter->showXrdsService(OMB_ENDPOINT_POSTNOTICE,
+                            common_local_url('postnotice'));
+        $xrdsOutputter->showXrdsService(OMB_ENDPOINT_UPDATEPROFILE,
+                            common_local_url('updateprofile'));
+        $xrdsOutputter->elementEnd('XRD');
+        
+        //misc
+        $xrdsOutputter->elementStart('XRD', array('xmlns' => 'xri://$xrd*($v*2.0)',
+                                          'xml:id' => 'oauth',
+                                          'xmlns:simple' => 'http://xrds-simple.net/core/1.0',
+                                          'version' => '2.0'));
+        $xrdsOutputter->showXrdsService(OAUTH_DISCOVERY,
+                            '#oauth');
+        $xrdsOutputter->showXrdsService(OMB_VERSION,
+                            '#omb');
+        $xrdsOutputter->elementEnd('XRD');
 
-    public function getURL($action)
-    {
-        return common_local_url($this->urls[$action]);
+        Event::handle('EndUserXRDS', array($this,&$xrdsOutputter));
+
+        $xrdsOutputter->endXRDS();
+        
     }
 }
 ?>