diff --git a/modules/openidProvider/templates/user.tpl.php b/modules/openidProvider/templates/user.tpl.php index 863062c6e87fedaaae8c2e7a7bad5cabdaf683b5..9e466e87a35eb0ef28d4c25be3637dbf4f9a5be8 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 2ae930b4475064d5dbeb82a239e5b2d1c4dfa5b1..69647628699710d738fd52d5d1372af75860eec6 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 0000000000000000000000000000000000000000..f36bfc3e4d6633427f8480f1ae978026a57f1827 --- /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>');