/** * Retrieve the metadata file. * * This function will check its cached copy, to see whether it can be used. * * @return SAML2_XML_md_EntityDescriptor|SAML2_XML_md_EntitiesDescriptor|NULL The downloaded metadata. */ public function getMetadata() { if ($this->metadata !== NULL) { /* We have already downloaded the metdata. */ return $this->metadata; } if (!$this->aggregator->isCacheValid($this->cacheId, $this->cacheTag)) { $this->updateCache(); if ($this->metadata !== NULL) { return $this->metadata; } /* We were unable to update the cache - use cached metadata. */ } $cacheFile = $this->aggregator->getCacheFile($this->cacheId); if (!file_exists($cacheFile)) { SimpleSAML\Logger::error($this->logLoc . 'No cached metadata available.'); return NULL; } SimpleSAML\Logger::debug($this->logLoc . 'Using cached metadata from ' . var_export($cacheFile, TRUE)); $metadata = file_get_contents($cacheFile); if ($metadata !== NULL) { $this->metadata = unserialize($metadata); return $this->metadata; } return NULL; }
/** * cron hook to update aggregator2 metadata. * * @param array &$croninfo Output */ function aggregator2_hook_cron(&$croninfo) { assert('is_array($croninfo)'); assert('array_key_exists("summary", $croninfo)'); assert('array_key_exists("tag", $croninfo)'); $cronTag = $croninfo['tag']; $config = SimpleSAML_Configuration::getConfig('module_aggregator2.php'); $config = $config->toArray(); foreach ($config as $id => $c) { if (!isset($c['cron.tag'])) { continue; } if ($c['cron.tag'] !== $cronTag) { continue; } try { $a = sspmod_aggregator2_Aggregator::getAggregator($id); $a->updateCache(); } catch (Exception $e) { $croninfo['summary'][] = 'Error during aggregator2 cacheupdate: ' . $e->getMessage(); } } }
<?php if (!isset($_REQUEST['id'])) { throw new SimpleSAML_Error_BadRequest('Missing required id-parameter.'); } $id = (string) $_REQUEST['id']; $aggregator = sspmod_aggregator2_Aggregator::getAggregator($id); $xml = $aggregator->getMetadata(); header('Content-Type: application/samlmetadata+xml'); header('Content-Length: ' . strlen($xml)); /* * At this point, if the ID was forged, getMetadata() would * have failed to find a valid metadata set, so we can trust it. */ header('Content-Disposition: filename=' . $id . '.xml'); echo $xml;