From 9740775f62dc4672f9fffeb73f7797fda71da7bf Mon Sep 17 00:00:00 2001 From: Olav Morken <olav.morken@uninett.no> Date: Wed, 10 Feb 2010 13:04:00 +0000 Subject: [PATCH] openidProvider: Add XRDS support. git-svn-id: https://simplesamlphp.googlecode.com/svn/trunk@2169 44740490-163a-0410-bde0-09ae8108e29a --- modules/openidProvider/templates/user.tpl.php | 3 ++ modules/openidProvider/www/user.php | 7 +++ modules/openidProvider/www/xrds.php | 48 +++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 modules/openidProvider/www/xrds.php diff --git a/modules/openidProvider/templates/user.tpl.php b/modules/openidProvider/templates/user.tpl.php index 863062c6e..9e466e87a 100644 --- a/modules/openidProvider/templates/user.tpl.php +++ b/modules/openidProvider/templates/user.tpl.php @@ -8,6 +8,9 @@ $serverURL = $this->data['serverURL']; $trustedSites = $this->data['trustedSites']; $userId = $this->data['userId']; $userIdURL = $this->data['userIdURL']; +$xrdsURL = $this->data['xrdsURL']; + +header('X-XRDS-Location: ' . $xrdsURL); if ($userId !== FALSE) { $title = $this->t('{openidProvider:openidProvider:title_user}', array('%USERID%' => htmlspecialchars($userId))); diff --git a/modules/openidProvider/www/user.php b/modules/openidProvider/www/user.php index 2ae930b44..696476286 100644 --- a/modules/openidProvider/www/user.php +++ b/modules/openidProvider/www/user.php @@ -50,6 +50,11 @@ if ($ownPage) { $userBase = SimpleSAML_Module::getModuleURL('openidProvider/user.php'); +$xrds = SimpleSAML_Module::getModuleURL('openidProvider/xrds.php'); +if ($userId !== FALSE) { + $xrds = SimpleSAML_Utilities::addURLparameter($xrds, array('user' => $userId)); +} + $as = $server->getAuthSource(); $t = new SimpleSAML_XHTML_Template($globalConfig, 'openidProvider:user.tpl.php'); $t->data['identity'] = $identity; @@ -61,5 +66,7 @@ $t->data['serverURL'] = $server->getServerURL(); $t->data['trustedSites'] = $trustedSites; $t->data['userId'] = $userId; $t->data['userIdURL'] = $userBase . '/' . $userId; +$t->data['xrdsURL'] = $xrds; + $t->show(); exit(0); diff --git a/modules/openidProvider/www/xrds.php b/modules/openidProvider/www/xrds.php new file mode 100644 index 000000000..f36bfc3e4 --- /dev/null +++ b/modules/openidProvider/www/xrds.php @@ -0,0 +1,48 @@ +<?php + +/** + * This endpoint returns an XRDS document describing this server. + * + * @package simpleSAMLphp + * @version $Id$ + */ + +if (isset($_REQUEST['user'])) { + $user = (string)$_REQUEST['user']; + $serviceTypes = array( + 'http://specs.openid.net/auth/2.0/signon', + 'http://openid.net/server/1.0', + 'http://openid.net/server/1.1', + ); +} else { + $user = NULL; + $serviceTypes = array( + 'http://specs.openid.net/auth/2.0/server', + ); +} + +$server = sspmod_openidProvider_Server::getInstance(); + +$serverURL = $server->getServerURL(); + +header('Content-Type: application/xrds+xml'); + +echo('<?xml version="1.0" encoding="UTF-8"?>' . "\n"); +echo('<xrds:XRDS xmlns:xrds="xri://$xrds" xmlns="xri://$xrd*($v*2.0)">'); +echo('<XRD>'); +echo('<Service priority="0">'); + +foreach ($serviceTypes as $t) { + echo('<Type>' . htmlspecialchars($t) . '</Type>'); +} + +echo('<URI>' . htmlspecialchars($serverURL) . '</URI>'); + +if ($user !== NULL) { + $localId = SimpleSAML_Module::getModuleURL('openidProvider/user.php') . '/' . $user; + echo('<LocalID>' . htmlspecialchars($localId) . '</LocalID>'); +} + +echo('</Service>'); +echo('</XRD>'); +echo('</xrds:XRDS>'); -- GitLab