/**
  * 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();
        }
    }
}
Example #3
0
<?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;