summaryrefslogtreecommitdiff
path: root/actions
diff options
context:
space:
mode:
authorEvan Prodromou <evan@prodromou.name>2008-05-22 14:34:21 -0400
committerEvan Prodromou <evan@prodromou.name>2008-05-22 14:34:21 -0400
commiteecd611f678febabe1d62d5cf9b0bc152caf7596 (patch)
tree72c75722a2ceb82ba6418187ad90353dc4121542 /actions
parent41f013578024a1ce558bde4030a0171e2895ed09 (diff)
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
Diffstat (limited to 'actions')
-rw-r--r--actions/xrds.php69
1 files changed, 69 insertions, 0 deletions
diff --git a/actions/xrds.php b/actions/xrds.php
new file mode 100644
index 000000000..4a9c3454c
--- /dev/null
+++ b/actions/xrds.php
@@ -0,0 +1,69 @@
+<?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');
+ }
+} \ No newline at end of file