]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
move xrd and hostmeta out of the OStatus plugin and into core
authorCraig Andrews <candrews@integralblue.com>
Sun, 5 Sep 2010 21:43:29 +0000 (17:43 -0400)
committerEvan Prodromou <evan@status.net>
Sat, 27 Nov 2010 02:12:14 +0000 (21:12 -0500)
add event for setting up hostmeta, and use them in the OStatus plugin

EVENTS.txt
actions/hostmeta.php [new file with mode: 0644]
index.php
lib/router.php
lib/xrd.php [new file with mode: 0644]
plugins/OStatus/OStatusPlugin.php
plugins/OStatus/actions/hostmeta.php [deleted file]
plugins/OStatus/lib/xrd.php [deleted file]

index 8bdc93db82c0dc80bf99232fdca27d1fb38334f4..9e274c7314e425bb3c2c9a4862e6cdf4fe58856c 100644 (file)
@@ -591,6 +591,12 @@ EndPublicXRDS: End XRDS output (right before the closing XRDS tag)
 - $action: the current action
 - &$xrdsoutputter - XRDSOutputter object to write to
 
+StartHostMetaLinks: Start /.well-known/host-meta links
+- &links: array containing the links elements to be written
+
+EndHostMetaLinks: End /.well-known/host-meta links
+- &links: array containing the links elements to be written
+
 StartCheckPassword: Check a username/password
 - $nickname: The nickname to check
 - $password: The password to check
diff --git a/actions/hostmeta.php b/actions/hostmeta.php
new file mode 100644 (file)
index 0000000..b7beee5
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @category Action
+ * @package  StatusNet
+ * @maintainer James Walker <james@status.net>
+ * @author   Craig Andrews <candrews@integralblue.com>
+ */
+
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+
+class HostMetaAction extends Action
+{
+
+    /**
+     * Is read only?
+     *
+     * @return boolean true
+     */
+    function isReadOnly()
+    {
+        return true;
+    }
+
+    function handle()
+    {
+        parent::handle();
+
+        $domain = common_config('site', 'server');
+
+        $xrd = new XRD();
+        $xrd->host = $domain;
+
+        if(Event::handle('StartHostMetaLinks', array(&$xrd->links))) {
+            Event::handle('EndHostMetaLinks', array(&$xrd->links));
+        }
+
+        header('Content-type: application/xrd+xml');
+        print $xrd->toXML();
+    }
+}
index 6079d1f2c414db1593babff1ed935edcbba913ed..b060a3d52ac9ec9c60214702bc2a2c1b63dd63a8 100644 (file)
--- a/index.php
+++ b/index.php
@@ -189,7 +189,7 @@ function checkMirror($action_obj, $args)
 
 function isLoginAction($action)
 {
-    static $loginActions =  array('login', 'recoverpassword', 'api', 'doc', 'register', 'publicxrds', 'otp', 'opensearch', 'rsd');
+    static $loginActions =  array('login', 'recoverpassword', 'api', 'doc', 'register', 'publicxrds', 'otp', 'opensearch', 'rsd', 'hostmeta');
 
     $login = null;
 
index c0f3bf31d7880cff97dc312a9deff1f82351957f..6912bd7cf8595277ce162dc317036b1d162a185c 100644 (file)
@@ -149,6 +149,8 @@ class Router
 
             $m->connect('main/xrds',
                         array('action' => 'publicxrds'));
+            $m->connect('.well-known/host-meta',
+                        array('action' => 'hostmeta'));
 
             // these take a code
 
diff --git a/lib/xrd.php b/lib/xrd.php
new file mode 100644 (file)
index 0000000..c8cffed
--- /dev/null
@@ -0,0 +1,172 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * A sample module to show best practices for StatusNet plugins
+ *
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @package   StatusNet
+ * @author    James Walker <james@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+class XRD
+{
+    const XML_NS = 'http://www.w3.org/2000/xmlns/';
+
+    const XRD_NS = 'http://docs.oasis-open.org/ns/xri/xrd-1.0';
+
+    const HOST_META_NS = 'http://host-meta.net/xrd/1.0';
+
+    public $expires;
+
+    public $subject;
+
+    public $host;
+
+    public $alias = array();
+
+    public $types = array();
+
+    public $links = array();
+
+    public static function parse($xml)
+    {
+        $xrd = new XRD();
+
+        $dom = new DOMDocument();
+
+        // Don't spew XML warnings to output
+        $old = error_reporting();
+        error_reporting($old & ~E_WARNING);
+        $ok = $dom->loadXML($xml);
+        error_reporting($old);
+
+        if (!$ok) {
+            // TRANS: Exception.
+            throw new Exception(_m('Invalid XML.'));
+        }
+        $xrd_element = $dom->getElementsByTagName('XRD')->item(0);
+        if (!$xrd_element) {
+            // TRANS: Exception.
+            throw new Exception(_m('Invalid XML, missing XRD root.'));
+        }
+
+        // Check for host-meta host
+        $host = $xrd_element->getElementsByTagName('Host')->item(0);
+        if ($host) {
+            $xrd->host = $host->nodeValue;
+        }
+
+        // Loop through other elements
+        foreach ($xrd_element->childNodes as $node) {
+            if (!($node instanceof DOMElement)) {
+                continue;
+            }
+            switch ($node->tagName) {
+            case 'Expires':
+                $xrd->expires = $node->nodeValue;
+                break;
+            case 'Subject':
+                $xrd->subject = $node->nodeValue;
+                break;
+
+            case 'Alias':
+                $xrd->alias[] = $node->nodeValue;
+                break;
+
+            case 'Link':
+                $xrd->links[] = $xrd->parseLink($node);
+                break;
+
+            case 'Type':
+                $xrd->types[] = $xrd->parseType($node);
+                break;
+
+            }
+        }
+        return $xrd;
+    }
+
+    public function toXML()
+    {
+        $xs = new XMLStringer();
+
+        $xs->startXML();
+        $xs->elementStart('XRD', array('xmlns' => XRD::XRD_NS));
+
+        if ($this->host) {
+            $xs->element('hm:Host', array('xmlns:hm' => XRD::HOST_META_NS), $this->host);
+        }
+
+        if ($this->expires) {
+            $xs->element('Expires', null, $this->expires);
+        }
+
+        if ($this->subject) {
+            $xs->element('Subject', null, $this->subject);
+        }
+
+        foreach ($this->alias as $alias) {
+            $xs->element('Alias', null, $alias);
+        }
+
+        foreach ($this->links as $link) {
+            $titles = array();
+            if (isset($link['title'])) {
+                $titles = $link['title'];
+                unset($link['title']);
+            }
+            $xs->elementStart('Link', $link);
+            foreach ($titles as $title) {
+                $xs->element('Title', null, $title);
+            }
+            $xs->elementEnd('Link');
+        }
+
+        $xs->elementEnd('XRD');
+
+        return $xs->getString();
+    }
+
+    function parseType($element)
+    {
+        return array();
+    }
+
+    function parseLink($element)
+    {
+        $link = array();
+        $link['rel'] = $element->getAttribute('rel');
+        $link['type'] = $element->getAttribute('type');
+        $link['href'] = $element->getAttribute('href');
+        $link['template'] = $element->getAttribute('template');
+        foreach ($element->childNodes as $node) {
+            if ($node instanceof DOMElement) {
+                switch($node->tagName) {
+                case 'Title':
+                    $link['title'][] = $node->nodeValue;
+                }
+            }
+        }
+
+        return $link;
+    }
+}
index 4ab2023cbee77d6d48212aed41aa306279c39e09..e38d52d3d78cc5ef6b16919d754be1b7a75fe21f 100644 (file)
@@ -52,8 +52,6 @@ class OStatusPlugin extends Plugin
     function onRouterInitialized($m)
     {
         // Discovery actions
-        $m->connect('.well-known/host-meta',
-                    array('action' => 'hostmeta'));
         $m->connect('main/xrd',
                     array('action' => 'userxrd'));
         $m->connect('main/ownerxrd',
@@ -1011,4 +1009,12 @@ class OStatusPlugin extends Plugin
 
         return true;
     }
+
+    function onStartHostMetaLinks(&$links) {
+        $url = common_local_url('userxrd');
+        $url.= '?uri={uri}';
+        $links[] = array('rel' => Discovery::LRDD_REL,
+                              'template' => $url,
+                              'title' => array('Resource Descriptor'));
+    }
 }
diff --git a/plugins/OStatus/actions/hostmeta.php b/plugins/OStatus/actions/hostmeta.php
deleted file mode 100644 (file)
index 14f69ac..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
- * @package OStatusPlugin
- * @maintainer James Walker <james@status.net>
- */
-
-if (!defined('STATUSNET')) {
-    exit(1);
-}
-
-class HostMetaAction extends Action
-{
-    function handle()
-    {
-        parent::handle();
-
-        $domain = common_config('site', 'server');
-        $url = common_local_url('userxrd');
-        $url.= '?uri={uri}';
-
-        $xrd = new XRD();
-        $xrd->host = $domain;
-        $xrd->links[] = array('rel' => Discovery::LRDD_REL,
-                              'template' => $url,
-                              'title' => array('Resource Descriptor'));
-
-        header('Content-type: application/xrd+xml');
-        print $xrd->toXML();
-    }
-}
diff --git a/plugins/OStatus/lib/xrd.php b/plugins/OStatus/lib/xrd.php
deleted file mode 100644 (file)
index c8cffed..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * A sample module to show best practices for StatusNet plugins
- *
- * PHP version 5
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @package   StatusNet
- * @author    James Walker <james@status.net>
- * @copyright 2010 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-
-class XRD
-{
-    const XML_NS = 'http://www.w3.org/2000/xmlns/';
-
-    const XRD_NS = 'http://docs.oasis-open.org/ns/xri/xrd-1.0';
-
-    const HOST_META_NS = 'http://host-meta.net/xrd/1.0';
-
-    public $expires;
-
-    public $subject;
-
-    public $host;
-
-    public $alias = array();
-
-    public $types = array();
-
-    public $links = array();
-
-    public static function parse($xml)
-    {
-        $xrd = new XRD();
-
-        $dom = new DOMDocument();
-
-        // Don't spew XML warnings to output
-        $old = error_reporting();
-        error_reporting($old & ~E_WARNING);
-        $ok = $dom->loadXML($xml);
-        error_reporting($old);
-
-        if (!$ok) {
-            // TRANS: Exception.
-            throw new Exception(_m('Invalid XML.'));
-        }
-        $xrd_element = $dom->getElementsByTagName('XRD')->item(0);
-        if (!$xrd_element) {
-            // TRANS: Exception.
-            throw new Exception(_m('Invalid XML, missing XRD root.'));
-        }
-
-        // Check for host-meta host
-        $host = $xrd_element->getElementsByTagName('Host')->item(0);
-        if ($host) {
-            $xrd->host = $host->nodeValue;
-        }
-
-        // Loop through other elements
-        foreach ($xrd_element->childNodes as $node) {
-            if (!($node instanceof DOMElement)) {
-                continue;
-            }
-            switch ($node->tagName) {
-            case 'Expires':
-                $xrd->expires = $node->nodeValue;
-                break;
-            case 'Subject':
-                $xrd->subject = $node->nodeValue;
-                break;
-
-            case 'Alias':
-                $xrd->alias[] = $node->nodeValue;
-                break;
-
-            case 'Link':
-                $xrd->links[] = $xrd->parseLink($node);
-                break;
-
-            case 'Type':
-                $xrd->types[] = $xrd->parseType($node);
-                break;
-
-            }
-        }
-        return $xrd;
-    }
-
-    public function toXML()
-    {
-        $xs = new XMLStringer();
-
-        $xs->startXML();
-        $xs->elementStart('XRD', array('xmlns' => XRD::XRD_NS));
-
-        if ($this->host) {
-            $xs->element('hm:Host', array('xmlns:hm' => XRD::HOST_META_NS), $this->host);
-        }
-
-        if ($this->expires) {
-            $xs->element('Expires', null, $this->expires);
-        }
-
-        if ($this->subject) {
-            $xs->element('Subject', null, $this->subject);
-        }
-
-        foreach ($this->alias as $alias) {
-            $xs->element('Alias', null, $alias);
-        }
-
-        foreach ($this->links as $link) {
-            $titles = array();
-            if (isset($link['title'])) {
-                $titles = $link['title'];
-                unset($link['title']);
-            }
-            $xs->elementStart('Link', $link);
-            foreach ($titles as $title) {
-                $xs->element('Title', null, $title);
-            }
-            $xs->elementEnd('Link');
-        }
-
-        $xs->elementEnd('XRD');
-
-        return $xs->getString();
-    }
-
-    function parseType($element)
-    {
-        return array();
-    }
-
-    function parseLink($element)
-    {
-        $link = array();
-        $link['rel'] = $element->getAttribute('rel');
-        $link['type'] = $element->getAttribute('type');
-        $link['href'] = $element->getAttribute('href');
-        $link['template'] = $element->getAttribute('template');
-        foreach ($element->childNodes as $node) {
-            if ($node instanceof DOMElement) {
-                switch($node->tagName) {
-                case 'Title':
-                    $link['title'][] = $node->nodeValue;
-                }
-            }
-        }
-
-        return $link;
-    }
-}