<?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()); 
 
 |