]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
add xrds for trust root URL
authorEvan Prodromou <evan@prodromou.name>
Wed, 18 Jun 2008 18:26:47 +0000 (14:26 -0400)
committerEvan Prodromou <evan@prodromou.name>
Wed, 18 Jun 2008 18:26:47 +0000 (14:26 -0400)
darcs-hash:20080618182647-84dde-e75e2c3441e8441ad6602f36fd9b7bf6ca39e70d.gz

actions/public.php
actions/publicxrds.php [new file with mode: 0644]
htaccess.sample
lib/openid.php
lib/util.php

index 7e47b9f759935bb5a3ac17c73f2fe154d0e00d5a..5d06c3c2951a887fe11d7c5c8df0fdf26fd43139 100644 (file)
@@ -28,6 +28,8 @@ class PublicAction extends StreamAction {
 
                $page = ($this->arg('page')) ? ($this->arg('page')+0) : 1;
 
+               header('X-XRDS-Location: '. common_local_url('publicxrds'));
+               
                common_show_header(_t('Public timeline'), 
                                                   array($this, 'show_header'), NULL,  
                                                   array($this, 'show_top'));
@@ -50,6 +52,9 @@ class PublicAction extends StreamAction {
                                                                         'href' => common_local_url('publicrss'),
                                                                         'type' => 'application/rss+xml',
                                                                         'title' => _t('Public Stream Feed')));
+               # for client side of OpenID authentication
+               common_element('meta', array('http-equiv' => 'X-XRDS-Location',
+                                                                        'content' => common_local_url('publicxrds')));
        }
        
        function show_notices($page) {
diff --git a/actions/publicxrds.php b/actions/publicxrds.php
new file mode 100644 (file)
index 0000000..f9ffa81
--- /dev/null
@@ -0,0 +1,77 @@
+<?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); }
+
+require_once(INSTALLDIR.'/lib/openid.php');
+
+# XXX: factor out similarities with XrdsAction
+
+class PublicxrdsAction extends Action {
+
+       function handle($args) {
+               
+               parent::handle($args);
+               
+               header('Content-Type: application/xrds+xml');
+
+               common_start_xml();
+               common_element_start('XRDS', array('xmlns' => 'xri://$xrds'));
+               
+               common_element_start('XRD', array('xmlns' => 'xri://$xrd*($v*2.0)',
+                                                 'xml:id' => 'oauth',
+                                                                                 'xmlns:simple' => 'http://xrds-simple.net/core/1.0',
+                                                                                 'version' => '2.0'));
+
+               common_element('Type', NULL, 'xri://$xrds*simple');
+
+               $this->show_service(Auth_OpenID_RP_RETURN_TO_URL_TYPE,
+                                                       common_local_url('finishopenidlogin'));
+               
+               $this->show_service(Auth_OpenID_RP_RETURN_TO_URL_TYPE,
+                                                       common_local_url('finishaddopenid'));
+               
+               common_element_end('XRD');
+               
+               common_element_end('XRDS');
+               common_end_xml();
+       }
+       
+       function show_service($type, $uri, $params=NULL, $sigs=NULL, $localId=NULL) {
+               common_element_start('Service');
+               if ($uri) {
+                       common_element('URI', NULL, $uri);
+               }
+               common_element('Type', NULL, $type);
+               if ($params) {
+                       foreach ($params as $param) {
+                               common_element('Type', NULL, $param);
+                       }
+               }
+               if ($sigs) {
+                       foreach ($sigs as $sig) {
+                               common_element('Type', NULL, $sig);
+                       }
+               }
+               if ($localId) {
+                       common_element('LocalID', NULL, $localId);
+               }
+               common_element_end('Service');
+       }
+}
\ No newline at end of file
index 14da3ba826bbce3fc959530224d2b9360a622b8f..bd8e86855bb3ce4a17971f9ba965947613e357ba 100644 (file)
@@ -2,6 +2,7 @@ RewriteEngine On
 
 RewriteRule ^$ index.php?action=public [L,QSA]
 RewriteRule ^rss$ index.php?action=publicrss [L,QSA]
+RewriteRule ^xrds$ index.php?action=publicxrds [L,QSA]
 
 RewriteRule ^doc/about$ index.php?action=doc&title=about [L,QSA]
 RewriteRule ^doc/help$ index.php?action=doc&title=help [L,QSA]
index c98ff8bfc6437a38af700b876df8217b423eee0e..48c2a6cb1a64e6b72faa03b38b4a73174d5bff10 100644 (file)
@@ -95,7 +95,7 @@ function oid_authenticate($openid_url, $returnto) {
                $auth_request->addExtension($sreg_request);
        }
        
-       $trust_root = common_root_url();
+       $trust_root = common_local_url($public);
        $process_url = common_local_url($returnto);
        
        if ($auth_request->shouldSendRedirect()) {
index 5091c4bad4ba201659e60cf9a90bfd46dfe1d788..9b4415c1765d478f255929a22f05c9ce8709798c 100644 (file)
@@ -530,6 +530,8 @@ function common_fancy_url($action, $args=NULL) {
                }
         case 'publicrss':
                return common_path('rss');
+        case 'publicxrds':
+               return common_path('xrds');
         case 'doc':
                return common_path('doc/'.$args['title']);
         case 'login':