summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorCraig Andrews <candrews@integralblue.com>2010-09-05 17:43:29 -0400
committerCraig Andrews <candrews@integralblue.com>2010-09-07 13:45:52 -0400
commit8d54809c3561bf56afcdb401ef3c009e9a180cbc (patch)
tree3892a745ce6432901332531a600d41e280c1a0e3 /plugins
parent3dd734b2c3ea49c55467cfbfd4b3a5fb38456e87 (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.php47
-rw-r--r--plugins/OStatus/lib/xrd.php171
3 files changed, 8 insertions, 220 deletions
diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php
index 77bc9872b..dd1509954 100644
--- a/plugins/OStatus/OStatusPlugin.php
+++ b/plugins/OStatus/OStatusPlugin.php
@@ -50,8 +50,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',
@@ -1012,4 +1010,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 8ca07f916..000000000
--- a/plugins/OStatus/actions/hostmeta.php
+++ /dev/null
@@ -1,47 +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') && !defined('LACONICA')) { 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 145cd64cb..000000000
--- a/plugins/OStatus/lib/xrd.php
+++ /dev/null
@@ -1,171 +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) {
- throw new Exception("Invalid XML.");
- }
- $xrd_element = $dom->getElementsByTagName('XRD')->item(0);
- if (!$xrd_element) {
- throw new Exception("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;
- }
-}