<?php 
/** 
 * Hook to run a cron job. 
 * 
 * @param array &$croninfo  Output 
 */ 
function metarefresh_hook_cron(&$croninfo) { 
    assert('is_array($croninfo)'); 
    assert('array_key_exists("summary", $croninfo)'); 
    assert('array_key_exists("tag", $croninfo)'); 
 
    SimpleSAML_Logger::info('cron [metarefresh]: Running cron in cron tag [' . $croninfo['tag'] . '] '); 
 
    try { 
        $config = SimpleSAML_Configuration::getInstance(); 
        $mconfig = SimpleSAML_Configuration::getOptionalConfig('config-metarefresh.php'); 
 
        $sets = $mconfig->getConfigList('sets', array()); 
        $stateFile = $config->getPathValue('datadir', 'data/') . 'metarefresh-state.php'; 
 
        foreach ($sets AS $setkey => $set) { 
            // Only process sets where cron matches the current cron tag. 
            $cronTags = $set->getArray('cron'); 
            if (!in_array($croninfo['tag'], $cronTags)) continue; 
 
            SimpleSAML_Logger::info('cron [metarefresh]: Executing set [' . $setkey . ']'); 
 
            $expireAfter = $set->getInteger('expireAfter', NULL); 
            if ($expireAfter !== NULL) { 
                $expire = time() + $expireAfter; 
            } else { 
                $expire = NULL; 
            } 
 
            $outputDir = $set->getString('outputDir'); 
            $outputDir = $config->resolvePath($outputDir); 
            $outputFormat = $set->getValueValidate('outputFormat', array('flatfile', 'serialize'), 'flatfile'); 
 
            $oldMetadataSrc = SimpleSAML_Metadata_MetaDataStorageSource::getSource(array( 
                'type' => $outputFormat, 
                'directory' => $outputDir, 
            )); 
 
            $metaloader = new sspmod_metarefresh_MetaLoader($expire, $stateFile, $oldMetadataSrc); 
 
            # Get global blacklist, whitelist and caching info 
            $blacklist = $mconfig->getArray('blacklist', array()); 
            $whitelist = $mconfig->getArray('whitelist', array()); 
            $conditionalGET = $mconfig->getBoolean('conditionalGET', FALSE); 
 
            foreach($set->getArray('sources') AS $source) { 
 
                # Merge global and src specific blacklists 
                if(isset($source['blacklist'])) { 
                    $source['blacklist'] = array_unique(array_merge($source['blacklist'], $blacklist)); 
                } else { 
                    $source['blacklist'] = $blacklist; 
                } 
 
                # Merge global and src specific whitelists 
                if(isset($source['whitelist'])) { 
                    $source['whitelist'] = array_unique(array_merge($source['whitelist'], $whitelist)); 
                } else { 
                    $source['whitelist'] = $whitelist; 
                } 
 
                # Let src specific conditionalGET override global one 
                if(!isset($source['conditionalGET'])) { 
                    $source['conditionalGET'] = $conditionalGET; 
                } 
 
                SimpleSAML_Logger::debug('cron [metarefresh]: In set [' . $setkey . '] loading source ['  . $source['src'] . ']'); 
                $metaloader->loadSource($source); 
            } 
 
            // Write state information back to disk 
            $metaloader->writeState(); 
 
            switch ($outputFormat) { 
                case 'flatfile': 
                    $metaloader->writeMetadataFiles($outputDir); 
                    break; 
                case 'serialize': 
                    $metaloader->writeMetadataSerialize($outputDir); 
                    break; 
            } 
 
            if ($set->hasValue('arp')) { 
                $arpconfig = SimpleSAML_Configuration::loadFromArray($set->getValue('arp')); 
                $metaloader->writeARPfile($arpconfig); 
            } 
        } 
 
    } catch (Exception $e) { 
        $croninfo['summary'][] = 'Error during metarefresh: ' . $e->getMessage(); 
    } 
} 
?>
 
 |