summaryrefslogtreecommitdiffstats
path: root/inc/simplesamlphp/modules/metarefresh/hooks/hook_cron.php
diff options
context:
space:
mode:
Diffstat (limited to 'inc/simplesamlphp/modules/metarefresh/hooks/hook_cron.php')
-rw-r--r--inc/simplesamlphp/modules/metarefresh/hooks/hook_cron.php98
1 files changed, 98 insertions, 0 deletions
diff --git a/inc/simplesamlphp/modules/metarefresh/hooks/hook_cron.php b/inc/simplesamlphp/modules/metarefresh/hooks/hook_cron.php
new file mode 100644
index 0000000..ce9be0c
--- /dev/null
+++ b/inc/simplesamlphp/modules/metarefresh/hooks/hook_cron.php
@@ -0,0 +1,98 @@
+<?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();
+ }
+}
+?> \ No newline at end of file