87 lines
2.5 KiB
PHP
87 lines
2.5 KiB
PHP
<?php
|
|
|
|
$config = SimpleSAML_Configuration::getInstance();
|
|
$gConfig = SimpleSAML_Configuration::getConfig('module_aggregator.php');
|
|
|
|
|
|
// Get list of aggregators
|
|
$aggregators = $gConfig->getConfigItem('aggregators');
|
|
|
|
// If aggregator ID is not provided, show the list of available aggregates
|
|
if (!array_key_exists('id', $_GET)) {
|
|
$t = new SimpleSAML_XHTML_Template($config, 'aggregator:list.php');
|
|
$t->data['sources'] = $aggregators->getOptions();
|
|
$t->show();
|
|
exit;
|
|
}
|
|
$id = $_GET['id'];
|
|
if (!in_array($id, $aggregators->getOptions()))
|
|
throw new SimpleSAML_Error_NotFound('No aggregator with id ' . var_export($id, TRUE) . ' found.');
|
|
|
|
$aConfig = $aggregators->getConfigItem($id);
|
|
|
|
|
|
$aggregator = new sspmod_aggregator_Aggregator($gConfig, $aConfig, $id);
|
|
|
|
if (isset($_REQUEST['set']))
|
|
$aggregator->limitSets($_REQUEST['set']);
|
|
|
|
if (isset($_REQUEST['exclude']))
|
|
$aggregator->exclude($_REQUEST['exclude']);
|
|
|
|
|
|
$md = $aggregator->getSources();
|
|
|
|
|
|
$attributemap = NULL;
|
|
if (isset($_REQUEST['attributemap'])) $attributemap = $_REQUEST['attributemap'];
|
|
$prefix = '';
|
|
if (isset($_REQUEST['prefix'])) $prefix = $_REQUEST['prefix'];
|
|
$suffix = '';
|
|
if (isset($_REQUEST['suffix'])) $suffix = $_REQUEST['suffix'];
|
|
|
|
/* Make sure that the request isn't suspicious (contains references to current
|
|
* directory or parent directory or anything like that. Searching for './' in the
|
|
* URL will detect both '../' and './'. Searching for '\' will detect attempts to
|
|
* use Windows-style paths.
|
|
*/
|
|
if (strpos($attributemap, '\\') !== FALSE) {
|
|
throw new SimpleSAML_Error_BadRequest('Requested URL contained a backslash.');
|
|
} elseif (strpos($attributemap, './') !== FALSE) {
|
|
throw new SimpleSAML_Error_BadRequest('Requested URL contained \'./\'.');
|
|
}
|
|
|
|
$arp = new sspmod_aggregator_ARP($md, $attributemap, $prefix, $suffix);
|
|
|
|
$arpxml = $arp->getXML();
|
|
|
|
$xml = new DOMDocument();
|
|
$xml->loadXML($arpxml);
|
|
|
|
$firstelement = $xml->firstChild;
|
|
|
|
if ($aggregator->shouldSign()) {
|
|
$signinfo = $aggregator->getSigningInfo();
|
|
$signer = new SimpleSAML_XML_Signer($signinfo);
|
|
$signer->sign($firstelement, $firstelement, $firstelement->firstChild);
|
|
}
|
|
|
|
$mimetype = 'application/samlmetadata-xml';
|
|
$allowedmimetypes = array(
|
|
'text/plain',
|
|
'application/samlmetadata-xml',
|
|
'application/xml',
|
|
);
|
|
|
|
if (isset($_GET['mimetype']) && in_array($_GET['mimetype'], $allowedmimetypes)) {
|
|
$mimetype = $_GET['mimetype'];
|
|
}
|
|
|
|
if ($mimetype === 'text/plain') {
|
|
SimpleSAML_Utilities::formatDOMElement($xml->documentElement);
|
|
}
|
|
|
|
header('Content-Type: ' . $mimetype);
|
|
|
|
echo($xml->saveXML());
|