summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorCraig Andrews <candrews@integralblue.com>2010-09-05 17:43:29 -0400
committerEvan Prodromou <evan@status.net>2010-11-26 21:12:14 -0500
commit3f3b38766f13d93bcc17264ad0aad0df90daf22a (patch)
tree232a1bef036ff88f379fb9323dbd5399da1d836c /plugins
parentc65f19948613db5c59d403ae7c134874244d5b63 (diff)
move xrd and hostmeta out of the OStatus plugin and into core
add event for setting up hostmeta, and use them in the OStatus plugin
Diffstat (limited to 'plugins')
-rw-r--r--plugins/OStatus/OStatusPlugin.php10
-rw-r--r--plugins/OStatus/actions/hostmeta.php48
-rw-r--r--plugins/OStatus/lib/xrd.php172
3 files changed, 8 insertions, 222 deletions
diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php
index 4ab2023cb..e38d52d3d 100644
--- a/plugins/OStatus/OStatusPlugin.php
+++ b/plugins/OStatus/OStatusPlugin.php
@@ -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
index 14f69ac19..000000000
--- a/plugins/OStatus/actions/hostmeta.php
+++ /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
index c8cffed9c..000000000
--- a/plugins/OStatus/lib/xrd.php
+++ /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;
- }
-}