gnu-social/actions/xrds.php
Evan Prodromou eecd611f67 tags and XRDS
Starting the process of remote subscriptions.

First, add the capacity to mint tags. May in the future want to allow
some kind of UUID or URL for unique URIs. New config options for tag
authority and date, and a function for minting tags.

Store URIs in the DB. If the admin changes his/her tag config, this
shouldn't change the URIs in the DB. Unless they really want to make
that happen.

Generate an XRDS document with the appropriate URLs for microblogging.
Also, redefined some stuff in openmicroblogging.txt. And moved the file.

darcs-hash:20080522183421-84dde-fe46f32e4050f2c4b6c850334103007ed7feabf7.gz
2008-05-22 14:34:21 -04:00

69 lines
2.0 KiB
PHP

<?php
/*
* Laconica - a distributed open-source microblogging tool
* Copyright (C) 2008, Controlez-Vous, 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/>.
*/
if (!defined('LACONICA')) { exit(1); }
define('OPENMICROBLOGGING01', 'http://openmicroblogging.org/protocol/0.1');
class XrdsAction extends Action {
function handle($args) {
parent::handle($args);
$nickname = $this->trimmed('nickname');
$user = User::staticGet('nickname', $nickname);
if (!$user) {
common_user_error(_t('No such user.'));
return;
}
$this->show_xrds($user);
}
function show_xrds($user) {
header('Content-Type: application/rdf+xml');
common_start_xml();
common_element_start('xrds:XRDS', array('xmlns:xrds' => 'xri://$xrds',
'xmlns' => 'xri://$xrd*($v*2.0)'));
common_element_start('XRD');
$this->show_service(OPENMICROBLOGGING01.'/identifier',
$user->uri);
# XXX: decide whether to include user's ID/nickname in postNotice URL
foreach (array('requestToken', 'userAuthorization',
'accessToken', 'postNotice',
'updateProfile') as $type) {
$this->show_service(OPENMICROBLOGGING01.'/'.$type,
common_local_url(strtolower($type)));
}
common_element_end('XRD');
common_element_end('xrds:XRDS');
common_end_xml();
}
function show_service($type, $uri) {
common_element_start('Service');
common_element('Type', $type);
common_element('URI', $uri);
common_element_end('Service');
}
}